From 1554e7e76a4538c906d35f39ac62adec85284e13 Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 15 Feb 2026 00:37:57 +0800 Subject: [PATCH] ci: optimize and translate nix workflow (#1821) --- .github/workflows/nix.yml | 84 +++++++++++++++++++++++++++++++++++++++ flake.nix | 45 ++++++++++++++++++--- 2 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/nix.yml diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 000000000..8552a8dd2 --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,84 @@ +# Copyright 2024 RustFS Team +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Nix CI + +on: + push: + branches: [ "main" ] + paths: + - 'flake.nix' + - 'flake.lock' + - 'Cargo.toml' + - 'Cargo.lock' + - '.github/workflows/nix.yml' + pull_request: + branches: [ "main" ] + paths: + - 'flake.nix' + - 'flake.lock' + - 'Cargo.toml' + - 'Cargo.lock' + - '.github/workflows/nix.yml' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +permissions: + contents: read + +jobs: + nix-validation: + name: Nix Build & Check + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Setup Magic Nix Cache + uses: DeterminateSystems/magic-nix-cache-action@v13 + + - name: Setup Flake Checker + uses: DeterminateSystems/flake-checker-action@v12 + + - name: Verify Flake + run: | + echo "Checking flake structure and evaluation..." + nix flake show + nix flake check --print-build-logs + + - name: Build RustFS + run: | + echo "Building the default package..." + nix build .#default --print-build-logs + + - name: Test Binary + run: | + echo "Verifying the built binary..." + if [ -x "./result/bin/rustfs" ]; then + ./result/bin/rustfs --help + echo "Binary verification successful." + else + echo "Error: Binary not found or not executable at ./result/bin/rustfs" + exit 1 + fi diff --git a/flake.nix b/flake.nix index be6b90b20..52899929c 100644 --- a/flake.nix +++ b/flake.nix @@ -11,10 +11,21 @@ { description = "RustFS - High-performance S3-compatible object storage"; - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; outputs = - { nixpkgs, ... }: + { + self, + nixpkgs, + rust-overlay, + ... + }: let systems = [ "x86_64-linux" @@ -28,10 +39,26 @@ packages = forAllSystems ( system: let - pkgs = nixpkgs.legacyPackages.${system}; + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { inherit system overlays; }; + + # Use the latest stable rust toolchain + rustToolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rust-src" + "rust-analyzer" + "clippy" + "rustfmt" + ]; + }; + + rustPlatform = pkgs.makeRustPlatform { + cargo = rustToolchain; + rustc = rustToolchain; + }; in { - default = pkgs.rustPlatform.buildRustPackage { + default = rustPlatform.buildRustPackage { pname = "rustfs"; version = "0.0.5"; @@ -47,13 +74,21 @@ protobuf ]; - buildInputs = with pkgs; [ openssl ]; + buildInputs = with pkgs; [ + openssl + ] ++ lib.optionals stdenv.isDarwin [ + darwin.apple_sdk.frameworks.Security + darwin.apple_sdk.frameworks.SystemConfiguration + ]; cargoBuildFlags = [ "--package" "rustfs" ]; + # Set environment variables for build + PROTOC = "${pkgs.protobuf}/bin/protoc"; + doCheck = false; meta = {