Skip to content

Trigger on Sun Nov 10 02:52:33 UTC 2024 #846

Trigger on Sun Nov 10 02:52:33 UTC 2024

Trigger on Sun Nov 10 02:52:33 UTC 2024 #846

name: Build Opencast RPMs
env:
arch: noarch
repo: release
on:
workflow_dispatch:
push:
branches:
- 'r/*'
paths:
- .trigger
- oc.version
- .github/workflows/build-opencast-release.yml
- rpmbuild/SOURCES/*
- rpmbuild/SPECS/opencast.spec
jobs:
build:
strategy:
matrix:
osversion:
- 8
- 9
outputs:
oc-version: ${{ steps.version.outputs.version }}
arch: ${{ env.arch }}
repo: ${{ env.repo }}
new: ${{ steps.version-check.outputs.new }}
name: build (el${{ matrix.osversion }})
runs-on: ubuntu-latest
container:
image: docker.io/lkiesow/opencast-rpmbuild:el${{ matrix.osversion }}-oc17
steps:
- uses: actions/checkout@v4
- id: version
run: echo "version=$(cat oc.version)" >> $GITHUB_OUTPUT
- name: clone opencast
run: >
git clone
https://github.com/opencast/opencast.git
- name: check if new version exists
id: version-check
working-directory: opencast
env:
S3_HOST: ${{ secrets.S3_HOST }}
run: |
git tag | grep ^${{ steps.version.outputs.version }} | sort --version-sort | tail -n1 > latest.version
curl -sO https://${S3_HOST}/opencast-pkg/rpms/release/el/${{ matrix.osversion }}/oc-${{ steps.version.outputs.version }}/noarch/rpm.version
if grep -q . latest.version; then
if diff -q latest.version rpm.version; then
echo "Commit $(cat current.commit) already built"
echo "new=no" >> "$GITHUB_OUTPUT"
else
echo "Last built $(cat latest.commit). Building new commit $(cat current.commit)"
echo "new=yes" >> "$GITHUB_OUTPUT"
fi
else
echo "No release of Opencast ${{ steps.version.outputs.version }} yet"
echo "new=no" >> "$GITHUB_OUTPUT"
fi
- name: switch to tagged opencast version
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: >
git checkout "$(cat latest.version)"
- name: cache local maven repository
if: steps.version-check.outputs.new == 'yes'
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: clone mvn.opencast.org
if: steps.version-check.outputs.new == 'yes'
run: |
git clone --depth 1 https://github.com/opencast/mvn.opencast.org.git
- name: prepare additional maven repository
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: |
sed -i "s#https://mvn.opencast.org/#file://$(readlink -f ../mvn.opencast.org)#" pom.xml
- name: build opencast
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: >
mvn
--batch-mode
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-Dcheckstyle.skip=true
-DskipTests
clean install
- name: list distributions to build
if: steps.version-check.outputs.new == 'yes'
run: |
find opencast/build/ -type f -name 'opencast-dist-*gz' \
| sed 's/^.*opencast-dist-\([^-]*\)-.*$/\1/' \
| tee rpmbuild/SPECS/dists
- name: mimic rpmdev-setuptree
if: steps.version-check.outputs.new == 'yes'
working-directory: rpmbuild
run: |
ln -s "$(pwd)" ~/rpmbuild
- name: move build artifacts
if: steps.version-check.outputs.new == 'yes'
run: |
mv -v opencast/build/opencast-dist-*.tar.gz rpmbuild/SOURCES/
- name: define rpm version
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: |
echo "%octarversion $(cat latest.version)" >> ~/.rpmmacros
echo "%ocversion $(cat latest.version)" >> ~/.rpmmacros
echo "%ocrelease 1" >> ~/.rpmmacros
- name: build rpm
if: steps.version-check.outputs.new == 'yes'
working-directory: rpmbuild/SPECS
run: |
for dist in $(cat dists); do
rpmbuild -ba -D "ocdist ${dist}" opencast.spec
done
- name: list rpms
if: steps.version-check.outputs.new == 'yes'
working-directory: rpmbuild/RPMS/${{ env.arch }}
run: |
du -hs ./*.rpm
- name: prepare gpg
if: steps.version-check.outputs.new == 'yes'
env:
GPG_KEY: ${{ secrets.GPG_KEY_OC17 }}
run: |
echo "${GPG_KEY}" | gpg --import
echo '%_gpg_name [email protected]' >> ~/.rpmmacros
- name: sign rpms
if: steps.version-check.outputs.new == 'yes'
working-directory: rpmbuild/RPMS/${{ env.arch }}
run: |
rpmsign --addsign *.rpm
- uses: lkiesow/configure-s3cmd@v1
if: steps.version-check.outputs.new == 'yes'
with:
host: ${{ secrets.S3_HOST }}
access_key: ${{ secrets.S3_ACCESS_KEY }}
secret_key: ${{ secrets.S3_SECRET_KEY }}
- name: publish rpm
if: steps.version-check.outputs.new == 'yes'
working-directory: rpmbuild/RPMS/${{ env.arch }}
run: |
s3cmd put -P *.rpm "s3://opencast-pkg/rpms/${{ env.repo }}/el/${{ matrix.osversion }}/oc-${{ steps.version.outputs.version }}/${{ env.arch }}/"
- name: keep track of latest build
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: |
s3cmd put -P latest.version "s3://opencast-pkg/rpms/${{ env.repo }}/el/${{ matrix.osversion }}/oc-${{ steps.version.outputs.version }}/${{ env.arch }}/rpm.version"
- name: Setting up matrix-msg
if: steps.version-check.outputs.new == 'yes'
uses: lkiesow/matrix-notification@v1
with:
room: '!RACMQVfKRDQTWhdXLa:matrix.org'
token: ${{ secrets.MATRIX_TOKEN }}
tool: true
- name: Announce new package
if: steps.version-check.outputs.new == 'yes'
working-directory: opencast
run: >
echo "Finished building Opencast $(cat latest.version) RPMs (el${{ matrix.osversion }})."
"They should be available in a few minutes" | ~/.local/bin/matrix-msg
createrepo:
uses: opencast/opencast-rpmbuild/.github/workflows/createrepo.yml@develop
if: ${{ needs.build.outputs.new == 'yes' }}
needs: build
strategy:
matrix:
os-version:
- 8
- 9
with:
oc-version: ${{ needs.build.outputs.oc-version }}
os-version: ${{ matrix.os-version }}
arch: ${{ needs.build.outputs.arch }}
repo: ${{ needs.build.outputs.repo }}
secrets:
S3_HOST: ${{ secrets.S3_HOST }}
S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}