move to RAM build

This commit is contained in:
gandc committed 2026-10-03 23:28:58 +03:00
1 parent 3e7086d11e
commit 2db7d1a842
2 files changed
+131 -9

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
name: Prepare RAM CI environment
description: Keep RustDesk Linux build data and package caches in the RAM workspace
runs:
using: composite
steps:
- name: Configure RAM CI environment
shell: bash
run: |
set -euo pipefail
set +x
# The runner must mount its workspace on executable tmpfs, as for Fluxer.
case "$(findmnt -n -o FSTYPE -T "$GITHUB_WORKSPACE")" in
tmpfs|ramfs) ;;
*) echo "ERROR: GITHUB_WORKSPACE must be backed by RAM (tmpfs/ramfs)."; exit 1 ;;
esac
normalize_url() {
local value="$1"
value="${value//$'\r'/}"
value="${value//$'\n'/}"
case "$value" in
\"*\") value="${value#\"}"; value="${value%\"}" ;;
\'*\') value="${value#\'}"; value="${value%\'}" ;;
esac
test -n "$value" || { echo "ERROR: Nexus URL is empty" >&2; return 1; }
printf '%s/' "${value%/}"
}
NEXUS_CARGO_URL="$(normalize_url "${NEXUS_CARGO_URL:-}")"
NEXUS_MAVEN_URL="$(normalize_url "${NEXUS_MAVEN_URL:-}")"
# Preserve rustup and its proxies before moving HOME and Cargo caches.
# Unlike Fluxer, RustDesk selects multiple toolchains from upstream CI.
RUSTUP_HOME="${RUSTUP_HOME:-$HOME/.rustup}"
RUSTUP_EXE="$(command -v rustup)"
RUSTUP_BIN="$(dirname "$RUSTUP_EXE")"
CI_ROOT="$GITHUB_WORKSPACE/.ci"
mkdir -p "$CI_ROOT"/{home,tmp,cargo/bin,pub-cache,gradle/init.d,xdg-cache,xdg-config,xdg-data,vcpkg-cache,vcpkg-downloads}
chmod 700 "$CI_ROOT/home" "$CI_ROOT/cargo" "$CI_ROOT/gradle"
# Fail before cloning/building when the RAM mount is noexec.
printf '#!/bin/sh\nexit 0\n' > "$CI_ROOT/tmp/check-exec"
chmod +x "$CI_ROOT/tmp/check-exec"
"$CI_ROOT/tmp/check-exec"
rm "$CI_ROOT/tmp/check-exec"
cat > "$CI_ROOT/cargo/config.toml" <<EOF_CARGO
[source.crates-io]
replace-with = "cargo-proxy"
[source.cargo-proxy]
registry = "sparse+$NEXUS_CARGO_URL"
EOF_CARGO
chmod 600 "$CI_ROOT/cargo/config.toml"
cat > "$CI_ROOT/gradle/init.d/00-nexus.init.gradle" <<'EOF_GRADLE'
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_GRADLE
{
echo "CI_ROOT=$CI_ROOT"
echo "HOME=$CI_ROOT/home"
echo "TMPDIR=$CI_ROOT/tmp"
echo "TMP=$CI_ROOT/tmp"
echo "TEMP=$CI_ROOT/tmp"
echo "XDG_CACHE_HOME=$CI_ROOT/xdg-cache"
echo "XDG_CONFIG_HOME=$CI_ROOT/xdg-config"
echo "XDG_DATA_HOME=$CI_ROOT/xdg-data"
echo "CARGO_HOME=$CI_ROOT/cargo"
# Upstream scripts expect rustdesk/target; do not move it elsewhere.
echo "CARGO_TARGET_DIR=$GITHUB_WORKSPACE/rustdesk/target"
echo "RUSTUP_HOME=$RUSTUP_HOME"
echo "PUB_CACHE=$CI_ROOT/pub-cache"
echo "GRADLE_USER_HOME=$CI_ROOT/gradle"
printf 'JAVA_TOOL_OPTIONS=%s -Djava.io.tmpdir="%s"\n' "${JAVA_TOOL_OPTIONS:-}" "$CI_ROOT/tmp"
echo "VCPKG_DEFAULT_BINARY_CACHE=$CI_ROOT/vcpkg-cache"
echo "VCPKG_DOWNLOADS=$CI_ROOT/vcpkg-downloads"
echo "NEXUS_CARGO_URL=$NEXUS_CARGO_URL"
echo "NEXUS_MAVEN_URL=$NEXUS_MAVEN_URL"
} >> "$GITHUB_ENV"
{
echo "$RUSTUP_BIN"
echo "$CI_ROOT/cargo/bin"
} >> "$GITHUB_PATH"
df -h "$GITHUB_WORKSPACE"
+29 -9
View File
@@ -14,9 +14,19 @@ env:
jobs: jobs:
resolve-config: resolve-config:
name: Resolve upstream build config name: Resolve upstream build config
runs-on: rustdesk-android runs-on: ci-linux-builder
env:
NEXUS_CARGO_URL: ${{ secrets.NEXUS_CARGO_URL }}
NEXUS_MAVEN_URL: ${{ secrets.NEXUS_MAVEN_URL }}
steps: steps:
- name: Checkout CI repository
uses: actions/checkout@v4
- name: Prepare RAM CI environment
uses: ./.gitea/actions/prepare-ram-ci
- name: Clone selected RustDesk tag - name: Clone selected RustDesk tag
shell: bash shell: bash
run: | run: |
@@ -112,9 +122,19 @@ jobs:
generate-bridge: generate-bridge:
name: Generate Flutter Rust Bridge name: Generate Flutter Rust Bridge
needs: [resolve-config] needs: [resolve-config]
runs-on: rustdesk-android runs-on: ci-linux-builder
env:
NEXUS_CARGO_URL: ${{ secrets.NEXUS_CARGO_URL }}
NEXUS_MAVEN_URL: ${{ secrets.NEXUS_MAVEN_URL }}
steps: steps:
- name: Checkout CI repository
uses: actions/checkout@v4
- name: Prepare RAM CI environment
uses: ./.gitea/actions/prepare-ram-ci
- name: Download build config - name: Download build config
uses: https://github.com/actions/download-artifact@v8 uses: https://github.com/actions/download-artifact@v8
with: with:
@@ -158,12 +178,12 @@ jobs:
export RUSTUP_TOOLCHAIN="${BRIDGE_RUST_VERSION}" export RUSTUP_TOOLCHAIN="${BRIDGE_RUST_VERSION}"
echo "RUSTUP_TOOLCHAIN=${BRIDGE_RUST_VERSION}" >> "${GITHUB_ENV}" echo "RUSTUP_TOOLCHAIN=${BRIDGE_RUST_VERSION}" >> "${GITHUB_ENV}"
if [ -x "/opt/flutter-${BRIDGE_FLUTTER_VERSION}/bin/flutter" ]; then FLUTTER_DIR="${HOME}/.cache/rustdesk/flutter-${BRIDGE_FLUTTER_VERSION}"
FLUTTER_DIR="/opt/flutter-${BRIDGE_FLUTTER_VERSION}" if [ ! -x "${FLUTTER_DIR}/bin/flutter" ]; then
else mkdir -p "$(dirname "${FLUTTER_DIR}")"
FLUTTER_DIR="${HOME}/.cache/rustdesk/flutter-${BRIDGE_FLUTTER_VERSION}" if [ -x "/opt/flutter-${BRIDGE_FLUTTER_VERSION}/bin/flutter" ]; then
cp -a "/opt/flutter-${BRIDGE_FLUTTER_VERSION}" "${FLUTTER_DIR}"
if [ ! -x "${FLUTTER_DIR}/bin/flutter" ]; then else
rm -rf "${FLUTTER_DIR}" rm -rf "${FLUTTER_DIR}"
mkdir -p "$(dirname "${FLUTTER_DIR}")" mkdir -p "$(dirname "${FLUTTER_DIR}")"
@@ -177,7 +197,7 @@ jobs:
git config --global --add safe.directory "${FLUTTER_DIR}" || true git config --global --add safe.directory "${FLUTTER_DIR}" || true
export PATH="${FLUTTER_DIR}/bin:${HOME}/.cargo/bin:${PATH}" export PATH="${FLUTTER_DIR}/bin:${CARGO_HOME}/bin:${PATH}"
echo "${FLUTTER_DIR}/bin" >> "${GITHUB_PATH}" echo "${FLUTTER_DIR}/bin" >> "${GITHUB_PATH}"
flutter config --no-analytics flutter config --no-analytics