summaryrefslogtreecommitdiffstats
path: root/.github/workflows/test.yml
blob: 29cff938af44f810bd4aa5767d132012db6c599a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: "Test"
on:
  pull_request:
  merge_group:
  push:
    branches:
      - master

env:
  NIXPKGS_BRANCH: nixpkgs-unstable
  NIX_VERSION: 2.24.11

jobs:
  # The `test-stable` and `install-against-stable` job names are
  # load‐bearing, despite their inaccuracy on the unstable branch, as
  # they are set as required checks in the repository configuration,
  # which only repository admins can change.
  #
  # TODO: Change them once the repository configuration is updated.

  test-stable:
    runs-on: macos-14
    steps:
    - uses: actions/checkout@v4
    - name: Install Nix
      uses: cachix/install-nix-action@v30
      with:
        install_url: https://releases.nixos.org/nix/nix-${{ env.NIX_VERSION }}/install
    - run: nix flake check --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}

  install-against-stable:
    runs-on: macos-14
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Install Nix
      uses: cachix/install-nix-action@v30
      with:
        install_url: https://releases.nixos.org/nix/nix-${{ env.NIX_VERSION }}/install
        nix_path: nixpkgs=channel:${{ env.NIXPKGS_BRANCH }}
    - name: Install channels
      run: |
        sudo nix-channel --add https://nixos.org/channels/${{ env.NIXPKGS_BRANCH }} nixpkgs
        sudo nix-channel --update
    - name: Install nix-darwin
      run: |
        sudo mkdir -p /etc/nix-darwin
        sudo cp modules/examples/simple.nix /etc/nix-darwin/configuration.nix

        nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
        sudo /usr/bin/sed -i.bak \
          "s/# programs.fish.enable = true;/ \
            imports = [ \
              ({ options, ... }: { \
                nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; \
                environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ]; \
                nix.nixPath = \
                  [ { darwin = \"${PWD////\/}\"; } ] \
                  ++ options.nix.nixPath.default; \
              }) \
            ]; \
          /" \
          /etc/nix-darwin/configuration.nix

        sudo nix run .#darwin-rebuild -- switch \
          -I darwin=. \
          -I darwin-config=/etc/nix-darwin/configuration.nix
    - name: Switch to new configuration
      run: |
        . /etc/bashrc

        sudo /usr/bin/sed -i.bak \
          "s/pkgs.vim/pkgs.hello/" \
          /etc/nix-darwin/configuration.nix

        sudo darwin-rebuild switch

        hello
    - name: Test uninstallation of nix-darwin
      run: |
        # We need to specify `--extra-experimental-features` because `experimental-features` is set by
        # `cachix/install-nix-action` but not by our default config above
        sudo nix run .#darwin-uninstaller \
          --extra-experimental-features "nix-command flakes" \
          --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}
        sudo nix run .#darwin-uninstaller.tests.uninstaller \
          --extra-experimental-features "nix-command flakes" \
          --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}

  install-flake:
    runs-on: macos-14
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Install Nix
      uses: cachix/install-nix-action@v30
      with:
        install_url: https://releases.nixos.org/nix/nix-${{ env.NIX_VERSION }}/install
    - name: Install nix-darwin
      run: |
        sudo mkdir -p /etc/nix-darwin
        darwin=$(pwd)
        pushd /etc/nix-darwin
          sudo nix flake init -t $darwin
          nixConfHash=$(shasum -a 256 /etc/nix/nix.conf | cut -d ' ' -f 1)
          sudo /usr/bin/sed -i.bak \
            "s/# programs.fish.enable = true;/nix.settings.access-tokens = [ \"github.com=\${{ secrets.GITHUB_TOKEN }}\" ]; environment.etc.\"nix\/nix.conf\".knownSha256Hashes = [ \"$nixConfHash\" ];/" \
            flake.nix
          sudo /usr/bin/sed -i.bak \
            's/darwinConfigurations."simple"/darwinConfigurations."'$(scutil --get LocalHostName)'"/g' \
            flake.nix
          sudo /usr/bin/sed -i.bak \
            's/nixpkgs.hostPlatform = "aarch64-darwin";/nixpkgs.hostPlatform = "'$(nix eval --expr builtins.currentSystem --impure --raw)'";/' \
            flake.nix
        popd
        sudo nix run .#darwin-rebuild -- switch \
          --override-input nix-darwin . \
          --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}
    - name: Switch to new configuration
      run: |
        . /etc/bashrc

        sudo /usr/bin/sed -i.bak \
          "s/pkgs.vim/pkgs.hello/" \
          /etc/nix-darwin/flake.nix

        sudo darwin-rebuild switch \
          --override-input nix-darwin . \
          --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}

        hello
    - name: Test uninstallation of nix-darwin
      run: |
        sudo nix run .#darwin-uninstaller --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}
        sudo nix run .#darwin-uninstaller.tests.uninstaller --override-input nixpkgs nixpkgs/${{ env.NIXPKGS_BRANCH }}