Skip to content
on: [push, pull_request]
defaults:
run:
shell: bash
jobs:
build-sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: python -m venv .venv
- run: .venv/bin/pip install build
- run: .venv/bin/python -m build --sdist
- uses: actions/upload-artifact@v3
with:
name: sdist
path: dist/videojitter-*.tar.gz
if-no-files-found: error
build-wheel:
runs-on: ubuntu-latest
needs: build-sdist
steps:
- uses: actions/download-artifact@v3
with:
name: sdist
- run: tar --gzip --extract --verbose --strip-components=1 --file videojitter-*.tar.gz
- uses: actions/setup-python@v4
with:
python-version: "3.9"
- run: python -m venv .venv
- run: .venv/bin/pip install build
- run: .venv/bin/python -m build --wheel
- uses: actions/upload-artifact@v3
with:
name: wheel
path: dist/videojitter-*.whl
if-no-files-found: error
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
fail-fast: false
runs-on: ${{ matrix.os }}
needs: build-wheel
env:
VENV_BIN_DIR: ${{ startsWith(matrix.os, 'windows-') && 'Scripts' || 'bin' }}
steps:
- uses: actions/download-artifact@v3
with:
name: wheel
- uses: actions/setup-python@v4
with:
python-version: "3.9"
- run: python -m venv .venv
- run: .venv/$VENV_BIN_DIR/pip install videojitter-*.whl
- run: .venv/$VENV_BIN_DIR/videojitter-generate-spec
--output-spec-file spec.json
env:
PYTHONWARNINGS: error
- run: .venv/$VENV_BIN_DIR/videojitter-generate-fake-recording
--spec-file spec.json
--output-recording-file recording.wav
env:
PYTHONWARNINGS: error
- run: .venv/$VENV_BIN_DIR/videojitter-analyze-recording
--spec-file spec.json
--recording-file recording.wav
--output-edges-csv-file edges.csv
env:
PYTHONWARNINGS: error
- run: .venv/$VENV_BIN_DIR/videojitter-generate-report
--spec-file spec.json
--edges-csv-file edges.csv
--output-chart-file report.html
env:
PYTHONWARNINGS: error
- uses: FedericoCarboni/setup-ffmpeg@v2
- run: .venv/$VENV_BIN_DIR/videojitter-generate-video
--spec-file spec.json
--output-file video.mp4
env:
PYTHONWARNINGS: error
- uses: actions/checkout@v4
with:
path: git
- run: .venv/$VENV_BIN_DIR/pip install -r git/test-requirements.txt
- run: PATH="../.venv/$VENV_BIN_DIR:$PATH" ../.venv/$VENV_BIN_DIR/python -m videojitter_test
working-directory: git
env:
PYTHONWARNINGS: error
- run: git -C git diff --exit-code
if: ${{ !cancelled() }}
- uses: actions/upload-artifact@v3
if: ${{ !cancelled() }}
with:
name: test_output-${{ matrix.os }}
path: git/videojitter_test/cases/*/test_output
if-no-files-found: error
pylint:
runs-on: ubuntu-latest
needs: build-sdist
steps:
- uses: actions/download-artifact@v3
with:
name: sdist
- uses: actions/setup-python@v4
with:
python-version: "3.9"
- run: tar --gzip --extract --verbose --strip-components=1 --file videojitter-*.tar.gz
- run: python -m venv .venv
- run: .venv/bin/pip install --requirement pylint-requirements.txt --requirement requirements.txt
- run: .venv/bin/pylint --verbose src videojitter_test
black:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: python -m venv .venv
- run: .venv/bin/pip install --requirement black-requirements.txt
- run: .venv/bin/black --diff --check .
sigstore:
runs-on: ubuntu-latest
needs:
- build-sdist
- build-wheel
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
with:
name: sdist
- uses: actions/download-artifact@v3
with:
name: wheel
- uses: sigstore/[email protected]
with:
inputs: "*"
- uses: actions/upload-artifact@v3
with:
name: sigstore
path: "*.sigstore"
if-no-files-found: error
testpypi:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/videojitter-')
needs:
- build-sdist
- build-wheel
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
with:
name: sdist
- uses: actions/download-artifact@v3
with:
name: wheel
- uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
verbose: true
print-hash: true
skip-existing: true
packages-dir: .
release:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/videojitter-')
needs:
- build-sdist
- build-wheel
- sigstore
# These are not strictly necessary, but it would be dangerous to create a release
# if they fail.
- test
- black
- pylint
- testpypi
permissions:
contents: write
steps:
- uses: actions/download-artifact@v3
with:
name: sdist
- uses: actions/download-artifact@v3
with:
name: wheel
- uses: actions/download-artifact@v3
with:
name: sigstore
- uses: softprops/action-gh-release@v1
with:
draft: true
files: "*"
generate_release_notes: true