app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

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"