From 27fa6d15eb3acb9edbc4393a858b7697ec4de328 Mon Sep 17 00:00:00 2001 From: jutty Date: Mon, 22 Jun 2026 21:15:10 -0300 Subject: [PATCH] CI: Switch tooling setup to Nix --- .forgejo/workflows/setup-tools.sh | 87 ------------------------------- .forgejo/workflows/verify.yaml | 63 +++++++++++++--------- .justfile | 27 +++++++--- Cargo.lock | 4 +- Cargo.toml | 2 +- flake.nix | 37 +++++++++---- 6 files changed, 89 insertions(+), 131 deletions(-) delete mode 100755 .forgejo/workflows/setup-tools.sh diff --git a/.forgejo/workflows/setup-tools.sh b/.forgejo/workflows/setup-tools.sh deleted file mode 100755 index bfa549f..0000000 --- a/.forgejo/workflows/setup-tools.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env sh - -set -eu - -TRIPLE="x86_64-unknown-linux-musl" -TRIPLE_GNU="x86_64-unknown-linux-gnu" - -JUST_VERSION="1.51.0" -JUST_SHA256SUM="c8f085ca3e885723c341d06243fc291b5abfdc8bbe3b2c076b117de490387b59" - -CARGO_LLVM_COV_VERSION="0.6.21" -CARGO_LLVM_COV_SHA256SUM="57f491aedf7cdb261538ceb49cbb1ee9d27df7ca205a5e1a009caaf5cb911afb" - -CARGO_AUDIT_VERSION="0.22.1" -CARGO_AUDIT_TAG="cargo-audit%2Fv$CARGO_AUDIT_VERSION" -CARGO_AUDIT_SHA256SUM="1890badd5f15831a9af4b074399fcd21e6f7c0fe42c84e9254cdffc9f813765c" - -TAPLO_VERSION="0.10.0" -TAPLO_SHA256SUM="8fe196b894ccf9072f98d4e1013a180306e17d244830b03986ee5e8eabeb6156" - -TYPOS_VERSION="1.47.2" -TYPOS_SHA256SUM="7aef58932fc123b4cf4b40d86468e89a3297d80169051d7cfd13a235e05fc426" - -CARGO_DENY_VERSION="0.19.8" -CARGO_DENY_SHA256SUM="70e769ae3872e34d45132b17040859175e11401dc12dddb0303e0b8c7d088f3f" - -CARGO_MSRV_VERSION="0.19.3" -CARGO_MSRV_SHA256SUM="6f9a0011ca8ad959d304185b9090390fd1ad87e2d764007fbb0abe043afa9ff5" - -fetch() { - repo="$1" - tag="$2" - filename="$3" - digest="$4" - binary="$5" - renamed_binary="${6:-$binary}" - - [ -d /tmp/tools ] || mkdir -p /tmp/tools - - curl -fsSLO --output-dir /tmp \ - -w '%{stderr}HTTP %{response_code} %{url}\n' \ - "https://github.com/$repo/releases/download/$tag/$filename" - - printf '%s %s\n' "$digest" "/tmp/$filename" > /tmp/digest - sha256sum --check /tmp/digest - - if printf '%s' "$filename" | grep -qE '\.tar\.|\.tgz$'; then - tar xf "/tmp/$filename" -C /tmp/tools - elif printf '%s' "$filename" | grep -q '\.gz$'; then - gunzip -c "/tmp/$filename" > "/tmp/tools/$binary" - else - echo "Fatal: can't determine how to unpack $filename" - exit 1 - fi - - find /tmp/tools -type f -name "$binary" \ - -exec mv -v '{}' "/usr/local/bin/$renamed_binary" ';' - chmod +x "/usr/local/bin/$renamed_binary" -} - -fetch casey/just "$JUST_VERSION" \ - "just-$JUST_VERSION-$TRIPLE.tar.gz" \ - "$JUST_SHA256SUM" just - -fetch taiki-e/cargo-llvm-cov "v$CARGO_LLVM_COV_VERSION" \ - "cargo-llvm-cov-$TRIPLE_GNU.tar.gz" \ - "$CARGO_LLVM_COV_SHA256SUM" cargo-llvm-cov - -fetch rustsec/rustsec "$CARGO_AUDIT_TAG" \ - "cargo-audit-$TRIPLE_GNU-v$CARGO_AUDIT_VERSION.tgz" \ - "$CARGO_AUDIT_SHA256SUM" cargo-audit - -fetch tamasfe/taplo "$TAPLO_VERSION" \ - "taplo-linux-x86_64.gz" \ - "$TAPLO_SHA256SUM" taplo-linux-x86_64 taplo - -fetch crate-ci/typos "v$TYPOS_VERSION" \ - "typos-v$TYPOS_VERSION-$TRIPLE.tar.gz" \ - "$TYPOS_SHA256SUM" typos - -fetch EmbarkStudios/cargo-deny "$CARGO_DENY_VERSION" \ - "cargo-deny-$CARGO_DENY_VERSION-$TRIPLE.tar.gz" \ - "$CARGO_DENY_SHA256SUM" cargo-deny - -fetch foresterre/cargo-msrv "v$CARGO_MSRV_VERSION" \ - "cargo-msrv-$TRIPLE_GNU-v$CARGO_MSRV_VERSION.tgz" \ - "$CARGO_MSRV_SHA256SUM" cargo-msrv diff --git a/.forgejo/workflows/verify.yaml b/.forgejo/workflows/verify.yaml index 9ef88ae..abf6c70 100644 --- a/.forgejo/workflows/verify.yaml +++ b/.forgejo/workflows/verify.yaml @@ -17,9 +17,14 @@ jobs: timeout-minutes: 20 container: image: rust:slim + env: + RUSTUP_HOME: /rust/rustup + CARGO_HOME: /rust/cargo steps: - name: Install action dependencies - run: apt-get install --no-install-recommends --update -y nodejs curl git + run: > + apt-get install --no-install-recommends --update -y + nodejs git curl xz-utils - name: Checkout code uses: actions/checkout@v6 @@ -28,35 +33,41 @@ jobs: - name: Set up Rust toolchain run: | + mkdir -p "$RUSTUP_HOME" + mkdir -p "$CARGO_HOME" + + rust_version=$( + grep '^rust-version = "' Cargo.toml \ + | cut -d '"' -f 2 + ) + + rustup default "$rust_version" + rustup toolchain install nightly rustup component add llvm-tools rustup component add --toolchain nightly rustfmt clippy - rustup target add x86_64-unknown-linux-gnu - rustup target add x86_64-unknown-linux-musl - - - name: Set up additional tooling - run: .forgejo/workflows/setup-tools.sh + rustup target add x86_64-unknown-linux-musl x86_64-unknown-linux-gnu - name: Set up CI user run: | - useradd -m ci && chown -R ci:ci . - git config --global --add safe.directory "$PWD" + useradd -m ci + mkdir /nix + chown -R ci:ci "$RUSTUP_HOME" "$CARGO_HOME" "$PWD" /nix + printf '[safe]\ndirectory = %s\n' "$PWD" > /etc/gitconfig - - name: Text matches - run: just ci todos-assess version-assess spell - - name: Schema lint - run: just ci schema-lint - - name: Deny - run: just ci deny - - name: Format - run: just ci format-assess - - name: Lint - run: just ci lint-assess - - name: MSRV - run: just ci msrv-assess - - name: Cargo check - run: just ci check - - name: Test - run: just ci test - - name: Coverage - run: just ci cover-assess + - name: Set up Nix + run: | + mkdir /etc/nix + echo experimental-features = nix-command flakes \ + >> /etc/nix/nix.conf + su ci -c " + sh -c 'curl -L https://nixos.org/nix/install | + bash -s -- --no-daemon' \ + " + - name: Assess + run: | + su ci -lc " + export RUSTUP_HOME=$RUSTUP_HOME CARGO_HOME=$CARGO_HOME + nix develop path:$FORGEJO_WORKSPACE -c \ + just -f $FORGEJO_WORKSPACE/.justfile verify + " diff --git a/.justfile b/.justfile index eb5e4e4..a3362b4 100644 --- a/.justfile +++ b/.justfile @@ -81,7 +81,7 @@ msrv-find: make_msrv(command, target) := f"printf '{{ target }}: '; " + \ f"cargo msrv {{ command }} --target {{ target }} --output-format minimal " \ - + f"-- {{ maybe_xwin(target) }} build --ignore-rust-version" + + f"-- {{ xwin_if(target) }} build --ignore-rust-version" [private] test-cover-quick: @@ -466,15 +466,21 @@ alias bm := build-musl # Release build [group: 'build'] release-build target=default_target: - {{ maybe_xwin(target) }} build \ + {{ xwin_if(target) }} build \ --timings --target {{ target }} --locked --release du -h target/{{ target }}/release/{{ with_suffix("en", target) }} -maybe_xwin(target) := if target == msvc_target { "cargo-xwin" } else { "cargo" } +xwin_if(target) := if target == msvc_target { "cargo-xwin" } else { "cargo" } with_suffix(file, target) := if target == msvc_target { f"{{ file }}.exe" } else { file } alias rb := release-build +# Release build of all targets +[group: 'build'] +release-build-all: release-build-musl release-build-gnu release-build-msvc + +alias rba := release-build-all + # glibc release build [group: 'build'] release-build-gnu: @@ -521,9 +527,18 @@ choose: alias ch := choose -[script, private, env("CARGO_HOME", "$HOME/.cargo")] -ci recipe: - su ci -c "just {{ recipe }}" +[script, private] +ci recipes: + ENV_PATH="$PATH" su ci -c "{{ just_cmd }} -f '{{ justfile() }}' {{ recipes }}" + +[script, private] +ci-nix recipes: + ENV_PATH="$PATH" su ci -c "nix develop --command \ + {{ just_cmd }} -f '{{ justfile() }}' {{ recipes }}" + +[private] +smoke: + echo OK ## VARIABLES export CARGO_TERM_COLOR := 'always' diff --git a/Cargo.lock b/Cargo.lock index 2dd79d1..c513b89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -530,9 +530,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "matchit" diff --git a/Cargo.toml b/Cargo.toml index a99994e..4df16e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ homepage = "https://en.jutty.dev" documentation = "https://en.jutty.dev/node/Documentation" edition = "2024" -rust-version= "1.91.1" +rust-version = "1.91.1" [features] serial-tests = [] diff --git a/flake.nix b/flake.nix index bfac211..8434a06 100644 --- a/flake.nix +++ b/flake.nix @@ -41,20 +41,39 @@ }); devShells = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; in { - default = pkgs.mkShell { - buildInputs = with pkgs; [ - rustup - just - watchexec + let + pkgs = nixpkgsFor.${system}; + sets = with pkgs; rec { + base = [ cargo-deny cargo-llvm-cov - cargo-mutants - go-tools - typos + cargo-msrv + just + rustup taplo + typos + ]; + cross = base ++ [ + cargo-xwin + wine + ]; + dev = [ + cargo-mutants + watchexec + git + ]; + edit = dev ++ [ + neovim + tmux ]; }; + in with sets; { + default = pkgs.mkShell { buildInputs = base; }; + cross = pkgs.mkShell { buildInputs = cross; }; + dev = pkgs.mkShell { buildInputs = base ++ dev; }; + cross-dev = pkgs.mkShell { buildInputs = cross ++ dev; }; + edit = pkgs.mkShell { buildInputs = edit; }; + cross-edit = pkgs.mkShell { buildInputs = cross ++ edit; }; } );