diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml new file mode 100644 index 0000000..0de0246 --- /dev/null +++ b/.github/workflows/build-and-release.yml @@ -0,0 +1,77 @@ +on: + workflow_call: + workflow_dispatch: + pull_request: + push: + branches: [main] + +jobs: + build-artifacts: + runs-on: ${{ matrix.systems.runner }} + permissions: + id-token: write + contents: read + strategy: + matrix: + systems: + - nix-system: aarch64-darwin + runner: macos-latest-xlarge + artifact: flake-iter-ARM64-macOS + - nix-system: aarch64-linux + runner: namespace-profile-default-arm64 + artifact: flake-iter-ARM64-Linux + - nix-system: x86_64-linux + runner: ubuntu-24.04 + artifact: flake-iter-X64-Linux + steps: + - name: git checkout + uses: actions/checkout@v6 + + - name: Install Determinate Nix + uses: DeterminateSystems/determinate-nix-action@main + + - name: Set up FlakeHub Cache + uses: DeterminateSystems/flakehub-cache-action@main + + - name: Build package for ${{ matrix.systems.nix-system }} + run: | + nix build -L + + - name: Prepare ${{ matrix.systems.nix-system }} artifact + run: | + mkdir -p artifacts + cp result/bin/flake-iter artifacts/${{ matrix.systems.artifact }} + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: flake-iter-${{ matrix.systems.nix-system }} + path: artifacts/${{ matrix.systems.artifact }} + if-no-files-found: error + overwrite: true + retention-days: 1 + + upload-artifacts-to-s3: + needs: build-artifacts + # Upload only on PR merge + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: ubuntu-24.04 + permissions: + id-token: write + contents: read + steps: + - name: Download artifacts directory + uses: actions/download-artifact@v7 + with: + pattern: flake-iter-* + path: ./artifacts + merge-multiple: true + + - name: Upload to S3 + uses: DeterminateSystems/push-artifact-ids@main + with: + s3_upload_role: ${{ secrets.AWS_S3_UPLOAD_ROLE }} + bucket: ${{ secrets.AWS_S3_UPLOAD_BUCKET }} + directory: ./artifacts + ids_project_name: flake-iter + ids_binary_prefix: flake-iter diff --git a/.github/workflows/determinate-ci.yml b/.github/workflows/determinate-ci.yml deleted file mode 100644 index c5ac4c8..0000000 --- a/.github/workflows/determinate-ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -on: - pull_request: - workflow_dispatch: - push: - branches: - - main - - master - tags: - - "v?[0-9]+.[0-9]+.[0-9]+*" - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - DeterminateCI: - uses: DeterminateSystems/ci/.github/workflows/workflow.yml@main - permissions: - id-token: "write" - contents: "read" - with: - visibility: public - flake-iter-flakeref: ".#" - runner-map: | - { - "aarch64-darwin": "macos-latest", - "aarch64-linux": "ubuntu-24.04-arm", - "x86_64-linux": "ubuntu-latest" - } diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 3abba74..7010fcf 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -18,7 +18,7 @@ jobs: - uses: DeterminateSystems/flakehub-cache-action@main - name: Nix formatting - run: git ls-files '*.nix' | nix develop --command xargs nixpkgs-fmt --check + run: git ls-files '*.nix' | nix develop --command xargs nixfmt --check - - name: Nix Flake Check + - name: Nix flake check run: nix flake check --print-build-logs --all-systems diff --git a/flake.lock b/flake.lock index bc159ec..b9c0a4e 100644 --- a/flake.lock +++ b/flake.lock @@ -22,12 +22,12 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1761979010, - "narHash": "sha256-isqMvjTk3jdTHN6KA/BWQvOSVe7O35OQKAZNtLK76OY=", - "rev": "3107255abfe4f2d1c3eee7a3e2f5a5eb6f2200fe", - "revCount": 2439, + "lastModified": 1764571808, + "narHash": "sha256-+oo9W5rz03TjfpNqDSLEQwgKiuBbjrHdORyTHli2RuM=", + "rev": "df3c2e78ec13418f85c1f26e77a50f865ec57d38", + "revCount": 2471, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/nix-community/fenix/0.1.2439%2Brev-3107255abfe4f2d1c3eee7a3e2f5a5eb6f2200fe/019a3e7f-523d-7e82-b791-0e92cf55a0a9/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/nix-community/fenix/0.1.2471%2Brev-df3c2e78ec13418f85c1f26e77a50f865ec57d38/019ad905-65fc-7ba6-8d92-a0b2cf1c6ea6/source.tar.gz" }, "original": { "type": "tarball", @@ -36,26 +36,26 @@ }, "flake-schemas": { "locked": { - "lastModified": 1761577921, - "narHash": "sha256-eK3/xbUOrxp9fFlei09XNjqcdiHXxndzrTXp7jFpOk8=", - "rev": "47849c7625e223d36766968cc6dc23ba0e135922", - "revCount": 107, + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.2.0/019a4a84-544d-7c59-b26d-e334e320c932/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" }, "original": { "type": "tarball", - "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A" + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/0.1" } }, "nixpkgs": { "locked": { - "lastModified": 1763948260, - "narHash": "sha256-dY9qLD0H0zOUgU3vWacPY6Qc421BeQAfm8kBuBtPVE0=", - "rev": "1c8ba8d3f7634acac4a2094eef7c32ad9106532c", - "revCount": 813095, + "lastModified": 1765762245, + "narHash": "sha256-3iXM/zTqEskWtmZs3gqNiVtRTsEjYAedIaLL0mSBsrk=", + "rev": "c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d", + "revCount": 903561, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2505.813095%2Brev-1c8ba8d3f7634acac4a2094eef7c32ad9106532c/019ab6d8-0005-7317-844d-5d868444249f/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.2511.903561%2Brev-c8cfcd6ccd422e41cc631a0b73ed4d5a925c393d/019b231b-8461-7fef-af86-fa7662ea16ad/source.tar.gz" }, "original": { "type": "tarball", @@ -73,11 +73,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1761894503, - "narHash": "sha256-SreGV62DEv7kLJEcOBrw2V6Kup0siT4wS3Ye8PlFTdE=", + "lastModified": 1764525349, + "narHash": "sha256-vR3vU9AwzMsBvjNeeG2inA5W/2MwseFk5NIIrLFEMHk=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "2e2e3ebec91215078de9b754363fc9a7b0fdef13", + "rev": "d646b23f000d099d845f999c2c1e05b15d9cdc78", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cae213f..683f54f 100644 --- a/flake.nix +++ b/flake.nix @@ -11,25 +11,29 @@ crane = { url = "https://flakehub.com/f/ipetkov/crane/0.20"; }; - flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*"; + flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/0.1"; }; outputs = - inputs: + { self, ... }@inputs: let + inherit (inputs.nixpkgs) lib; + supportedSystems = [ "x86_64-linux" "aarch64-darwin" "aarch64-linux" ]; + forEachSupportedSystem = f: - inputs.nixpkgs.lib.genAttrs supportedSystems ( + lib.genAttrs supportedSystems ( system: f { + inherit system; pkgs = import inputs.nixpkgs { inherit system; - overlays = [ inputs.self.overlays.default ]; + overlays = [ self.overlays.default ]; }; } ); @@ -50,10 +54,10 @@ stable.rustfmt stable.rust-src ] - ++ inputs.nixpkgs.lib.optionals (system == "x86_64-linux") [ + ++ lib.optionals (system == "x86_64-linux") [ targets.x86_64-unknown-linux-musl.stable.rust-std ] - ++ inputs.nixpkgs.lib.optionals (system == "aarch64-linux") [ + ++ lib.optionals (system == "aarch64-linux") [ targets.aarch64-unknown-linux-musl.stable.rust-std ] ); @@ -61,7 +65,7 @@ }; devShells = forEachSupportedSystem ( - { pkgs }: + { pkgs, system }: rec { default = pkgs.mkShell { packages = with pkgs; [ @@ -70,9 +74,9 @@ cargo-watch bacon rust-analyzer - nixpkgs-fmt cargo-machete iconv + self.formatter.${system} ]; env = { @@ -87,14 +91,16 @@ } ); + formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixfmt); + # These outputs are solely for local testing packages = forEachSupportedSystem ( - { pkgs }: + { pkgs, ... }: rec { default = pkgs.craneLib.buildPackage { pname = meta.name; inherit (meta) version; - src = inputs.self; + src = self; doCheck = true; buildInputs = with pkgs; [ iconv ]; }; diff --git a/src/cli.rs b/src/cli.rs index 509d377..962d42c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -14,6 +14,7 @@ enum FlakeIterCommand { /// A tool for working with flake outputs. #[derive(Parser)] +#[command(version)] pub struct Cli { /// Whether to display all Nix build output. #[arg(