enhancement: added portable mode detection (fixes #1527) #1842
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-*.* |