-
Notifications
You must be signed in to change notification settings - Fork 0
160 lines (144 loc) · 5.39 KB
/
main.yml
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: check
on:
push:
pull_request:
workflow_dispatch:
jobs:
bootstrap:
name: Bootstrap nix.conf options
runs-on: ubuntu-latest
outputs:
substituters: ${{ steps.getconf.outputs.substituters }}
trustedPublicKeys: ${{ steps.getconf.outputs.trustedPublicKeys }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- id: getconf
name: Get nix.conf configuration options
run: |
nix eval '.#extra.substituters' --apply 'builtins.toString' | tr -d '"' | awk '{print "substituters="$0}' | tee -a "$GITHUB_OUTPUT"
nix eval '.#extra.trusted-public-keys' --apply 'builtins.toString' | tr -d '"' | awk '{print "trustedPublicKeys="$0}' | tee -a "$GITHUB_OUTPUT"
attic:
name: Build attic-client
runs-on: ubuntu-latest
needs: bootstrap
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Build attic-client
timeout-minutes: 60
run: |
nix build '.#attic-client'
./result/bin/attic login --set-default ci "$ATTIC_SERVER" "$ATTIC_TOKEN"
echo ATTIC_CACHE="$ATTIC_CACHE" | tee -a "$GITHUB_ENV"
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Push attic-client to attic
run: |
nix-store --query --requisites --include-outputs ./result | xargs ./result/bin/attic push "ci:$ATTIC_CACHE"
prebuildpkgs:
name: Get package outputs of the flake to populate build matrix
needs: attic
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.getpkgs.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- name: Get packages
id: getpkgs
run: >
nix flake show --json | jq -c '.packages."x86_64-linux" | keys | {package: .}' | awk '{print "matrix="$0}' | tee -a "$GITHUB_OUTPUT"
buildpkgs:
name: build nix packages
runs-on: ubuntu-latest
needs:
- prebuildpkgs
- bootstrap
strategy:
matrix: ${{ fromJson(needs.prebuildpkgs.outputs.matrix) }}
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Install and configure attic
timeout-minutes: 20
run: ./.github/install-attic.bash
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Build package ${{ matrix.package }}
timeout-minutes: 120
run: nix build '.#${{ matrix.package }}'
- name: Push package ${{ matrix.package }} to attic
run: nix-store --query --requisites --include-outputs ./result | xargs attic push "ci:$ATTIC_CACHE"
prebuild:
name: Get nixosConfiguration outputs of the flake to populate build matrix
needs: attic
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.getconfigs.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- name: Get configurations
id: getconfigs
run: >
nix flake show --json | jq -c '.nixosConfigurations | keys | {configuration: .}' | awk '{print "matrix="$0}' | tee -a "$GITHUB_OUTPUT"
build:
needs:
- prebuild
- bootstrap
- buildpkgs
strategy:
matrix: ${{ fromJson(needs.prebuild.outputs.matrix) }}
fail-fast: false
uses: ./.github/workflows/build-configuration.yml
with:
substituters: ${{ needs.bootstrap.outputs.substituters }}
trustedPublicKeys: ${{ needs.bootstrap.outputs.trustedPublicKeys }}
configuration: ${{ matrix.configuration }}
secrets: inherit
check:
name: check nix flake
needs:
- attic
- bootstrap
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Free up runner disk space
run: ./.github/clean-space.bash
- uses: DeterminateSystems/nix-installer-action@main
with:
extra-conf: |
extra-substituters = ${{ needs.bootstrap.outputs.substituters }}
extra-trusted-public-keys = ${{ needs.bootstrap.outputs.trustedPublicKeys }}
- uses: DeterminateSystems/magic-nix-cache-action@main
- name: Install and configure attic
timeout-minutes: 20
continue-on-error: true
run: ./.github/install-attic.bash
env:
ATTIC_SERVER: ${{ secrets.ATTIC_SERVER }}
ATTIC_CACHE: ${{ secrets.ATTIC_CACHE }}
ATTIC_TOKEN: ${{ secrets.ATTIC_TOKEN }}
- name: Run flake checks
run: |
attic watch-store "ci:$ATTIC_CACHE" &
ATTIC_PID=$!
trap 'kill $ATTIC_PID' EXIT
nix flake check