Skip to content

more builds

more builds #287

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:
os: [linux]
arch: [amd64]
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: Compile external
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: 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] # FIXME: those will both result in a redundant fat build for now
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: |
if [ ${{ matrix.floatsize }} -eq 32 ]; then
make install floatsize=${{ matrix.floatsize }} extension=d_fat arch="x86_64 arm64"
else
make install floatsize=${{ matrix.floatsize }} extension=${{ matrix.os }}-fat-${{ matrix.floatsize }}.so arch="x86_64 arm64"
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}}-pd${{ matrix.floatsize }}/Pd${{ matrix.floatsize }}-${{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${{ matrix.floatsize }}-${{env.PD_VERSION}}/src" PDDIR="pd${{ matrix.floatsize }}-${{env.PD_VERSION}}" PDBINDIR="pd${{ matrix.floatsize }}-${{env.PD_VERSION}}/bin" floatsize=${{ matrix.floatsize }} extension=m_${{ matrix.arch }}
else
make install CC=gcc PDINCLUDEDIR="pd${{ matrix.floatsize }}-${{env.PD_VERSION}}/src" PDDIR="pd${{ matrix.floatsize }}-${{env.PD_VERSION}}" PDBINDIR="pd${{ matrix.floatsize }}-${{env.PD_VERSION}}/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}}
download-artifacts:
runs-on: ubuntu-latest
needs: [ build-linux, build-macos, build-windows ]
strategy:
matrix:
os: [linux, darwin, windows]
arch: [amd64, arm64, fat]
floatsize: [32, 64]
exclude:
- { os: windows, arch: arm64 }
- { os: linux, arch: arm64 }
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
name: ${{env.LIBNAME}}-${{ matrix.os }}-${{ matrix.arch }}-pd${{ matrix.floatsize }}
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/darwin
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