Skip to content

Build and upload artifacts #259

Build and upload artifacts

Build and upload artifacts #259

name: Build and upload artifacts
on: [push, pull_request]
env:
PD_VERSION: 0.54-1
PDINCLUDEDIR: ./pure-data/src
PDLIBDIR: ./build
LIBNAME: simplex~
jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [amd64]
precision: [32, 64]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Clone Pd
run: git clone --branch=${{ env.PD_VERSION }} --depth=1 https://github.com/pure-data/pure-data.git
- name: Compile external
run: make install floatsize=${{ matrix.precision }} extension=linux-${{ matrix.arch }}-${{ matrix.precision }}.so
- name: Archive artifacts
uses: actions/upload-artifact@v4
with:
name: ${{env.LIBNAME}}-linux-${{ matrix.arch }}-pd${{ matrix.precision }}
path: build/${{env.LIBNAME}}
build-macos:
runs-on: macos-latest
strategy:
matrix:
arch: [fat]
precision: [32, 64]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Clone Pd
run: git clone --branch=${{ env.PD_VERSION }} --depth=1 https://github.com/pure-data/pure-data.git
- name: Set up environment
run: brew install make
- name: Compile external
run: |
if [ ${{ matrix.precision }} -eq 32 ]; then
make install floatsize=32 extension=d_fat arch="x86_64 arm64"
else
make install floatsize=64 extension=darwin-${{ matrix.arch }}.so arch="x86_64 arm64"
fi
- name: Archive artifacts
uses: actions/upload-artifact@v4
with:
name: ${{env.LIBNAME}}-macos-${{ matrix.arch }}-pd${{ matrix.precision }}
path: build/${{env.LIBNAME}}
build-windows:
runs-on: windows-latest
strategy:
matrix:
arch: [amd64]
precision: [32]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Download Pure-Data Binaries
run: |
Invoke-WebRequest -Uri "http://msp.ucsd.edu/Software/pd-${{env.PD_VERSION}}.msw.zip" -OutFile "pd-${{env.PD_VERSION}}.msw.zip"
Expand-Archive -Path "pd-${{env.PD_VERSION}}.msw.zip" -DestinationPath .
- name: Set up compiler environment
run: |
echo "C:\\msys64\\usr\\bin" >> $GITHUB_PATH # Ensure make and GCC are in PATH
- name: Compile external
shell: bash
run: |
export PATH="/c/msys64/mingw64/bin:$PATH" # Ensure MinGW GCC is preferred if needed
make install CC=gcc PDINCLUDEDIR="pd-${{env.PD_VERSION}}/src" PDDIR="pd-${{env.PD_VERSION}}" PDBINDIR="pd-${{env.PD_VERSION}}/bin" extension=dll
- name: Archive artifacts
uses: actions/upload-artifact@v4
with:
name: ${{env.LIBNAME}}-windows-${{ matrix.arch }}-pd${{ matrix.precision }}
path: build/${{env.LIBNAME}}
download-artifacts:
runs-on: ubuntu-latest
needs: [ build-linux, build-macos, build-windows ]
strategy:
matrix:
os: [linux, macos, windows]
arch: [amd64, arm64, fat]
precision: [32, 64]
exclude:
- { os: windows, precision: 64 }
- { os: windows, arch: arm64 }
- { os: windows, arch: fat }
- { os: linux, arch: fat }
- { os: linux, arch: arm64 }
- { os: macos, arch: arm64 }
- { os: macos, arch: amd64 }
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.precision }}
path: artifacts/${{ matrix.os }}
package-release:
needs: download-artifacts
runs-on: ubuntu-latest
permissions:
contents: write
actions: read
steps:
- name: Setup directories
run: |
mkdir -p ${{env.LIBNAME}}
mkdir -p artifacts/linux
mkdir -p artifacts/macos
mkdir -p artifacts/windows
- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: artifacts/
- name: Merge Artifacts
run: |
cp -rn artifacts/*/* ${{env.LIBNAME}}/
- name: Rezip
run: |
SHORT=${GITHUB_REF:11} # Removes 'refs/tags/' prefix
SLUG=${SHORT//\//_} # Replaces '/' with '_'
zip -r ${{env.LIBNAME}}-${SLUG}.zip ${{env.LIBNAME}}
- name: Upload release content as Artifact
uses: actions/upload-artifact@v4
with:
name: ${{env.LIBNAME}}
path: ${{env.LIBNAME}}
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: simplex*.zip
upload_to_deken:
runs-on: ubuntu-latest
needs: [package-release]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v4
with:
path: ${{env.LIBNAME}}-src
- uses: actions/download-artifact@v4
with:
name: ${{env.LIBNAME}}
path: ${{env.LIBNAME}}
- name: Create Deken Package and upload
shell: bash
env:
DEKEN_USERNAME: ${{ secrets.DEKEN_USERNAME }}
DEKEN_PASSWORD: ${{ secrets.DEKEN_PASSWORD }}
run: |
SHORT=${GITHUB_REF:11} # remove the 'refs/tags/' prefix
SLUG=${SHORT//\//_} # replace '/' with '_'
if [[ "${GITHUB_REF}" == *"test"* ]]; then
echo "Dry-run: Preparing to package for test tag ${GITHUB_REF}"
mkdir -p ${PWD}/package
docker run --rm --user $(id -u) --volume ${PWD}/${{env.LIBNAME}}:/${{env.LIBNAME}} --volume ${PWD}/package:/package registry.git.iem.at/pd/deken \
deken package --output-dir /package -v "${SLUG}" /${{env.LIBNAME}}
echo "Listing generated Deken files for potential release:"
ls -l ${PWD}/package
echo "Listing contents of the .dek file:"
dek_files=$(ls ${PWD}/package/*.dek)
for dek_file in $dek_files; do
unzip -l "$dek_file"
done
else
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD --volume ${PWD}/${{env.LIBNAME}}-src:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \
deken upload --name ${{env.LIBNAME}} /${{env.LIBNAME}}
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD --volume ${PWD}/${{env.LIBNAME}}:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \
deken upload --name ${{env.LIBNAME}} --no-source-error /${{env.LIBNAME}}
fi