Skip to content

release-tagged

release-tagged #311

Workflow file for this run

name: Build .deb Packages
on:
repository_dispatch:
types: [release-tagged]
workflow_dispatch:
inputs:
tag:
description: 'Version to build'
required: true
default: 'v1.0.2'
project:
description: 'Project to build'
required: true
component:
description: 'The release component (main, beta, or nightly)'
required: true
default: 'main'
description:
description: 'Description of the project'
required: true
default: 'Renterd: The Next-Gen Sia Renter'
workflow_id:
description: 'Workflow ID from which to download the artifact'
required: true
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
# Use oldest supported versions of each distro
include:
# Debian 10
- distro: 'debian'
release: 'buster'
# Ubuntu 20.04
- distro: 'ubuntu'
release: 'focal'
container:
image: ${{ matrix.distro }}:${{ matrix.release }}
steps:
- name: Store input in env
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "RELEASE_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
echo "PROJECT=${{ github.event.inputs.project }}" >> $GITHUB_ENV
echo "DESCRIPTION=${{ github.event.inputs.description }}" >> $GITHUB_ENV
echo "WORKFLOW_ID=${{ github.event.inputs.workflow_id }}" >> $GITHUB_ENV
echo "RELEASE_COMPONENT=${{ github.event.inputs.component }}" >> $GITHUB_ENV
elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then
echo "RELEASE_TAG=${{ github.event.client_payload.tag }}" >> $GITHUB_ENV
echo "PROJECT=${{ github.event.client_payload.project }}" >> $GITHUB_ENV
echo "DESCRIPTION=${{ github.event.client_payload.description }}" >> $GITHUB_ENV
echo "WORKFLOW_ID=${{ github.event.client_payload.workflow_id }}" >> $GITHUB_ENV
echo "RELEASE_COMPONENT=${{ github.event.client_payload.component }}" >> $GITHUB_ENV
fi
echo "Building ${{ env.PROJECT}} .deb packages for tag ${{ env.RELEASE_TAG }}"
- name: Install dependencies
run: |
apt-get update && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install unzip dpkg-dev git
- name: Download release artifacts from workflow
uses: actions/download-artifact@v4
with:
github-token: ${{ secrets.PAT_ARTIFACT_DOWNLOAD }}
pattern: ${{ env.PROJECT }}_linux_*
path: artifacts
merge-multiple: true
repository: SiaFoundation/${{ env.PROJECT }}
run-id: ${{ env.WORKFLOW_ID }}
- name: Build .deb packages
shell: bash
run: |
TAG=${{ env.RELEASE_TAG }}
if [ "${{env.RELEASE_COMPONENT}}" = "nightly" ]; then
VERSION=$(date +%Y%m%d)-${{ env.RELEASE_TAG }}
else
VERSION=${TAG:1}
fi
for arch in amd64 arm64; do
BUILD_NAME=${{ matrix.distro }}_${{ env.PROJECT }}_${VERSION}_${arch}
# Create the directory structure for the .deb package
mkdir -p ${BUILD_NAME}/DEBIAN
mkdir -p ${BUILD_NAME}/usr/bin
mkdir -p ${BUILD_NAME}/var/lib/${{ env.PROJECT }}
mkdir -p ${BUILD_NAME}/etc/systemd/system
# Copy the ${{ env.PROJECT }} binary
unzip ./artifacts/${{ env.PROJECT }}_linux_${arch}.zip -d ./artifacts/${arch}/
cp ./artifacts/${arch}/${{ env.PROJECT }} ${BUILD_NAME}/usr/bin/${{ env.PROJECT }}
# Create the control file
echo "Package: ${{ env.PROJECT }}" > ${BUILD_NAME}/DEBIAN/control
echo "Version: $VERSION" >> ${BUILD_NAME}/DEBIAN/control
echo "Architecture: ${arch}" >> ${BUILD_NAME}/DEBIAN/control
echo "Maintainer: The Sia Foundation <[email protected]>" >> ${BUILD_NAME}/DEBIAN/control
echo "Priority: optional" >> ${BUILD_NAME}/DEBIAN/control
echo "Section: net" >> ${BUILD_NAME}/DEBIAN/control
echo "Description: ${DESCRIPTION}" >> ${BUILD_NAME}/DEBIAN/control
echo "Homepage: https://github.com/SiaFoundation/${{ env.PROJECT }}" >> ${BUILD_NAME}/DEBIAN/control
# Create systemd service file
echo "[Unit]" > ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "Description=${DESCRIPTION}" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "After=network.target" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "[Service]" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "ExecStart=/usr/bin/${{ env.PROJECT }}" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "WorkingDirectory=/var/lib/${{ env.PROJECT }}" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "Restart=always" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "RestartSec=15" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "TimeoutStopSec=120" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "[Install]" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "WantedBy=multi-user.target" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
echo "Alias=${{ env.PROJECT }}.service" >> ${BUILD_NAME}/etc/systemd/system/${{ env.PROJECT }}.service
# Create the prerem script
echo "#!/bin/sh" > ${BUILD_NAME}/DEBIAN/prerm
echo "systemctl stop ${{ env.PROJECT }}.service" >> ${BUILD_NAME}/DEBIAN/prerm
echo "systemctl disable ${{ env.PROJECT }}.service" >> ${BUILD_NAME}/DEBIAN/prerm
chmod +x ${BUILD_NAME}/DEBIAN/prerm
# Build the .deb file
echo "Building ${BUILD_NAME}.deb"
dpkg-deb --build ${BUILD_NAME}
done
- name: upload deb packages
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.distro }}
path: '*.deb'
create-pull-request:
needs: build
runs-on: ubuntu-latest
steps:
- name: Store input in env
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "RELEASE_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
echo "PROJECT=${{ github.event.inputs.project }}" >> $GITHUB_ENV
echo "RELEASE_COMPONENT=${{ github.event.inputs.component }}" >> $GITHUB_ENV
elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then
echo "RELEASE_TAG=${{ github.event.client_payload.tag }}" >> $GITHUB_ENV
echo "PROJECT=${{ github.event.client_payload.project }}" >> $GITHUB_ENV
echo "RELEASE_COMPONENT=${{ github.event.client_payload.component }}" >> $GITHUB_ENV
fi
- name: install dependencies
run: |
sudo apt-get update && sudo apt-get -y install reprepro
- name: Checkout repo
uses: actions/checkout@v3
- name: Download deb packages
uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: Import GPG Key
run: |
echo "${{ secrets.GPG_SIGNING_KEY }}" | base64 --decode | gpg --import
- name: Add packages to repository
shell: bash
run: |
# loop over all supported debian releases
for release in 'bookworm' 'bullseye' 'buster'; do
for deb in ./debian_*.deb; do
reprepro -Vb ./debian -C ${{ env.RELEASE_COMPONENT }} includedeb ${release} $deb
done
done
# loop over all supported ubuntu releases
for release in 'focal' 'jammy' 'mantic' 'noble'; do
for deb in ./ubuntu_*.deb; do
reprepro -Vb ./ubuntu -C ${{ env.RELEASE_COMPONENT }} includedeb ${release} $deb
done
done
rm -rf *.deb
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: '${{ env.PROJECT }}: ${{ env.RELEASE_TAG }}'
title: '${{ env.PROJECT }} (${{ env.RELEASE_COMPONENT }}): ${{ env.RELEASE_TAG }}'
body: 'This is an automated PR to update ${{ env.PROJECT }} to ${{ env.RELEASE_TAG }}'
branch: ${{ env.PROJECT }}/update/${{env.RELEASE_COMPONENT }}/${{ env.RELEASE_TAG }}
base: master