Publish specified tags of Spine packages #65
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: Publish specified tags of Spine packages | |
on: | |
workflow_dispatch: | |
inputs: | |
Spine-Toolbox: | |
description: Git tag to use for 'Spine-Toolbox' | |
type: string | |
default: 'skip' | |
spine-items: | |
description: Git tag to use for 'spine-items' | |
type: string | |
default: 'skip' | |
spine-engine: | |
description: Git tag to use for 'spine-engine' | |
type: string | |
default: 'skip' | |
Spine-Database-API: | |
description: Git tag to use for 'Spine-Database-API' | |
type: string | |
default: 'skip' | |
jobs: | |
build: | |
strategy: | |
matrix: | |
pkg: ['Spine-Database-API', 'spine-engine', 'spine-items', 'Spine-Toolbox'] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout ${{ matrix.pkg }} | |
uses: actions/checkout@v3 | |
with: | |
repository: 'spine-tools/${{ matrix.pkg }}' | |
path: ${{ matrix.pkg }} | |
ref: ${{ inputs[matrix.pkg] != 'skip' && inputs[matrix.pkg] || 'master' }} | |
fetch-tags: ${{ inputs[matrix.pkg] == 'skip' }} | |
- name: Ensure Git checkout is not dirty | |
run: cd ${{ matrix.pkg }} && git describe --tags --dirty | grep -vE '[-]dirty$' | |
- name: Ensure Git checkout does not have additional commits | |
run: cd ${{ matrix.pkg }} && git describe --tags | grep -vE '[-]g[a-z0-9]{8}$' | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.8' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install build | |
- name: Build | |
if: ${{ inputs[matrix.pkg] != 'skip' }} | |
run: | | |
python -m build ${{ matrix.pkg }} | |
- name: Download wheels for packages excluded from build | |
if: ${{ inputs[matrix.pkg] == 'skip' }} | |
run: | | |
mkdir -p ${{ matrix.pkg }}/dist/ | |
sed -nEe 's/name[ ]*=[ ]*"?([a-z0-9_-]+)"?/\1/p' ${{ matrix.pkg }}/pyproject.toml > pkgname | |
python -m pip download --no-deps --python-version 3.8 \ | |
--dest ${{ matrix.pkg }}/dist/ $(cat pkgname) | |
- name: Save ${{ matrix.pkg }} wheel | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.pkg }} | |
path: ${{ matrix.pkg }}/dist/* | |
retention-days: 7 | |
test: | |
needs: build | |
strategy: | |
matrix: | |
pkg: ['Spine-Database-API', 'spine-engine', 'spine-items', 'Spine-Toolbox'] | |
os: [ubuntu-latest, windows-latest] | |
python: ["3.8", "3.9", "3.10", "3.11"] | |
fail-fast: false | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Make dist directory | |
run: mkdir -p dist | |
- name: Download all wheels | |
uses: actions/download-artifact@v3 | |
with: | |
path: dist | |
- name: Checkout ${{ matrix.pkg }} | |
uses: actions/checkout@v3 | |
with: | |
repository: 'spine-tools/${{ matrix.pkg }}' | |
path: ${{ matrix.pkg }} | |
ref: ${{ inputs[matrix.pkg] }} | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install pytest and built wheels on *NIX | |
if: runner.os != 'Windows' | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install dist/*/*.whl | |
python -m pip install pytest | |
- name: Install pytest and built wheels on Windows | |
if: runner.os == 'Windows' | |
run: | | |
python -m pip install --upgrade pip | |
Get-ChildItem ./dist/*.whl -Recurse | ForEach-Object {python -m pip install $_} | |
python -m pip install pytest | |
- name: Install additional packages for Linux | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y libegl1 | |
- name: Remove source from checkouts for *NIX | |
if: runner.os != 'Windows' | |
run: | | |
rm -rf Spine-Toolbox/spinetoolbox* spine-items/spine_items \ | |
spine-engine/spine_engine Spine-Database-API/spinedb_api | |
- name: Remove source from checkouts for Windows | |
if: runner.os == 'Windows' | |
run: | | |
Remove-Item Spine-Toolbox\spinetoolbox* -Recurse -Force -ErrorAction Ignore | |
Remove-Item spine-items\spine_items -Recurse -Force -ErrorAction Ignore | |
Remove-Item spine-engine\spine_engine -Recurse -Force -ErrorAction Ignore | |
Remove-Item Spine-Database-API\spinedb_api -Recurse -Force -ErrorAction Ignore | |
- name: Test wheels | |
env: | |
QT_QPA_PLATFORM: offscreen | |
run: | | |
python -m unittest discover -s ${{ matrix.pkg }} --verbose | |
- name: Execution tests | |
if: matrix.pkg == 'Spine-Toolbox' | |
run: | | |
python -m unittest discover -s ${{ matrix.pkg }} --pattern execution_test.py --verbose | |
publish: | |
# isolate from test, to prevent partial uploads | |
needs: test | |
strategy: | |
matrix: | |
pkg: ['Spine-Database-API', 'spine-engine', 'spine-items', 'Spine-Toolbox'] | |
uses: ./.github/workflows/publish-wheel.yml | |
with: | |
pkg: ${{ matrix.pkg }} | |
ver: ${{ inputs[matrix.pkg] }} |