run-linux-x86_64-development-check.sh (7592B)
1 #!/bin/sh 2 set -eu 3 4 repository_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) 5 6 fail() { 7 printf '%s\n' "linux-x86_64 development check: $1" >&2 8 exit 1 9 } 10 11 [ -n "${EXT_BUILD_RUN_ACTIVE:-}" ] || fail "must run through cargo extbuild" 12 [ -n "${EXT_BUILD_PROJECT_DIR:-}" ] || fail "EXT_BUILD_PROJECT_DIR is unavailable" 13 [ -n "${EXT_BUILD_TMPDIR:-}" ] || fail "EXT_BUILD_TMPDIR is unavailable" 14 command -v docker >/dev/null 2>&1 || fail "docker is unavailable" 15 docker info >/dev/null 2>&1 || fail "docker daemon is unavailable" 16 17 source_commit=$(git -C "$repository_root" rev-parse HEAD) 18 [ -n "$source_commit" ] || fail "source commit is unavailable" 19 [ -z "$(git -C "$repository_root" status --porcelain --untracked-files=all)" ] || 20 fail "source worktree must be clean" 21 22 source_epoch=$(git -C "$repository_root" show -s --format=%ct "$source_commit") 23 case "$source_epoch" in 24 ''|*[!0-9]*) fail "source epoch is invalid" ;; 25 esac 26 27 source_lock="$repository_root/radroots.lib.source-lock.v1.toml" 28 [ -f "$source_lock" ] || fail "source lock is missing" 29 radroots_revision=$(sed -n 's/^revision = "\([0-9a-f]\{40\}\)"$/\1/p' "$source_lock") 30 [ "$(printf '%s\n' "$radroots_revision" | wc -l | tr -d ' ')" -eq 1 ] || 31 fail "source lock revision is not unique" 32 [ "${#radroots_revision}" -eq 40 ] || fail "source lock revision is invalid" 33 34 runner_root="$EXT_BUILD_PROJECT_DIR/linux-x86_64-development" 35 cargo_home="$runner_root/cargo-home" 36 cargo_target="$runner_root/cargo-target" 37 cargo_tool_target="$runner_root/cargo-tool-target" 38 cargo_tools="$runner_root/cargo-tools" 39 gradle_home="$runner_root/gradle-home" 40 gradle_build="$runner_root/gradle-build" 41 gradle_project_cache="$runner_root/gradle-project-cache" 42 container_home="$runner_root/home" 43 container_tmp="$runner_root/tmp" 44 container_jvm="$runner_root/jvm" 45 46 mkdir -p \ 47 "$cargo_home" \ 48 "$cargo_target" \ 49 "$cargo_tool_target" \ 50 "$cargo_tools" \ 51 "$gradle_home" \ 52 "$gradle_build" \ 53 "$gradle_project_cache" \ 54 "$container_home" \ 55 "$container_tmp" \ 56 "$container_jvm" 57 chmod 0700 "$container_tmp" 58 chmod 0755 "$container_jvm" 59 60 workspace=$(mktemp -d "$EXT_BUILD_TMPDIR/harvestcircle-linux-x86_64.XXXXXX") 61 cleanup() { 62 find "$workspace" -depth -delete 63 } 64 trap cleanup EXIT HUP INT TERM 65 66 git clone --no-local --no-hardlinks "$repository_root" "$workspace/source" 67 git -C "$workspace/source" checkout --detach "$source_commit" 68 [ -z "$(git -C "$workspace/source" status --porcelain --untracked-files=all)" ] || 69 fail "isolated source clone is not clean" 70 71 runner_image="docker.io/library/rust:1.97.1-slim-trixie@sha256:fc0648ac2962539be80bd424729a20fd80f7b64bfba7e90bbd642aed6c697c5a" 72 73 docker run \ 74 --rm \ 75 --init \ 76 --platform linux/amd64 \ 77 --workdir /workspace/source \ 78 --env HOME=/workspace/home \ 79 --env CARGO_HOME=/workspace/cargo-home \ 80 --env CARGO_TARGET_DIR=/workspace/cargo-target \ 81 --env CARGO_BUILD_JOBS=2 \ 82 --env GRADLE_USER_HOME=/workspace/gradle-home \ 83 --env JAVA_TOOL_OPTIONS=-Duser.home=/workspace/home \ 84 --env EXT_BUILD_GRADLE_BUILD_DIR=/workspace/gradle-build \ 85 --env HARVESTCIRCLE_BUILD_MODE=governed \ 86 --env HARVESTCIRCLE_BUILD_SOURCE_COMMIT="$source_commit" \ 87 --env HARVESTCIRCLE_BUILD_SOURCE_DIRTY=false \ 88 --env HARVESTCIRCLE_BUILD_RADROOTS_REVISION="$radroots_revision" \ 89 --env SOURCE_DATE_EPOCH="$source_epoch" \ 90 --mount "type=bind,src=$workspace/source,dst=/workspace/source" \ 91 --mount "type=bind,src=$container_home,dst=/workspace/home" \ 92 --mount "type=bind,src=$cargo_home,dst=/workspace/cargo-home" \ 93 --mount "type=bind,src=$cargo_target,dst=/workspace/cargo-target" \ 94 --mount "type=bind,src=$cargo_tool_target,dst=/workspace/cargo-tool-target" \ 95 --mount "type=bind,src=$cargo_tools,dst=/workspace/cargo-tools" \ 96 --mount "type=bind,src=$gradle_home,dst=/workspace/gradle-home" \ 97 --mount "type=bind,src=$gradle_build,dst=/workspace/gradle-build" \ 98 --mount "type=bind,src=$gradle_project_cache,dst=/workspace/gradle-project-cache" \ 99 --mount "type=bind,src=$container_tmp,dst=/tmp" \ 100 --mount "type=bind,src=$container_jvm,dst=/usr/lib/jvm" \ 101 "$runner_image" \ 102 sh -ceu ' 103 export DEBIAN_FRONTEND=noninteractive 104 mkdir -p /tmp/apt-archives/partial 105 chown _apt:root /tmp/apt-archives/partial 106 chmod 0700 /tmp/apt-archives/partial 107 apt-get update 108 apt-get -o Dir::Cache::archives=/tmp/apt-archives install --yes --no-install-recommends \ 109 binutils ca-certificates file g++ git gosu libasound2-dev libfreetype-dev \ 110 libssl-dev libx11-dev libxext-dev libxi-dev libxrender-dev libxtst-dev \ 111 make openjdk-21-jdk pkg-config xz-utils zlib1g-dev 112 rm -rf /var/lib/apt/lists/* 113 chown -R '"$(id -u):$(id -g)"' /tmp/apt-archives 114 chown -R '"$(id -u):$(id -g)"' /usr/lib/jvm 115 exec gosu '"$(id -u):$(id -g)"' sh -ceu '\'' 116 export PATH=/workspace/cargo-tools/bin:/usr/local/cargo/bin:$PATH 117 [ "$(uname -s)" = Linux ] 118 [ "$(uname -m)" = x86_64 ] 119 [ "$(git rev-parse HEAD)" = "$HARVESTCIRCLE_BUILD_SOURCE_COMMIT" ] 120 [ -z "$(git status --porcelain --untracked-files=all)" ] 121 rustc --version | grep -Eq "^rustc 1\\.97\\.1 " 122 java -version 2>&1 | grep -Eq "version \"21\\." 123 rustup component add clippy rustfmt 124 if ! cargo deny --version 2>/dev/null | grep -Eq "0\\.19\\.8$"; then 125 CARGO_TARGET_DIR=/workspace/cargo-tool-target \ 126 cargo install --root /workspace/cargo-tools cargo-deny --version 0.19.8 --locked 127 fi 128 cargo fmt --manifest-path core/Cargo.toml --all -- --check 129 cargo clippy --manifest-path core/Cargo.toml --workspace --all-targets --locked -- -D warnings 130 cargo test --manifest-path core/Cargo.toml --workspace --locked 131 cargo deny --manifest-path core/Cargo.toml check --config core/deny.toml licenses sources 132 cargo fmt --manifest-path tools/xtask/Cargo.toml --all -- --check 133 cargo clippy --manifest-path tools/xtask/Cargo.toml --all-targets --locked -- -D warnings 134 cargo test --manifest-path tools/xtask/Cargo.toml --locked 135 cargo run --manifest-path tools/xtask/Cargo.toml --locked -- qualification-report 136 tools/test-build-modes.sh 137 ./gradlew --no-daemon --no-parallel --no-configuration-cache \ 138 --project-cache-dir /workspace/gradle-project-cache -p build-logic \ 139 :contracts:check :plugins:check :plugins:functionalTest 140 ./gradlew --no-daemon --no-parallel --no-configuration-cache \ 141 --project-cache-dir /workspace/gradle-project-cache \ 142 :app:shared:ktlintCheck :app:desktop:ktlintCheck designFormatCheck \ 143 :app:shared:detektCommonMainSourceSet :app:shared:detektCommonTestSourceSet \ 144 :app:desktop:detekt designLint :app:shared:desktopTest :app:desktop:test \ 145 designTest :app:shared:check :app:desktop:check designCheck \ 146 :app:desktop:checkLicense :app:design_system:checkLicense \ 147 :tools:design_catalog:checkLicense :app:desktop:verifyUniFfiBindings \ 148 :app:desktop:verifyReleaseNativeLibrary :app:desktop:sourceReadiness \ 149 :app:desktop:integrationTest :app:desktop:verifyTestBridgeIsolation 150 [ -z "$(git status --porcelain --untracked-files=all)" ] 151 '\'' 152 ' 153 154 printf '%s\n' "harvestcircle.linux_x86_64.development=pass" 155 printf '%s\n' "harvestcircle.source_commit=$source_commit" 156 printf '%s\n' "harvestcircle.radroots_revision=$radroots_revision"