Flakes of rust
Find a file
Robin Appelman 2d3f2b2ea3
Some checks failed
CI / checks (push) Failing after 17s
fix passing autodeps env to packages
2025-03-22 14:17:38 +01:00
.github/workflows ci 2024-09-24 22:37:53 +02:00
autodeps openssl_no_vendor 2025-03-17 22:22:45 +01:00
.gitignore init 2024-09-24 16:54:20 +02:00
autotools.nix autotools for sqlx 2025-03-17 19:36:58 +01:00
cargo-meta.nix automatically add cargo-insta if used 2025-02-28 23:51:03 +01:00
crossArgs.nix cleanup 2024-12-23 22:56:03 +01:00
crossOpts.nix switch to alejandra for nix formatting 2024-12-23 22:55:24 +01:00
flake.lock updates 2025-02-23 22:18:01 +01:00
flake.nix switch to alejandra for nix formatting 2024-12-23 22:55:24 +01:00
freebsd-sysroot.nix switch to alejandra for nix formatting 2024-12-23 22:55:24 +01:00
mill-scale.nix fix passing autodeps env to packages 2025-03-22 14:17:38 +01:00
README.md add autodeps for libsodium 2024-12-21 15:06:11 +01:00

Mill Scale

An opinionated rust module for flakelight.

Features

Included checks:

  • Build project
  • Build examples (if they exist)
  • Verify MSRV (if specified in Cargo.toml)
  • Test and clippy with default features
  • Test and clippy with all features (if features are defined)
  • Test and clippy with no default features (if default features are defined)

Usage

{
  inputs = {
    nixpkgs.url = "nixpkgs/nixos-24.05";
    flakelight = {
      url = "github:nix-community/flakelight";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    mill-scale = {
      url = "github:icewind1991/mill-scale";
      inputs.flakelight.follows = "flakelight";
    };
  };
  outputs = { mill-scale, ... }: mill-scale ./. {};
}

Dependencies

(Native) build dependencies can be specified with the following

{
  # ...
  outputs = { mill-scale, ... }: mill-scale ./. {
    nativeBuildInputs = pkgs: [pkgs.libfoo];
    buildInputs = pkgs: [pkgs.libbar];
  };
}

Additionally, dependencies for the following crates should be automatically detected

  • openssl
  • udev
  • dbus
  • servo-fontconfig
  • sodium

Usage with GitHub Actions

Single runner

name: "CI"
on:
  pull_request:
  push:

jobs:
  checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v26
        # insert cache setup here
      - run: nix flake check --keep-going

Split over multiple runners

This automatically creates one job per check, allowing them to run in parallel.

This might be slower than running them all in the same runner depending on the time each check takes and the size of the intermediates that has to be downloaded from the cache.

name: "CI"
on:
  pull_request:
  push:

jobs:
  matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v27
      - id: set-matrix
        run: echo "matrix={\"check\":$(nix eval --json '.#checks.x86_64-linux' --apply 'builtins.attrNames')}" | tee -a $GITHUB_OUTPUT

  checks:
    runs-on: ubuntu-latest
    needs: [matrix]
    strategy:
      fail-fast: false
      matrix: ${{fromJson(needs.matrix.outputs.matrix)}}
    name: ${{ matrix.check }}
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v26
        # insert cache setup here
      - run: nix build .#checks.x86_64-linux.${{ matrix.check }}

Cross-compiling

Cross-compiling can be enabled with the following

{
  # ...
  outputs = { mill-scale, ... }: mill-scale ./. {
    crossTargets = [
      "x86_64-unknown-linux-musl"
      "x86_64-pc-windows-gnu"
    ];
  };
}

This adds cross-compiled package with the same name as the target to the packages.

Cross-compiling with GitHub Action

A lib.crossMatrix flake output is provided to help with setting up cross-compiling in CI.

This contains a list of targets and the binary suffix (e.g. .exe) for each target.

on: [push, pull_request]

name: CI

jobs:
  matrix:
    runs-on: ubuntu-latest
    outputs:
      cross-matrix: ${{ steps.set-matrix.outputs.cross-matrix }}
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v27
      - id: set-matrix
        run: |
          echo "cross-matrix={\"include\":$(nix eval --json '.#lib.crossMatrix')}" | tee -a $GITHUB_OUTPUT

  build:
    runs-on: ubuntu-latest
    needs: [matrix]
    strategy:
      fail-fast: false
      matrix: ${{fromJson(needs.matrix.outputs.cross-matrix)}}
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v27
        # insert cache setup here
      - run: nix build .#${{ matrix.target }}
      - uses: actions/upload-artifact@v4
        with:
          name: crate-name-${{ matrix.target }}
          path: result/bin/crate-name${{ matrix.binary-suffix }}

Credits

This flake is based on flakelight-rust, credit for most ideas got to accelbread.