Skip to content
40 changes: 27 additions & 13 deletions .github/workflows/build-deb.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,10 @@ jobs:
OLD_FILE="${PKGNAME}-dev-dbgsym_${SANITIZED_IMAGE}_amd64${OLD_EXT}"
NEW_FILE="${PKGNAME}-dev-dbgsym_${SANITIZED_IMAGE}_amd64${NEW_EXT}"

mv "../$OLD_FILE" "../$NEW_FILE"
sed -i "s/${OLD_FILE}/${NEW_FILE}/g" "../$CHANGES_FILE"
if [ -f $OLD_FILE ]; then
mv "../$OLD_FILE" "../$NEW_FILE"
sed -i "s/${OLD_FILE}/${NEW_FILE}/g" "../$CHANGES_FILE"
fi
fi

ls -l ../
Expand All @@ -158,20 +160,32 @@ jobs:
DSC_FILE="../${PKGNAME}_${SANITIZED_IMAGE}.dsc"
TAR_FILE="../${PKGNAME}_${SANITIZED_IMAGE}.tar.gz"

for f in "$DEB_FILE" "$DEV_FILE" "$DEV_DBG_FILE" "$DBG_FILE" "$CHANGES_FILE" "$BUILDINFO_FILE" "$DSC_FILE" "$TAR_FILE"; do
for f in "$DEB_FILE" "$DEV_FILE" "$DBG_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 "deb-dev=@$DEV_FILE" \
-F "deb-dev-dbgsym=@$DEV_DBG_FILE" \
-F "dbgsym=@$DBG_FILE" \
-F "changes=@$CHANGES_FILE" \
-F "buildinfo=@$BUILDINFO_FILE" \
-F "dsc=@$DSC_FILE" \
-F "source=@$TAR_FILE"
if [ -f $DEV_DBG_FILE ]; then
curl -X POST https://deb.burger-system.de/upload \
-H "Authorization: Bearer $DEPLOY_TOKEN" \
-F "deb=@$DEB_FILE" \
-F "deb-dev=@$DEV_FILE" \
-F "deb-dev-dbgsym=@$DEV_DBG_FILE" \
-F "dbgsym=@$DBG_FILE" \
-F "changes=@$CHANGES_FILE" \
-F "buildinfo=@$BUILDINFO_FILE" \
-F "dsc=@$DSC_FILE" \
-F "source=@$TAR_FILE"
else
curl -X POST https://deb.burger-system.de/upload \
-H "Authorization: Bearer $DEPLOY_TOKEN" \
-F "deb=@$DEB_FILE" \
-F "deb-dev=@$DEV_FILE" \
-F "dbgsym=@$DBG_FILE" \
-F "changes=@$CHANGES_FILE" \
-F "buildinfo=@$BUILDINFO_FILE" \
-F "dsc=@$DSC_FILE" \
-F "source=@$TAR_FILE"
fi

- name: Collect .deb artifact
run: |
Expand Down
191 changes: 191 additions & 0 deletions .github/workflows/build-ln-msgdef-deb.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
name: Generate Links-and-Nodes message definitions Debian Package

on:
push:
branches:
- '**'
tags:
- '**'

jobs:
create_release:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- id: create_release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: Release ${{ github.ref_name }}
body: Automated release for tag ${{ github.ref_name }}
draft: false
prerelease: false
token: ${{ secrets.GITHUB_TOKEN }}

build-deb:
runs-on: ubuntu-latest
permissions:
contents: write
env:
DEB_BUILD_OPTIONS: "compress=gzip nocheck"
PKGNAME: "robotkernel-ln-msgdef"
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 tar gzip curl jq libyaml-cpp-dev rsync

curl -fsSL https://deb.burger-system.de/setup.sh | bash > /dev/null
apt-get update
apt-get install -y robotkernel-ln-helper

- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Mark working directory as safe
run: git config --global --add safe.directory $GITHUB_WORKSPACE

- name: Build .deb package
working-directory: ${{ github.workspace }}/share/service_definitions
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}~${CODENAME}-pre"
dch -b --newversion "${FULL_VERSION}" --distribution "${CODENAME}-pre" "Pre-release for ${CODENAME}-pre"
else
FULL_VERSION="${VERSION}~${CODENAME}"
if echo "${GITHUB_REF_NAME}" | grep -q "\-rev"; then
REVISION=$(echo "${GITHUB_REF_NAME}" | sed -n 's/.*-rev\([0-9]*\)$/\1/p')
echo "Revision found: $REVISION"
FULL_VERSION="${VERSION}-${REVISION}~${CODENAME}"
fi
dch --newversion "${FULL_VERSION}" --distribution "${CODENAME}" "Pre-release for ${CODENAME}"
fi
fi

dpkg-buildpackage -us -uc -sa

- name: Debug artifact files
working-directory: ${{ github.workspace }}/share/service_definitions
run: |
ls -l ../

- name: Set sanitized image name
working-directory: ${{ github.workspace }}/share/service_definitions
id: sanitize
run: |
version=$(dpkg-parsechangelog | sed -n 's/^Version: //p')
echo "sanitized_image=$(echo "${version}" | tr '/:' '--')" >> $GITHUB_OUTPUT

- name: Upload to APT repository
working-directory: ${{ github.workspace }}/share/service_definitions
env:
DEPLOY_TOKEN: ${{ secrets.BS_UPLOAD_KEY }}
shell: bash
run: |
DISTRO="${{ matrix.distro }}"
SANITIZED_IMAGE="${{ steps.sanitize.outputs.sanitized_image }}"

ls -l ../

DEB_FILE="../${PKGNAME}_${SANITIZED_IMAGE}_all.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
working-directory: ${{ github.workspace }}/share/service_definitions
run: |
mkdir -p artifacts/
rsync -av --include="*.deb" --include="*.changes" --include="*.buildinfo" --include="*.dsc" --include="*.tar.gz" --exclude="*" ../ artifacts/

- name: Upload .deb package artifact
uses: actions/upload-artifact@v7
with:
name: ${{ env.PKGNAME }}-artifacts-${{ steps.sanitize.outputs.sanitized_image }}
path: share/service_definitions/artifacts/

# Fetch the release upload URL dynamically on tag builds
- name: Upload all artifacts to Release
working-directory: ${{ github.workspace }}/share/service_definitions
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