From 5bbe489b5684cac2b426432ccfd850a9c94a1227 Mon Sep 17 00:00:00 2001 From: GandC Date: Sat, 3 Oct 2026 21:44:56 +0300 Subject: [PATCH] move to RAM build --- .gitea/actions/prepare-ram-ci/action.yml | 198 +++++++++++++++++++++++ .gitea/workflows/desktop.yml | 31 +++- 2 files changed, 222 insertions(+), 7 deletions(-) create mode 100644 .gitea/actions/prepare-ram-ci/action.yml diff --git a/.gitea/actions/prepare-ram-ci/action.yml b/.gitea/actions/prepare-ram-ci/action.yml new file mode 100644 index 0000000..d6a01b1 --- /dev/null +++ b/.gitea/actions/prepare-ram-ci/action.yml @@ -0,0 +1,198 @@ +name: Prepare RAM CI environment +description: Configure RAM-backed CI directories and Nexus package proxies + +runs: + using: composite + + steps: + - name: Configure RAM CI environment + shell: bash + run: | + set -euo pipefail + set +x + + require_value() { + local name="$1" + local value="$2" + + if [ -z "$value" ]; then + echo "ERROR: required CI value is empty: $name" + exit 1 + fi + } + + require_value "NEXUS_CARGO_URL" "$NEXUS_CARGO_URL" + require_value "NEXUS_MAVEN_URL" "$NEXUS_MAVEN_URL" + require_value "NEXUS_NPM_URL" "$NEXUS_NPM_URL" + require_value "NEXUS_NODEJS_URL" "$NEXUS_NODEJS_URL" + + normalize_url() { + local value="$1" + + value="${value//$'\r'/}" + value="${value//$'\n'/}" + + case "$value" in + \"*\") + value="${value#\"}" + value="${value%\"}" + ;; + \'*\') + value="${value#\'}" + value="${value%\'}" + ;; + esac + + printf '%s' "$value" + } + + NEXUS_CARGO_URL="$(normalize_url "$NEXUS_CARGO_URL")" + NEXUS_MAVEN_URL="$(normalize_url "$NEXUS_MAVEN_URL")" + NEXUS_NPM_URL="$(normalize_url "$NEXUS_NPM_URL")" + NEXUS_NODEJS_URL="$(normalize_url "$NEXUS_NODEJS_URL")" + + NEXUS_CARGO_URL="${NEXUS_CARGO_URL%/}/" + NEXUS_MAVEN_URL="${NEXUS_MAVEN_URL%/}/" + NEXUS_NPM_URL="${NEXUS_NPM_URL%/}/" + NEXUS_NODEJS_URL="${NEXUS_NODEJS_URL%/}/" + + CI_ROOT="$GITHUB_WORKSPACE/.ci" + + CI_HOME="$CI_ROOT/home" + CI_TMP="$CI_ROOT/tmp" + CI_BIN="$CI_ROOT/bin" + + NPM_CONFIG_USERCONFIG="$CI_ROOT/npmrc" + NPM_CACHE="$CI_ROOT/npm-cache" + + COREPACK_HOME="$CI_ROOT/corepack" + PNPM_HOME="$CI_ROOT/pnpm-home" + + GRADLE_USER_HOME="$CI_ROOT/gradle" + + CARGO_HOME="$CI_ROOT/cargo" + CARGO_TARGET_DIR="$CI_ROOT/cargo-target" + RUSTUP_HOME="$CI_ROOT/rustup" + + XDG_CACHE_HOME="$CI_ROOT/xdg-cache" + XDG_CONFIG_HOME="$CI_ROOT/xdg-config" + XDG_DATA_HOME="$CI_ROOT/xdg-data" + + mkdir -p \ + "$CI_HOME" \ + "$CI_TMP" \ + "$CI_BIN" \ + "$NPM_CACHE" \ + "$COREPACK_HOME" \ + "$PNPM_HOME" \ + "$GRADLE_USER_HOME/init.d" \ + "$CARGO_HOME" \ + "$CARGO_TARGET_DIR" \ + "$RUSTUP_HOME" \ + "$XDG_CACHE_HOME" \ + "$XDG_CONFIG_HOME" \ + "$XDG_DATA_HOME" + + chmod 700 \ + "$CI_HOME" \ + "$GRADLE_USER_HOME" \ + "$CARGO_HOME" \ + "$RUSTUP_HOME" + + cat > "$NPM_CONFIG_USERCONFIG" < "$CARGO_HOME/config.toml" + + chmod 600 "$CARGO_HOME/config.toml" + + if [ "$(wc -l < "$CARGO_HOME/config.toml")" -ne 5 ]; then + echo "ERROR: generated Cargo config has unexpected line count" + nl -ba "$CARGO_HOME/config.toml" + exit 1 + fi + + cat > "$GRADLE_USER_HOME/init.d/00-nexus.init.gradle" <<'EOF' + def nexusUrl = System.getenv("NEXUS_MAVEN_URL") + + if (nexusUrl == null || nexusUrl.isBlank()) { + throw new GradleException( + "NEXUS_MAVEN_URL is not configured" + ) + } + + def configureNexusRepository = { repositories -> + repositories.maven { + name = "CI_NEXUS" + url = uri(nexusUrl) + allowInsecureProtocol = + nexusUrl.startsWith("http://") + + } + } + + gradle.beforeSettings { settings -> + configureNexusRepository( + settings.pluginManagement.repositories + ) + + configureNexusRepository( + settings.dependencyResolutionManagement.repositories + ) + } + EOF + + chmod 600 \ + "$GRADLE_USER_HOME/init.d/00-nexus.init.gradle" + + { + echo "CI_ROOT=$CI_ROOT" + echo "CI_BIN=$CI_BIN" + + echo "HOME=$CI_HOME" + echo "TMPDIR=$CI_TMP" + + echo "XDG_CACHE_HOME=$XDG_CACHE_HOME" + echo "XDG_CONFIG_HOME=$XDG_CONFIG_HOME" + echo "XDG_DATA_HOME=$XDG_DATA_HOME" + + echo "NPM_CONFIG_USERCONFIG=$NPM_CONFIG_USERCONFIG" + echo "NPM_CONFIG_CACHE=$NPM_CACHE" + echo "npm_config_cache=$NPM_CACHE" + + echo "COREPACK_HOME=$COREPACK_HOME" + echo "COREPACK_NPM_REGISTRY=$NEXUS_NPM_URL" + + echo "PNPM_HOME=$PNPM_HOME" + echo "PNPM_CONFIG_REGISTRY=$NEXUS_NPM_URL" + + echo "GRADLE_USER_HOME=$GRADLE_USER_HOME" + + echo "CARGO_HOME=$CARGO_HOME" + echo "CARGO_TARGET_DIR=$CARGO_TARGET_DIR" + echo "RUSTUP_HOME=$RUSTUP_HOME" + + echo "NVM_NODEJS_ORG_MIRROR=$NEXUS_NODEJS_URL" + + echo "NEXUS_CARGO_URL=$NEXUS_CARGO_URL" + echo "NEXUS_MAVEN_URL=$NEXUS_MAVEN_URL" + echo "NEXUS_NPM_URL=$NEXUS_NPM_URL" + echo "NEXUS_NODEJS_URL=$NEXUS_NODEJS_URL" + } >> "$GITHUB_ENV" + + { + echo "$CI_BIN" + echo "$PNPM_HOME" + } >> "$GITHUB_PATH" + + echo "CI package environment prepared." diff --git a/.gitea/workflows/desktop.yml b/.gitea/workflows/desktop.yml index 75e6c69..9b59bea 100644 --- a/.gitea/workflows/desktop.yml +++ b/.gitea/workflows/desktop.yml @@ -388,7 +388,19 @@ jobs: runs-on: ubuntu-22.04 + env: + NEXUS_CARGO_URL: ${{ secrets.NEXUS_CARGO_URL }} + NEXUS_MAVEN_URL: ${{ secrets.NEXUS_MAVEN_URL }} + NEXUS_NPM_URL: ${{ secrets.NEXUS_NPM_URL }} + NEXUS_NODEJS_URL: ${{ secrets.NEXUS_NODEJS_URL }} + steps: + - name: Checkout CI repository + uses: actions/checkout@v4 + + - name: Prepare RAM CI environment + uses: ./.gitea/actions/prepare-ram-ci + - name: Clone Fluxer shell: bash run: | @@ -631,11 +643,16 @@ jobs: run: | set -euxo pipefail - corepack enable - corepack prepare pnpm@10.29.3 --activate + corepack enable \ + --install-directory "$CI_BIN" + + corepack prepare \ + pnpm@10.29.3 \ + --activate node --version pnpm --version + pnpm store path - name: Setup Rust @@ -650,13 +667,13 @@ jobs: https://sh.rustup.rs | sh -s -- -y --profile minimal - echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + echo "$CARGO_HOME/bin" >> "$GITHUB_PATH" - "$HOME/.cargo/bin/rustup" update stable - "$HOME/.cargo/bin/rustup" default stable + "$CARGO_HOME/bin/rustup" update stable + "$CARGO_HOME/bin/rustup" default stable - "$HOME/.cargo/bin/rustc" --version - "$HOME/.cargo/bin/cargo" --version + "$CARGO_HOME/bin/rustc" --version + "$CARGO_HOME/bin/cargo" --version - name: Configure self-hosted server