Skip to content

main

main #1175

Workflow file for this run

on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
schedule:
- cron: '0 2 * * *'
name: main
jobs:
linux-x64:
name: 'Linux (x64)'
container:
image: ubuntu:20.04
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/linux-x64
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh linux ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies linux x64
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux x64
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux x64
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux x64
working-directory: src/Magick.Native
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux x64 OpenMP
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux x64 OpenMP
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux x64 OpenMP
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: linux-x64
path: artifacts
linux-musl-x64:
name: 'Linux musl (x64)'
container:
image: alpine:3.12
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/linux-musl-x64
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh linux ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies linux-musl x64
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux-musl x64
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux-musl x64
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux-musl x64
working-directory: src/Magick.Native
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux-musl x64 OpenMP
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux-musl x64 OpenMP
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux-musl x64 OpenMP
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: linux-musl-x64
path: artifacts
linux-arm64:
name: 'Linux (arm64)'
container:
image: ubuntu:20.04
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/linux-arm64
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh linux ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies linux arm64
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux arm64
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux arm64
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux arm64
working-directory: src/Magick.Native
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh linux arm64 OpenMP
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh linux arm64 OpenMP
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts linux arm64 OpenMP
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: linux-arm64
path: artifacts
macos-x64:
name: 'MacOS (x64)'
runs-on: macos-13
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/macos-x64
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh macos ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies macos x64
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh macos x64
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh macos x64
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts macos x64
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: macos-x64
path: artifacts
macos-arm64:
name: 'MacOS (arm64)'
runs-on: macos-13
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/macos-arm64
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh macos ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies macos arm64
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh macos arm64
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh macos arm64
working-directory: src/Magick.Native
- name: Copy Native
run: ../../build/shared/copy.native.sh ../../artifacts macos arm64
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: macos-arm64
path: artifacts
windows:
name: 'Windows (${{ matrix.platformName }})'
runs-on: windows-2022
permissions:
id-token: write
contents: read
strategy:
matrix:
platformName: [x86, x64, arm64]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.ps1
working-directory: build/windows
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.cmd
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.cmd ../../artifacts/windows
working-directory: src/ImageMagick
- name: Build configure
run: ./build.configure.cmd
working-directory: build/windows
- name: Build Q8
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q8
- name: Build Q16
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q16
- name: Build Q16-HDRI
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q16-HDRI
- name: Build Q8-OpenMP
if: matrix.platformName != 'x86'
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q8-OpenMP
- name: Build Q16-OpenMP
if: matrix.platformName != 'x86'
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q16-OpenMP
- name: Build Q16-HDRI-OpenMP
if: matrix.platformName != 'x86'
uses: ./.github/actions/build-windows
with:
platformName: ${{ matrix.platformName }}
quantumName: Q16-HDRI-OpenMP
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: windows-${{ matrix.platformName }}
path: artifacts/windows
- name: Upload resources
uses: actions/upload-artifact@v4
with:
name: windows-${{ matrix.platformName }}-resources
path: artifacts/resources
wasm-x86:
name: 'WASM (x86)'
container:
image: emscripten/emsdk:3.1.42
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.sh
working-directory: build/wasm-x86
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.sh
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.sh wasm ../../artifacts
working-directory: src/ImageMagick
- name: Build dependencies
run: ../../../../build/shared/build.dependencies.sh ../../../../build/dependencies wasm x86
working-directory: src/ImageMagick/imagemagick-windows/Dependencies
- name: Build ImageMagick
run: ../../../../build/shared/build.imagemagick.sh wasm x86
working-directory: src/ImageMagick/imagemagick-windows/ImageMagick
- name: Build Native
run: ../../build/shared/build.native.sh wasm x86
working-directory: src/Magick.Native
- name: Create wasm files
run: npm install && npm run publish
working-directory: src/wasm-file-creator
- name: Copy Native
run: ../../build/wasm-x86/copy.native.sh ../../artifacts
working-directory: src/Magick.Native
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: wasm-x86
path: artifacts
verify-linux-x64:
name: 'Verify Linux (x64)'
needs:
- linux-x64
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
image:
- 'ubuntu:20.04'
- 'ubuntu:22.04'
- 'ubuntu:24.04'
- 'tgagor/centos:stream9'
- 'mcr.microsoft.com/dotnet/aspnet:latest'
- 'mcr.microsoft.com/dotnet/runtime:8.0'
- 'amazon/aws-lambda-dotnet:8'
- 'public.ecr.aws/lambda/dotnet:8-x86_64'
container:
image: ${{ matrix.image }}
steps:
- name: Install dependencies
run: |
if [ -f "/bin/yum" ]; then
yum install -y gzip tar
fi
if [ -f "/bin/dnf" ]; then
dnf install -y gzip tar
fi
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Download linux library
uses: actions/download-artifact@v4
with:
name: linux-x64
- name: Verify Native
run: |
build/shared/verify.native.sh . linux x64
build/shared/verify.native.sh . linux x64 OpenMP
verify-linux-musl-x64:
name: 'Verify Linux musl (x64)'
needs:
- linux-musl-x64
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
image:
- 'alpine:latest'
- 'mcr.microsoft.com/dotnet/aspnet:8.0-alpine'
- 'mcr.microsoft.com/dotnet/runtime:8.0-alpine'
container:
image: ${{ matrix.image }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download linux-musl library
uses: actions/download-artifact@v4
with:
name: linux-musl-x64
- name: Verify Native
run: |
apk update
apk add bash
build/shared/verify.native.sh . linux-musl x64
build/shared/verify.native.sh . linux-musl x64 OpenMP
verify-linux-arm64:
name: 'Verify Linux (arm64)'
needs:
- linux-arm64
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
image:
- 'mcr.microsoft.com/dotnet/sdk:8.0-jammy-arm64v8'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download linux-arm64 library
uses: actions/download-artifact@v4
with:
name: linux-arm64
- name: Set up QEMU
uses: docker/setup-qemu-action@master
with:
platforms: arm64
- name: Verify Native
run: |
export path=$(pwd)
docker run -v $path:/Magick.Native ${{ matrix.image }} Magick.Native/build/shared/verify.native.sh /Magick.Native linux arm64
docker run -v $path:/Magick.Native ${{ matrix.image }} Magick.Native/build/shared/verify.native.sh /Magick.Native linux arm64 OpenMP
verify-macos:
name: 'Verify MacOS'
needs:
- macos-x64
- macos-arm64
strategy:
fail-fast: false
matrix:
os: [macos-13, macos-14]
arch: [x64, arm64]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download macos library
uses: actions/download-artifact@v4
with:
name: macos-${{ matrix.arch }}
- name: Verify MacOS
run: build/shared/verify.native.macos.sh . macos ${{ matrix.arch }}
metadata:
name: 'Metadata'
needs:
- verify-linux-x64
- verify-linux-musl-x64
- verify-linux-arm64
- verify-macos
- wasm-x86
- windows
runs-on: windows-latest
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set version
id: set-version
run: |
$version = Get-Date -Format "yyyy.Mdd.HHmm"
echo "version=$version" >> $env:GITHUB_OUTPUT
shell: pwsh
- name: Install build tools
run: ./install.build-tools.ps1
working-directory: build/windows
- name: Update ImageMagick.commit to latest commit
run: ./update.imagemagick.cmd
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
working-directory: src/ImageMagick
- name: Clone ImageMagick libraries
run: ./checkout.cmd
working-directory: src/ImageMagick
- name: Create metadata
run: ./create.metadata.ps1 -destination ../../artifacts
working-directory: build/metadata
- name: Upload metadata
uses: actions/upload-artifact@v4
with:
name: metadata
path: artifacts
publish-dotnet:
name: 'Publish .NET library'
if: github.event_name != 'schedule'
needs:
- metadata
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.ps1
working-directory: build/windows
- name: Download linux-x64 library
uses: actions/download-artifact@v4
with:
name: linux-x64
path: publish\dotnet\files\linux
- name: Download linux-arm64 library
uses: actions/download-artifact@v4
with:
name: linux-arm64
path: publish\dotnet\files\linux
- name: Download linux-musl-x64 library
uses: actions/download-artifact@v4
with:
name: linux-musl-x64
path: publish\dotnet\files\linux-musl
- name: Download macos-x64 library
uses: actions/download-artifact@v4
with:
name: macos-x64
path: publish\dotnet\files\macos
- name: Download macos-arm64 library
uses: actions/download-artifact@v4
with:
name: macos-arm64
path: publish\dotnet\files\macos
- name: Download windows-x64 libraries
uses: actions/download-artifact@v4
with:
name: windows-x64
path: publish\dotnet\files\windows
- name: Download windows-x64 resources
uses: actions/download-artifact@v4
with:
name: windows-x64-resources
path: publish\dotnet\files\resources
- name: Download windows-arm64 libraries
uses: actions/download-artifact@v4
with:
name: windows-arm64
path: publish\dotnet\files\windows
- name: Download windows-arm64 resources
uses: actions/download-artifact@v4
with:
name: windows-arm64-resources
path: publish\dotnet\files\resources
- name: Download windows-x86 libraries
uses: actions/download-artifact@v4
with:
name: windows-x86
path: publish\dotnet\files\windows
- name: Download windows-x86 resources
uses: actions/download-artifact@v4
with:
name: windows-x86-resources
path: publish\dotnet\files\resources
- name: Download metadata
uses: actions/download-artifact@v4
with:
name: metadata
path: publish\dotnet\files\metadata
- name: Create NuGet package
run: ./publish.ps1 -version ${{ needs.metadata.outputs.version }} -destination ../../artifacts
working-directory: publish/dotnet
- name: Upload NuGet package
if: github.event_name != 'pull_request'
working-directory: publish/dotnet
run: |
dotnet nuget add source --name github "https://nuget.pkg.github.com/dlemstra/index.json"
$file = Get-ChildItem -Path . -Recurse -Filter *.nupkg | Select -First 1
dotnet nuget push $file.FullName --api-key ${{ secrets.PUBLISH_PACKAGE_PAT }} --source "github"
publish-wasm-x86:
name: 'Publish WASM library'
if: github.event_name != 'schedule'
needs:
- metadata
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install build tools
run: ./install.build-tools.ps1
working-directory: build/windows
- name: Download wasm library
uses: actions/download-artifact@v4
with:
name: wasm-x86
path: publish\wasm\files
- uses: actions/setup-node@v4
with:
node-version: 20
registry-url: https://npm.pkg.github.com
scope: '@dlemstra'
- name: Create NPM package
run: ./publish.ps1 -version ${{ needs.metadata.outputs.version }}
working-directory: publish/wasm
- name: Publish NPM package
if: github.event_name != 'pull_request'
run: npm publish
working-directory: publish/wasm/files
env:
NODE_AUTH_TOKEN: ${{ secrets.PUBLISH_PACKAGE_PAT }}