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."