-
Notifications
You must be signed in to change notification settings - Fork 0
174 lines (152 loc) · 6.04 KB
/
build-deb.yaml
File metadata and controls
174 lines (152 loc) · 6.04 KB
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
name: Build and Publish Debian Package
on:
push:
jobs:
create_release:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- uses: actions/checkout@v3
- id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: Release ${{ github.ref_name }}
body: Automated release for tag ${{ github.ref_name }}
draft: false
prerelease: false
build-deb:
runs-on: ubuntu-latest
env:
DEB_BUILD_OPTIONS: "compress=gzip nocheck"
PKGNAME: "robotkernel-generator"
strategy:
matrix:
distro: [debian-12, debian-11, ubuntu-24.04, ubuntu-22.04]
include:
- distro: debian-12
image: debian:12
os: debian
version: bookworm
- distro: debian-11
image: debian:11
os: debian
version: bullseye
- distro: ubuntu-24.04
image: ubuntu:24.04
os: ubuntu
version: noble
- distro: ubuntu-22.04
image: ubuntu:22.04
os: ubuntu
version: jammy
container:
image: ${{ matrix.image }}
steps:
- name: Install build dependencies
shell: bash
run: |
apt-get update
apt-get install -y build-essential devscripts debhelper autoconf-archive autotools-dev pkg-config sed git curl jq rsync
- name: Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Mark working directory as safe
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: update branch name and version
run: |
VERSION=$(dpkg-parsechangelog | sed -n 's/^Version: //p')
sed "s|PACKAGE_VERSION|$VERSION|" configure.ac.in > configure.ac
- name: Build .deb package
shell: bash
run: |
# baue mit dpkg-buildpackage (ohne signieren)
export DEBEMAIL="robert.burger@dlr.de"
export DEBFULLNAME="Robert Burger"
CODENAME=$(lsb_release -sc)
VERSION=$(dpkg-parsechangelog --show-field Version)
PRE_VERSION="pre${GITHUB_RUN_NUMBER}"
# Check if version already contains codename suffix
if [[ "$VERSION" == *"~${CODENAME}"* || "$VERSION" == *"+${CODENAME}"* ]]; then
echo "Version already contains codename suffix, skipping dch."
else
if [[ ! $GITHUB_REF =~ ^refs/tags/ ]]; then
# Not a tag, so add ~pre<x>
FULL_VERSION="${VERSION}~${PRE_VERSION}-1~${CODENAME}-pre"
dch -b --newversion "${FULL_VERSION}" --distribution "${CODENAME}-pre" "Pre-release for ${CODENAME}-pre"
else
FULL_VERSION="${VERSION}-1~${CODENAME}"
dch --newversion "${FULL_VERSION}" --distribution "${CODENAME}" "Pre-release for ${CODENAME}"
fi
fi
dpkg-buildpackage -us -uc -sa
- name: Debug artifact files
run: |
ls -l ../
- name: Set sanitized image name
id: sanitize
run: |
version=$(dpkg-parsechangelog | sed -n 's/^Version: //p')
echo "sanitized_image=$(echo "${version}" | tr '/:' '--')" >> $GITHUB_OUTPUT
- name: Upload to APT repository
env:
DEPLOY_TOKEN: ${{ secrets.BS_UPLOAD_KEY }}
shell: bash
run: |
DISTRO="${{ matrix.distro }}"
SANITIZED_IMAGE="${{ steps.sanitize.outputs.sanitized_image }}"
DEB_FILE="../${PKGNAME}_${SANITIZED_IMAGE}_amd64.deb"
CHANGES_FILE="../${PKGNAME}_${SANITIZED_IMAGE}_amd64.changes"
BUILDINFO_FILE="../${PKGNAME}_${SANITIZED_IMAGE}_amd64.buildinfo"
DSC_FILE="../${PKGNAME}_${SANITIZED_IMAGE}.dsc"
TAR_FILE="../${PKGNAME}_${SANITIZED_IMAGE}.tar.gz"
for f in "$DEB_FILE" "$CHANGES_FILE" "$BUILDINFO_FILE" "$DSC_FILE" "$TAR_FILE"; do
[[ -f "$f" ]] || { echo "Missing file: $f"; exit 1; }
done
curl -X POST https://deb.burger-system.de/upload \
-H "Authorization: Bearer $DEPLOY_TOKEN" \
-F "deb=@$DEB_FILE" \
-F "changes=@$CHANGES_FILE" \
-F "buildinfo=@$BUILDINFO_FILE" \
-F "dsc=@$DSC_FILE" \
-F "source=@$TAR_FILE"
- name: Collect .deb artifact
run: |
mkdir -p artifacts/
rsync -av --exclude=${PKGNAME} ../ artifacts/
- name: Upload .deb package artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.PKGNAME }}-artifacts-${{ steps.sanitize.outputs.sanitized_image }}
path: artifacts/
# Fetch the release upload URL dynamically on tag builds
- name: Upload all artifacts to Release
if: startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REF_NAME: ${{ github.ref_name }}
run: |
release_json=$(curl -sSL \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/${{ github.repository }}/releases/tags/${GITHUB_REF_NAME}")
upload_url=$(echo "$release_json" | jq -r '.upload_url' | sed -e "s/{?name,label}//")
echo "Release upload URL: $upload_url"
if [ -d "./artifacts" ]; then
for file in ./artifacts/*; do
filename=$(basename "$file")
echo "Uploading $file as $filename"
curl --fail -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file" \
"$upload_url?name=$filename"
done
else
echo "Artifacts directory not found, skipping upload."
fi