1+ name : Build, release, upload to GH & server
2+
3+ on :
4+ workflow_dispatch :
5+ workflow_call :
6+ inputs :
7+ matrix :
8+ required : true
9+ type : string
10+ maintainer :
11+ required : true
12+ type : string
13+ package :
14+ required : true
15+ type : string
16+ licence :
17+ required : false
18+ type : string
19+ homepage :
20+ required : false
21+ type : string
22+ depends :
23+ required : false
24+ type : string
25+ section :
26+ required : false
27+ type : string
28+ priority :
29+ required : false
30+ type : string
31+ description :
32+ required : false
33+ type : string
34+
35+ secrets :
36+ GPG_PRIVATE_KEY :
37+ required : true
38+ PASSPHRASE :
39+ required : true
40+ SSH_KEY_TORRENTS :
41+ required : false
42+ KNOWN_HOSTS_UPLOAD :
43+ required : false
44+
45+ jobs :
46+
47+ prepare :
48+ runs-on : ubuntu-latest
49+ outputs :
50+ matrix : ${{ steps.prep.outputs.matrix }}
51+ steps :
52+ - name : Prepare releases
53+ id : prep
54+ run : |
55+
56+ echo "matrix=[\"${{ inputs.matrix }}\"]" >> "$GITHUB_OUTPUT"
57+
58+ build :
59+ needs : [ prepare ]
60+ runs-on : ubuntu-latest
61+ outputs :
62+ # not related to matrix
63+ version : ${{ steps.releases.outputs.version }}
64+ strategy :
65+ fail-fast : false
66+ matrix :
67+ node : ${{fromJson(needs.prepare.outputs.matrix)}}
68+
69+ steps :
70+
71+ - name : " Checkout Armbian OS"
72+ uses : actions/checkout@v4
73+ with :
74+ repository : armbian/os
75+ ref : main
76+ fetch-depth : 1
77+ path : os
78+
79+ - name : " Checkout this repository"
80+ uses : actions/checkout@v4
81+ with :
82+ path : source
83+
84+ - name : Build ${{ matrix.node }}
85+ id : releases
86+ run : |
87+
88+ VERSION=$(cat os/stable.json | jq '.version' | sed "s/\"//g")"."$(date -u +'%m%d.%H%M%S')
89+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
90+ ARCH=$(echo ${{ matrix.node }} | cut -d":" -f1)
91+ PKG_NAME=${{ inputs.package }}_${VERSION}_${ARCH}
92+
93+ mkdir -p output/${PKG_NAME}/DEBIAN
94+ cat <<-END > output/${PKG_NAME}/DEBIAN/control
95+ Package: ${{ inputs.package }}
96+ Version: ${VERSION}
97+ Architecture: ${ARCH}
98+ Conflicts: armbian-configng
99+ END
100+ if [[ -n "${{ inputs.maintainer }}" ]]; then
101+ echo "Maintainer: ${{ inputs.maintainer }}" >> output/${PKG_NAME}/DEBIAN/control
102+ fi
103+ if [[ -n "${{ inputs.depends }}" ]]; then
104+ echo "Depends: ${{ inputs.depends }}" >> output/${PKG_NAME}/DEBIAN/control
105+ fi
106+ if [[ -n "${{ inputs.section }}" ]]; then
107+ echo "Section: ${{ inputs.section }}" >> output/${PKG_NAME}/DEBIAN/control
108+ fi
109+ if [[ -n "${{ inputs.priority }}" ]]; then
110+ echo "Priority: ${{ inputs.priority }}" >> output/${PKG_NAME}/DEBIAN/control
111+ fi
112+ if [[ -n "${{ inputs.description }}" ]]; then
113+ echo "Description: ${{ inputs.description }}" >> output/${PKG_NAME}/DEBIAN/control
114+ fi
115+
116+ if [[ -f source/debian.conf ]]; then
117+ while read p; do
118+ FILE=$(echo $p | cut -d":" -f1)
119+ LOCATION=$(echo $p | cut -d":" -f2 | cut -d"/" -f2-)
120+ if [[ -n $LOCATION && -n $FILE ]]; then
121+ mkdir -p "output/${PKG_NAME}/$LOCATION"
122+ cp -R source/$FILE "output/${PKG_NAME}/$LOCATION"
123+ fi
124+ done < source/debian.conf
125+ fi
126+ fakeroot dpkg-deb -b output/${PKG_NAME}/
127+ cd output/${PKG_NAME}/
128+ tar cvfz ../${PKG_NAME}.tar.gz .
129+
130+ - name : Upload deb as artifact ${{ matrix.node }}
131+ uses : actions/upload-artifact@v4
132+ with :
133+ name : deb
134+ path : output/*.deb
135+
136+ - name : Upload tarball as artifact ${{ matrix.node }}
137+ uses : actions/upload-artifact@v4
138+ with :
139+ name : tar
140+ path : output/*.tar.gz
141+
142+ release :
143+ needs : [ prepare, build ]
144+ if : " ${{ always() }}"
145+ runs-on : ubuntu-latest
146+ steps :
147+
148+ - name : Install dependencies
149+ run : |
150+ echo 'man-db man-db/auto-update boolean false' | sudo debconf-set-selections
151+ sudo apt-get -q -y install reprepro
152+
153+ - uses : actions/download-artifact@v4
154+ name : Download deb artifacts
155+ with :
156+ name : deb
157+ path : output
158+
159+ - uses : actions/download-artifact@v4
160+ name : Download tarball artifacts
161+ with :
162+ name : tar
163+ path : output
164+
165+ - name : Checkout
166+ uses : actions/checkout@v4
167+ with :
168+ path : repository
169+ ref : repository
170+
171+ - name : Import GPG key
172+ id : import_gpg
173+ uses : crazy-max/ghaction-import-gpg@v6
174+ with :
175+ gpg_private_key : ${{ secrets.GPG_PRIVATE_KEY }}
176+ passphrase : ${{ secrets.PASSPHRASE }}
177+
178+ - name : Configure git identity
179+ working-directory : repository
180+ run : |
181+
182+ echo "Testing signing" | gpg --sign --armor
183+
184+ gpg -K
185+ echo "#"
186+ git config user.name github-actions
187+ git config user.email [email protected] 188+
189+ - name : Deploy packages
190+ run : |
191+
192+ PACKAGES_DIR="$(pwd)"/output
193+ REPO_DIR="$(pwd)"/repository
194+
195+ [[ ! -d "${PACKAGES_DIR}" ]] && echo "Packages dir ${PACKAGES_DIR} is not there." && exit 2
196+ mkdir -p "${REPO_DIR}" "${REPO_DIR}"/pool
197+
198+ # Configure reprepro
199+ mkdir -p ${REPO_DIR}/conf
200+ cat <<EOD >${REPO_DIR}/conf/distributions
201+ Origin: armbian.github.io/configurator
202+ Label: armbian.github.io/configurator
203+ Codename: stable
204+ Architectures: amd64 arm64 armhf
205+ Components: main
206+ Description: Armbian development repo
207+ SignWith: DF00FAF1C577104B50BF1D0093D6889F9F0E78D5
208+ EOD
209+
210+ # Determine a list of binary debs to include in the repo
211+ # reprepro does not accept identical package(-names) with different contents (sha1)
212+ # our build does generate different contents (in different runs) and I'd like to keep old versions around
213+ LIST_DEBS_NEW=""
214+ for ONE_DEB in ${PACKAGES_DIR}/*.deb; do
215+ echo "Considering adding to repo: $ONE_DEB"
216+ BASE_ONE_DEB=$(basename ${ONE_DEB})
217+ EXISTING_DEB_IN_REPO=$(find ${REPO_DIR}/pool -type f -name ${BASE_ONE_DEB})
218+ if [[ "a${EXISTING_DEB_IN_REPO}" == "a" ]]; then
219+ echo "- New .deb to include in repo: ${BASE_ONE_DEB}"
220+ LIST_DEBS_NEW="${LIST_DEBS_NEW} ${ONE_DEB}"
221+ else
222+ echo "- Existing .deb: ${BASE_ONE_DEB}"
223+ fi
224+ done
225+
226+ echo "** Final list of DEBs to include: ${LIST_DEBS_NEW}"
227+ if [[ "a${LIST_DEBS_NEW}a" == "aa" ]]; then
228+ echo "No new packages, nothing to do."
229+ else
230+ echo "New packages, running reprepro..."
231+ reprepro -b "${REPO_DIR}" includedeb stable ${LIST_DEBS_NEW}
232+ echo "Repository generated at ${REPO_DIR}/"
233+ fi
234+
235+ cd ${REPO_DIR}
236+ git add .
237+ git commit -m "Updating repo" || true
238+ git push origin repository || true
239+
240+ - name : " GH release"
241+ uses : ncipollo/release-action@v1
242+ with :
243+ artifacts : " output/*.deb"
244+ tag : " ${{ needs.build.outputs.version }}"
245+ name : " ${{ needs.build.outputs.version }}"
246+ token : " ${{ secrets.GITHUB_TOKEN }}"
0 commit comments