Skip to content

Upgrade all Sourcemeta dependencies (#438) #598

Upgrade all Sourcemeta dependencies (#438)

Upgrade all Sourcemeta dependencies (#438) #598

Workflow file for this run

name: CD
on:
push:
branches:
- main
tags:
- "v*.*.*"
concurrency:
group: ${{ github.workflow }}-${{ github.ref_type }}
cancel-in-progress: false
permissions:
contents: write
packages: write
# See https://docs.npmjs.com/generating-provenance-statements#about-npm-provenance
id-token: write
jobs:
package:
strategy:
fail-fast: false
matrix:
platform:
- os: ubuntu-22.04
cc: gcc
cxx: g++
shell: sh
- os: ubuntu-22.04-arm
cc: gcc
cxx: g++
shell: sh
- os: macos-13
cc: clang
cxx: clang++
shell: sh
- os: macos-14
cc: clang
cxx: clang++
shell: sh
- os: windows-latest
shell: pwsh
defaults:
run:
shell: ${{ matrix.platform.shell }}
runs-on: ${{ matrix.platform.os }}
# Building the ARM64 Docker image on QEMU takes forever
timeout-minutes: 60
env:
CC: ${{ matrix.platform.cc }}
CXX: ${{ matrix.platform.cxx }}
steps:
- name: Install pre-commit
run: pipx install pre-commit
- uses: actions/checkout@v4
- name: Install dependencies (macOS)
if: runner.os == 'macos'
run: brew bundle
env:
HOMEBREW_NO_ANALYTICS: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- run: cmake --version
- name: Configure JSON Schema (Continuous)
if: github.ref_type == 'branch'
run: >
cmake -S . -B ./build
-DCMAKE_BUILD_TYPE:STRING=Release
-DJSONSCHEMA_PORTABLE:BOOL=ON
-DJSONSCHEMA_TESTS:BOOL=ON
-DJSONSCHEMA_TESTS_CI:BOOL=ON
-DJSONSCHEMA_CONTINUOUS:BOOL=ON
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_COMPILE_WARNING_AS_ERROR:BOOL=ON
- name: Configure JSON Schema (Release)
if: github.ref_type == 'tag'
run: >
cmake -S . -B ./build
-DCMAKE_BUILD_TYPE:STRING=Release
-DJSONSCHEMA_PORTABLE:BOOL=ON
-DJSONSCHEMA_TESTS:BOOL=ON
-DJSONSCHEMA_TESTS_CI:BOOL=ON
-DJSONSCHEMA_CONTINUOUS:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_COMPILE_WARNING_AS_ERROR:BOOL=ON
- run: cmake --build ./build --config Release --parallel 4
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsonschema
# Not every CTest version supports the --test-dir option. If such option
# is not recognized, `ctest` will successfully exit finding no tests.
# Better to be sure and `cd` all the time here.
- run: cd ./build && ctest --build-config Release --output-on-failure --parallel
- run: cpack --config build/CPackConfig.cmake -B build/out -C Release
- uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.platform.os }}
path: build/out/*.zip
retention-days: 1
snap:
strategy:
matrix:
image: [ ubuntu-24.04, ubuntu-24.04-arm ]
runs-on: ${{ matrix.image }}
steps:
- uses: actions/checkout@v4
- uses: snapcore/action-build@v1
id: snapcraft
- uses: actions/upload-artifact@v4
with:
name: snap-${{ matrix.image }}
path: ${{ steps.snapcraft.outputs.snap }}
retention-days: 1
publish:
needs: [ package, snap ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: build/out/
pattern: "*"
merge-multiple: true
# Generate signed checksums for all pre-built binaries
# while avoiding "build/out/" in the checksum file.
- run: sha256sum --tag *.zip *.snap >CHECKSUMS.txt
working-directory: build/out/
- run: cat CHECKSUMS.txt
working-directory: build/out/
- run: |
echo "$GPG_KEY_PRIVATE" | gpg --batch --import
gpg --list-keys
gpg --batch --yes --pinentry-mode loopback --trust-model always --armor \
--passphrase "$GPG_KEY_PASS" --local-user "$GPG_KEY_FINGERPRINT" \
--output build/out/CHECKSUMS.txt.asc --detach-sign build/out/CHECKSUMS.txt
curl --silent --show-error --location 'https://www.sourcemeta.com/gpg.asc' | gpg --import
gpg --verify build/out/CHECKSUMS.txt.asc build/out/CHECKSUMS.txt
env:
GPG_KEY_PRIVATE: ${{ secrets.GPG_KEY_PRIVATE }}
GPG_KEY_PASS: ${{ secrets.GPG_KEY_PASS }}
GPG_KEY_FINGERPRINT: ${{ secrets.GPG_KEY_FINGERPRINT }}
- run: tree build
- run: gh config set prompt disabled
env:
GH_TOKEN: ${{ github.token }}
- name: Perform Continuous Release
run: |
gh release delete continuous --cleanup-tag --yes || true
gh release create continuous --prerelease --draft=false --title continuous --target "$GITHUB_SHA" --generate-notes
gh release upload --clobber continuous build/out/*.zip build/out/CHECKSUMS.txt build/out/CHECKSUMS.txt.asc
if: github.ref_type == 'branch'
env:
GH_TOKEN: ${{ github.token }}
- name: Perform Tag Release
run: |
gh release create ${{ github.ref_name }} --draft=false --title ${{ github.ref_name }} --target "$GITHUB_SHA" --generate-notes
gh release upload --clobber ${{ github.ref_name }} build/out/*.zip build/out/*.snap build/out/CHECKSUMS.txt build/out/CHECKSUMS.txt.asc
if: github.ref_type == 'tag'
env:
GH_TOKEN: ${{ github.token }}
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- run: python -m pip install --upgrade pip setuptools twine
- name: Publish to PyPI
run: ./pip-deploy.sh ${{ github.ref_name }}
if: github.ref_type == 'tag'
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
- uses: actions/setup-node@v4
with:
node-version: '22.x'
registry-url: 'https://registry.npmjs.org'
- name: Publish to NPM
run: ./npm-deploy.sh ${{ github.ref_name }}
if: github.ref_type == 'tag'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish to Snap
run: |
sudo snap install snapcraft --classic
snapcraft whoami
snapcraft upload build/out/jsonschema_*_amd64.snap --release stable
snapcraft upload build/out/jsonschema_*_arm64.snap --release stable
if: github.ref_type == 'tag'
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
if: github.ref_type == 'tag'
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
id: meta-cli
if: github.ref_type == 'tag'
with:
images: ghcr.io/${{ github.repository_owner }}/jsonschema
- uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
id: push-cli
if: github.ref_type == 'tag'
with:
context: .
file: Dockerfile
push: true
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta-cli.outputs.tags }}
labels: ${{ steps.meta-cli.outputs.labels }}