-
Notifications
You must be signed in to change notification settings - Fork 171
157 lines (137 loc) · 5.25 KB
/
build.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
name: Build
on:
pull_request:
# Build on changes to this workflow files in PRs to test proposed changes
paths:
- '.github/workflows/build.yml'
push:
branches:
- main
- dev
workflow_dispatch:
inputs:
os-ref:
description: The seedsigner-os ref (tag/branch/sha1) to use
default: main
required: true
# Increment this number as part of a PR to trigger an image build for the PR
# trigger = 0
jobs:
build:
name: build
runs-on: ubuntu-latest
# Prevent resource consuming cron triggered runs in forks
if: (!github.event.repository.fork || github.event_name == 'workflow_dispatch')
strategy:
fail-fast: false
matrix:
target: [ "pi0", "pi2", "pi02w", "pi4" ]
steps:
- name: checkout seedsigner-os
uses: actions/checkout@v3
with:
repository: "seedsigner/seedsigner-os"
# use the os-ref input parameter in case of workflow_dispatch or default to main in case of cron triggers
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.os-ref || 'main' }}
submodules: true
path: "seedsigner-os"
# get full history + tags for "git describe"
fetch-depth: 0
- name: checkout source
uses: actions/checkout@v3
with:
# ref defaults to repo default-branch=dev (cron) or SHA of event (workflow_dispatch)
path: "seedsigner-os/opt/rootfs-overlay/opt"
# get full history + tags for "git describe"
fetch-depth: 0
- name: Get and set meta data
run: |
# The builder_hash (seedsigner-os hash) for the cache action step key
echo "builder_hash=$(git -C seedsigner-os rev-parse --short HEAD)"| tee -a $GITHUB_ENV
# Derive tag based versions, like 0.7.0-40-g0424967 (=$tag-$number-of-commits-since-tag-$short-sha1),
# or just e.g. 0.7.0, if we are exactly on a 0.7.0 tagged commit.
# --always to fall back to commit sha, if no tag present like in partial forks of the repo
os_version="$(git -C seedsigner-os describe --tags --always)"
source_version="$(git -C seedsigner-os/opt/rootfs-overlay/opt describe --tags --always)"
# Combine seedsigner and seedsigner-os version into one version string and squash the versions, if
# they are identical: So os_version=0.7.0 + source_version=0.7.0 combine to just only "0.7.0",
# whereas os_version=0.6.0-61-g9fafebe + source_version=0.7.0-40-g0424967 combine to "os0.6.0-61-g9fafebe_sw0.7.0-40-g0424967"
if [ "${os_version}" = "${source_version}" ]; then
# seedsigner + seedsigner_os have the same tag
echo "img_version=${source_version}"| tee -a $GITHUB_ENV
else
echo "img_version=os${os_version}_sw${source_version}"| tee -a $GITHUB_ENV
fi
- name: delete unnecessary files
run: |
cd seedsigner-os/opt/rootfs-overlay/opt
find . -mindepth 1 -maxdepth 1 ! -name src -exec rm -rf {} +
ls -la .
ls -la src
- name: restore build cache
uses: actions/cache@v3
# Caching reduces the build time to ~50% (currently: ~30 mins instead of ~1 hour,
# while consuming ~850 MB storage space).
with:
path: |
~/.buildroot-ccache/
seedsigner-os/buildroot_dl
key: build-cache-${{ matrix.target }}-${{ env.builder_hash }}
restore-keys: |
build-cache-${{ matrix.target }}-
- name: build
run: |
cd seedsigner-os/opt
./build.sh --${{ matrix.target }} --skip-repo --no-clean
- name: list image (before rename)
run: |
ls -la seedsigner-os/images
- name: rename image
run: |
cd seedsigner-os/images
mv seedsigner_os*.img seedsigner_os.${{ env.img_version }}.${{ matrix.target }}.img
- name: print sha256sum
run: |
cd seedsigner-os/images
sha256sum *.img
- name: list image (after rename)
run: |
ls -la seedsigner-os/images
- name: upload images
uses: actions/upload-artifact@v3
with:
name: seedsigner_os_images
path: "seedsigner-os/images/*.img"
if-no-files-found: error
# maximum 90 days retention
retention-days: 90
sha256sum:
name: calculate sha256sum
runs-on: ubuntu-latest
needs: build
steps:
- name: download images
uses: actions/download-artifact@v3
with:
name: seedsigner_os_images
path: images
- name: list images
run: |
ls -la images
- name: get seedsigner latest commit hash
id: get-seedsigner-hash
run: |
git init
echo "source_hash=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV
- name: write sha256sum
run: |
cd images
sha256sum *.img > seedsigner_os.${{ env.source_hash }}.sha256
- name: upload checksums
uses: actions/upload-artifact@v3
with:
name: seedsigner_os_images
path: "images/*.sha256"
if-no-files-found: error
# maximum 90 days retention
retention-days: 90