multiple release files #386
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: Build and upload artifacts | |
on: [push, pull_request] | |
env: | |
PD_VERSION: 0.54-1 | |
PDINCLUDEDIR: ./pure-data/src | |
PDLIBDIR: ./build | |
LIBNAME: simplex~ | |
LIBSLUG: simplex # for github release zip files | |
jobs: | |
build_linux: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: [linux] | |
arch: [amd64, arm64] | |
floatsize: [32, 64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Set up cross-compilation environment for arm64 | |
if: matrix.arch == 'arm64' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu | |
echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
- name: Clone Pd | |
run: git clone --branch=${{ env.PD_VERSION }} --depth=1 https://github.com/pure-data/pure-data.git | |
- name: Compile amd64 external | |
if: matrix.arch == 'amd64' | |
run: | | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install floatsize=${{ matrix.floatsize }} extension=pd_${{ matrix.os }} | |
else | |
make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.so | |
fi | |
- name: Compile arm64 external | |
if: matrix.arch == 'arm64' | |
run: make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.so | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
build_macos: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
os: [darwin] | |
arch: [amd64, arm64] | |
floatsize: [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: | | |
ARCH=${{ matrix.arch == 'amd64' && 'x86_64' || matrix.arch }} | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install floatsize=${{ matrix.floatsize }} extension=d_${{ matrix.arch }} arch=${ARCH} | |
elif [ ${{ matrix.floatsize }} -eq 64 ]; then | |
make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.so arch=${ARCH} | |
fi | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
build_windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
os: [windows] | |
arch: [amd64] | |
floatsize: [32, 64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Download Pure-Data Binaries | |
run: | | |
if (${{ matrix.floatsize }} -eq 32) { | |
Invoke-WebRequest -Uri "http://msp.ucsd.edu/Software/pd-${{env.PD_VERSION}}.msw.zip" -OutFile "pd${{ matrix.floatsize }}-${{env.PD_VERSION}}.msw.zip" | |
} else { | |
Invoke-WebRequest -Uri "https://puredata.info/downloads/pure-data/releases/${{env.PD_VERSION}}-pd64/Pd64-${{env.PD_VERSION}}.msw.zip" -OutFile "pd${{ matrix.floatsize }}-${{env.PD_VERSION}}.msw.zip" | |
} | |
Expand-Archive -Path "pd${{ matrix.floatsize }}-${{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 | |
if [ ${{ matrix.floatsize }} -eq 32 ]; then | |
make install CC=gcc PDINCLUDEDIR="pd-${{env.PD_VERSION}}/src" PDDIR="pd-${{env.PD_VERSION}}" PDBINDIR="pd-${{env.PD_VERSION}}/bin" floatsize=${{ matrix.floatsize }} extension=m_${{ matrix.arch }} | |
else | |
make install CC=gcc PDINCLUDEDIR="Pd-0.54.1/src" PDDIR="Pd-0.54.1" PDBINDIR="Pd-0.54.1/bin" floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.floatsize }}.dll | |
fi | |
- name: Archive artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }} | |
path: build/${{env.LIBNAME}} | |
package_and_release: | |
runs-on: ubuntu-latest | |
needs: [build_linux, build_macos, build_windows] | |
permissions: | |
contents: write | |
actions: read | |
strategy: | |
matrix: | |
os: [windows, darwin, linux] | |
steps: | |
- name: Download Artifacts # FIXME: currently downloads all artifacts redundantly for each OS | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Merge Artifacts for OS | |
run: | | |
mkdir -p ${{env.LIBNAME}} | |
cp -rn artifacts/${{env.LIBNAME}}-${{ matrix.os }}*/* ${{env.LIBNAME}} | |
- name: Upload Merged Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-${{ matrix.os }} | |
path: ${{env.LIBNAME}} | |
- name: Rezip artifacts for release | |
if: startsWith(github.ref, 'refs/tags/v') | |
run: | | |
SHORT=${GITHUB_REF:11} # Removes 'refs/tags/v' prefix | |
SLUG=${SHORT//\//_} # Replaces '/' with '_' | |
zip -r ${{env.LIBSLUG}}-${{ matrix.os }}.zip ${{env.LIBNAME}} | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/v') | |
with: | |
files: ${{env.LIBSLUG}}-${{ matrix.os }}.zip | |
deken_check_and_upload: | |
runs-on: ubuntu-latest | |
needs: [package_and_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}}-windows | |
path: ${{env.LIBNAME}}-windows | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-darwin | |
path: ${{env.LIBNAME}}-darwin | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ${{env.LIBNAME}}-linux | |
path: ${{env.LIBNAME}}-linux | |
- name: Create Deken Package and upload | |
shell: bash | |
env: | |
DEKEN_USERNAME: ${{ secrets.DEKEN_USERNAME }} | |
DEKEN_PASSWORD: ${{ secrets.DEKEN_PASSWORD }} | |
run: | # FIXME: distribute to separate steps? | |
SHORT=${GITHUB_REF:11} # remove the 'refs/tags/v' prefix | |
SLUG=${SHORT//\//_} # replace '/' with '_' | |
if [[ "${SLUG}" == *"test"* ]]; then | |
for os in linux darwin windows; do | |
echo "## ${os}" | tee -a $GITHUB_STEP_SUMMARY | |
mkdir -p package-${os} | |
docker run --rm --user $(id -u) --volume ./${{env.LIBNAME}}-${os}:/${{env.LIBNAME}} \ | |
--volume ./package-${os}:/package registry.git.iem.at/pd/deken \ | |
deken package --output-dir /package -v "${SLUG}" /${{env.LIBNAME}} | |
dek_files=$(ls package-${os}/*.dek) | |
for dek_file in $dek_files; do | |
filename=$(basename "$dek_file") | |
echo -e "#### \`$filename\`" | tee -a $GITHUB_STEP_SUMMARY | |
echo '```' | tee -a $GITHUB_STEP_SUMMARY | |
unzip -l "$dek_file" | awk 'NR>3 {print $4}' | sed '/^$/d' | tee -a $GITHUB_STEP_SUMMARY | |
echo '```' | tee -a $GITHUB_STEP_SUMMARY | |
done | |
done | |
else | |
for os in linux darwin windows; do | |
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD \ | |
--volume ./${{env.LIBNAME}}-${os}:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \ | |
deken upload --name ${{env.LIBNAME}} --no-source-error /${{env.LIBNAME}} | |
done | |
docker run --rm -e DEKEN_USERNAME -e DEKEN_PASSWORD \ | |
--volume ./${{env.LIBNAME}}-src:/${{env.LIBNAME}} registry.git.iem.at/pd/deken \ | |
deken upload --name ${{env.LIBNAME}} /${{env.LIBNAME}} | |
fi |