Skip to content

enhancement: added portable mode detection (fixes #1527) #1841

enhancement: added portable mode detection (fixes #1527)

enhancement: added portable mode detection (fixes #1527) #1841

Workflow file for this run

name: C/C++ CI
on:
workflow_dispatch:
push:
pull_request:
jobs:
build-macOS-x86_64:
runs-on: macos-13
steps:
- name: Check out repository code
uses: actions/checkout@v4
- 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: Install dependencies
run: |
brew update
brew install sdl2 mpg123 sdl2_ttf sdl2_image flac libmpeg2 libserialport portmidi enet 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 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
- 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 "midwan@gmail.com" --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-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Install dependencies
run: |
brew update
brew upgrade
brew install sdl2 mpg123 sdl2_ttf sdl2_image flac libmpeg2 libserialport portmidi enet 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
- 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 "midwan@gmail.com" --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
steps:
- name: Check out repository code
uses: actions/checkout@v4
- 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
- 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: 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: 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
steps:
- name: Check out repository code
uses: actions/checkout@v4
- 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
- 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: 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: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-22.04-amd64
path: amiberry-*.zip
build-ubuntu-20-amd64:
runs-on: ubuntu-20.04
steps:
- name: Check out repository code
uses: actions/checkout@v4
- 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
- name: make for Ubuntu 20.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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-20.04-amd64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-ubuntu-20.04-amd64.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-ubuntu-20.04-amd64
path: amiberry-*.zip
build-fedora-x86_64:
runs-on: ubuntu-latest
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: 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: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-fedora-x86_64
path: amiberry-*.zip
build-debian-bullseye-amd64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-x86_64:bullseye
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-amd64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bullseye-amd64.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-amd64
path: amiberry-*.zip
build-debian-bookworm-amd64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-x86_64:bookworm
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-amd64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bookworm-amd64.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-amd64
path: amiberry-*.zip
build-debian-bookworm-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-aarch64:bookworm
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-arm64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bookworm-arm64.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-arm64
path: amiberry-*.zip
build-debian-bookworm-armhf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-armhf:bookworm
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-armhf
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bookworm-armhf.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bookworm-armhf
path: amiberry-*.zip
build-debian-bullseye-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-aarch64:bullseye
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-arm64
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bullseye-arm64.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-arm64
path: amiberry-*.zip
build-debian-bullseye-armhf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run the build process with Docker
uses: addnab/docker-run-action@v3
with:
image: midwan/amiberry-debian-armhf:bullseye
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: github.ref_type != 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-armhf
path: amiberry_*.deb
- name: ZIP package for release
if: github.ref_type == 'tag'
run: zip -r amiberry-${{ github.ref_name }}-debian-bullseye-armhf.zip amiberry_*.deb
- name: Upload artifact for release
if: github.ref_type == 'tag'
uses: actions/upload-artifact@v4
with:
name: amiberry-debian-bullseye-armhf
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-ubuntu-20-amd64, build-debian-bookworm-amd64, build-debian-bookworm-arm64, build-debian-bookworm-armhf, build-debian-bullseye-amd64, build-debian-bullseye-arm64, build-debian-bullseye-armhf]
runs-on: ubuntu-latest
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'v')
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-*.*
artifacts/Amiberry-*.*
create-prerelease:
needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-fedora-x86_64, build-ubuntu-24-amd64, build-ubuntu-22-amd64, build-ubuntu-20-amd64,build-debian-bookworm-amd64, build-debian-bookworm-arm64, build-debian-bookworm-armhf, build-debian-bullseye-amd64, build-debian-bullseye-arm64, build-debian-bullseye-armhf]
runs-on: ubuntu-latest
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'preview-v')
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-*.*
artifacts/Amiberry-*.*