Skip to content

Bump version

Bump version #2422

Workflow file for this run

name: C/C++ CI
on:
workflow_dispatch:
push:
pull_request:
# Set least-privilege defaults for all jobs
permissions:
contents: read
jobs:
build-macOS-x86_64:
runs-on: macos-15-intel
permissions:
contents: read
actions: write
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Cache Homebrew
uses: actions/cache@v4
with:
path: /usr/local/Homebrew
key: ${{ runner.os }}-brew-${{ hashFiles('Brewfile') }}
restore-keys: |
${{ runner.os }}-brew-
- name: Fix homebrew in Github Runner
run: |
for f in $(find /usr/local/bin -type l -print); do \
(readlink $f | grep -q -s "/Library") && echo Removing "$f" && rm -f "$f"; \
done || exit 0
- name: Pre-install gobject-introspection from source
run: brew install --build-from-source gobject-introspection
- name: Install dependencies (Homebrew)
run: |
brew update && \
if [ -f Brewfile ]; then brew bundle; else brew install sdl2 mpg123 sdl2_ttf sdl2_image flac libmpeg2 libserialport portmidi enet libpcap zstd dylibbundler; fi
- name: Install the Apple certificate
env:
APPLE_DEVID_CERT_BASE64: ${{ secrets.APPLE_DEVID_CERT_BASE64 }}
APPLE_DEVID_CERT_P12_PASSWORD: ${{ secrets.APPLE_DEVID_CERT_P12_PASSWORD }}
APPLE_KEYCHAIN_PASSWORD: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
run: |
set +x # Mask output for security
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/apple_devid_cert.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate from secret
echo -n "$APPLE_DEVID_CERT_BASE64" | base64 --decode -o $CERTIFICATE_PATH
# create keychain
security create-keychain -p $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P $APPLE_DEVID_CERT_P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -s -k $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security list-keychains -d user -s $KEYCHAIN_PATH
- name: Build for macOS X64
run: |
cmake -B build && cmake --build build -j4
- name: Codesign the dylibs
run: |
for file in build/Amiberry.app/Contents/Frameworks/*.dylib; do
if [ -f "$file" ]; then
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard $file
fi
done
for file in build/Amiberry.app/Contents/Resources/plugins/*.dylib; do
if [ -f "$file" ]; then
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard $file
fi
done
- name: Codesign the app
run: |
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard build/Amiberry.app
- name: Create a zip to send to the notary service
run: |
zip -r Amiberry-${{ github.sha }}-macOS-x86_64.zip build/Amiberry.app
- name: Send the file to be notarized by Apple
run: |
xcrun notarytool submit Amiberry-${{ github.sha }}-macOS-x86_64.zip --wait --apple-id "[email protected]" --password ${{ secrets.APPLE_NOTARY_APP_PASSWORD }} --team-id ${{ secrets.APPLE_TEAM_ID }}
- name: Staple the notary receipt to the application bundle
run: |
xcrun stapler staple build/Amiberry.app
rm Amiberry-${{ github.sha }}-macOS-x86_64.zip
- name: Create DMG package
run: |
cpack -G DragNDrop --config build/CPackConfig.cmake
- name: ZIP package
if: github.ref_type != 'tag'
run: zip -r Amiberry-${{ github.sha }}-macOS-x86_64.zip Amiberry-*.dmg
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r Amiberry-${{ github.ref_name }}-macOS-x86_64.zip Amiberry-*.dmg
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: amiberry-macOS-64bit-intel
path: Amiberry-*.zip
build-macOS-Apple-Silicon:
runs-on: macos-15
permissions:
contents: read
actions: write
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Install dependencies (Homebrew)
run: |
brew update
brew install sdl2 mpg123 sdl2_ttf sdl2_image flac libmpeg2 libserialport portmidi enet libpcap zstd dylibbundler
- name: Install the Apple certificate
env:
APPLE_DEVID_CERT_BASE64: ${{ secrets.APPLE_DEVID_CERT_BASE64 }}
APPLE_DEVID_CERT_P12_PASSWORD: ${{ secrets.APPLE_DEVID_CERT_P12_PASSWORD }}
APPLE_KEYCHAIN_PASSWORD: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/apple_devid_cert.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate from secret
echo -n "$APPLE_DEVID_CERT_BASE64" | base64 --decode -o $CERTIFICATE_PATH
# create keychain
security create-keychain -p $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P $APPLE_DEVID_CERT_P12_PASSWORD -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -s -k $APPLE_KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security list-keychains -d user -s $KEYCHAIN_PATH
- name: Build for macOS Apple Silicon
run: |
cmake -B build && cmake --build build -j4
- name: Codesign the dylibs
run: |
for file in build/Amiberry.app/Contents/Frameworks/*.dylib; do
if [ -f "$file" ]; then
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard $file
fi
done
for file in build/Amiberry.app/Contents/Resources/plugins/*.dylib; do
if [ -f "$file" ]; then
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard $file
fi
done
- name: Codesign the app
run: |
codesign -s "Developer ID Application: Dimitris Panokostas (5GQP72592A)" -f -o runtime,hard build/Amiberry.app
- name: Create a zip to send to the notary service
run: |
zip -r Amiberry-${{ github.sha }}-macOS-Apple-Silicon.zip build/Amiberry.app
- name: Send the file to be notarized by Apple
run: |
xcrun notarytool submit Amiberry-${{ github.sha }}-macOS-Apple-Silicon.zip --wait --apple-id "[email protected]" --password ${{ secrets.APPLE_NOTARY_APP_PASSWORD }} --team-id ${{ secrets.APPLE_TEAM_ID }}
- name: Staple the notary receipt to the application bundle
run: |
xcrun stapler staple build/Amiberry.app
rm Amiberry-${{ github.sha }}-macOS-Apple-Silicon.zip
- name: Create DMG package
run: |
cpack -G DragNDrop --config build/CPackConfig.cmake
- name: ZIP package
if: github.ref_type != 'tag'
run: zip -r Amiberry-${{ github.sha }}-macOS-apple-silicon.zip Amiberry-*.dmg
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r Amiberry-${{ github.ref_name }}-macOS-apple-silicon.zip Amiberry-*.dmg
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: amiberry-macOS-64bit-apple-silicon
path: Amiberry-*.zip
build-ubuntu-24-amd64:
runs-on: ubuntu-24.04
permissions:
contents: read
actions: write
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-apt-
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build libflac-dev libmpeg2-4-dev libpng-dev libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libasound2-dev libmpg123-dev libportmidi-dev libserialport-dev libenet-dev libpcap-dev libzstd-dev
- name: make for Ubuntu 24.04 AMD64
run: |
cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G DEB --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-24.04-amd64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-ubuntu-24.04-amd64.zip amiberry_*.deb
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-24.04-amd64
path: amiberry-*.zip
build-ubuntu-22-amd64:
runs-on: ubuntu-22.04
permissions:
contents: read
actions: write
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives
key: ${{ runner.os }}-apt-${{ hashFiles('**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-apt-
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build libflac-dev libmpeg2-4-dev libpng-dev libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libasound2-dev libmpg123-dev libportmidi-dev libserialport-dev libenet-dev libpcap-dev libzstd-dev
- name: make for Ubuntu 22.04 AMD64
run: |
cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G DEB --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-22.04-amd64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-ubuntu-22.04-amd64.zip amiberry_*.deb
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-22.04-amd64
path: amiberry-*.zip
build-fedora-x86_64:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-fedora-x86_64:latest
options: -v ${{ github.workspace }}:/build
run: |
cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G RPM --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-fedora-x86_64
path: amiberry-*.rpm
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-fedora-x86_64.zip amiberry-*.rpm
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-fedora-x86_64
path: amiberry-*.zip
build-debian-amd64:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
strategy:
matrix:
include:
- name: bullseye
image: midwan/amiberry-debian-x86_64:bullseye
artifact_name: amiberry-debian-bullseye-amd64
release_name: debian-bullseye-amd64
- name: bookworm
image: midwan/amiberry-debian-x86_64:bookworm
artifact_name: amiberry-debian-bookworm-amd64
release_name: debian-bookworm-amd64
- name: trixie
image: midwan/amiberry-debian-x86_64:trixie
artifact_name: amiberry-debian-trixie-amd64
release_name: debian-trixie-amd64
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: ${{ matrix.image }}
options: -v ${{ github.workspace }}:/build
run: |
cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G DEB --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry_*.deb"
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r "amiberry-${{ github.ref_name }}-${{ matrix.release_name }}.zip" amiberry_*.deb
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry-*.zip"
build-debian-arm64:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
strategy:
matrix:
include:
- name: bullseye
image: midwan/amiberry-debian-aarch64:bullseye
artifact_name: amiberry-debian-bullseye-arm64
release_name: debian-bullseye-arm64
- name: bookworm
image: midwan/amiberry-debian-aarch64:bookworm
artifact_name: amiberry-debian-bookworm-arm64
release_name: debian-bookworm-arm64
- name: trixie
image: midwan/amiberry-debian-aarch64:trixie
artifact_name: amiberry-debian-trixie-arm64
release_name: debian-trixie-arm64
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: ${{ matrix.image }}
options: -v ${{ github.workspace }}:/build
run: |
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-aarch64-linux-gnu.cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G DEB --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry_*.deb"
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-${{ matrix.release_name }}.zip amiberry_*.deb
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry-*.zip"
build-debian-armhf:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
strategy:
matrix:
include:
- name: bullseye
image: midwan/amiberry-debian-armhf:bullseye
artifact_name: amiberry-debian-bullseye-armhf
release_name: debian-bullseye-armhf
- name: bookworm
image: midwan/amiberry-debian-armhf:bookworm
artifact_name: amiberry-debian-bookworm-armhf
release_name: debian-bookworm-armhf
- name: trixie
image: midwan/amiberry-debian-armhf:trixie
artifact_name: amiberry-debian-trixie-armhf
release_name: debian-trixie-armhf
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: ${{ matrix.image }}
options: -v ${{ github.workspace }}:/build
run: |
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-arm-linux-gnueabihf.cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr && cmake --build build -j4
cpack -G DEB --config build/CPackConfig.cmake
- name: Upload artifact
if: always() && github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry_*.deb"
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-${{ matrix.release_name }}.zip amiberry_*.deb
- name: Upload artifact for release
if: always() && github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: "amiberry-*.zip"
create-release:
needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-fedora-x86_64, build-ubuntu-24-amd64, build-ubuntu-22-amd64, build-debian-amd64, build-debian-arm64, build-debian-armhf]
runs-on: ubuntu-latest
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'v')
# Elevated permissions only where needed for creating a release
permissions:
contents: write
actions: read
pull-requests: read
issues: read
steps:
- uses: actions/checkout@v4
- name: Create Changelog
if: github.ref_type == 'tag'
id: changelog
uses: loopwerk/tag-changelog@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
config_file: .github/tag-changelog-config.js
- name: Download Build Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Display structure of downloaded files
run: ls -R artifacts
- name: Create Release
if: github.ref_type == 'tag'
uses: ncipollo/release-action@v1
with:
allowUpdates: true
omitBodyDuringUpdate: true
body: ${{ steps.changelog.outputs.changes }}
artifacts: |
artifacts/amiberry-*.zip
artifacts/Amiberry-*.zip
create-prerelease:
needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-fedora-x86_64, build-ubuntu-24-amd64, build-ubuntu-22-amd64, build-debian-amd64, build-debian-arm64, build-debian-armhf]
runs-on: ubuntu-latest
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'preview-v')
# Elevated permissions only where needed for creating a prerelease
permissions:
contents: write
actions: read
pull-requests: read
issues: read
steps:
- uses: actions/checkout@v4
- name: Create Changelog
if: github.ref_type == 'tag'
id: changelog
uses: loopwerk/tag-changelog@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
config_file: .github/tag-changelog-config.js
- name: Download Build Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Display structure of downloaded files
run: ls -R artifacts
- name: Create PreRelease
if: github.ref_type == 'tag'
uses: ncipollo/release-action@v1
with:
prerelease: true
allowUpdates: true
omitBodyDuringUpdate: true
body: ${{ steps.changelog.outputs.changes }}
artifacts: |
artifacts/amiberry-*.zip
artifacts/Amiberry-*.zip