Merge pull request #184 from beeware/dependabot/github_actions/hynek/… #945
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: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash | |
env: | |
FORCE_COLOR: "1" | |
jobs: | |
pre-commit: | |
name: Pre-commit Checks | |
uses: ./.github/workflows/pre-commit-run.yml | |
with: | |
pre-commit-source: -r requirements.txt | |
test-docs-build-verify: | |
name: Verify Docs Build | |
needs: pre-commit | |
# inherited secrets are not exposed to forked repos | |
if: ${{ github.event.pull_request.head.repo.owner.login == 'beeware' }} | |
uses: ./.github/workflows/docs-build-verify.yml | |
secrets: inherit | |
with: | |
project-name: ${{ matrix.name }} | |
project-version: ${{ matrix.version }} | |
strategy: | |
matrix: | |
name: [ briefcase, toga ] | |
include: | |
- name: briefcase | |
version: v0.3.13 | |
- name: toga | |
version: v0.3.1 | |
test-install-briefcase: | |
name: Install Briefcase | |
needs: pre-commit | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
test-case: | |
- "main" | |
- "PR Repo & Ref" | |
- "PR Repo & Ref (irregular)" | |
- "PR Ref" | |
- "refs/tags/v0.3.17" | |
- "refs/tags/v40.0.5" | |
- "refs/heads/v0.3.17" | |
- "refs/heads/v40.0.5" | |
- "refs/pull/v0.3.17" | |
- "refs/pull/v40.0.5" | |
include: | |
# Test override logic | |
- test-case: "main" | |
version: "main" | |
expected: "main" | |
# Test PR body override | |
- test-case: "PR Repo & Ref" | |
testing-pr-body: "sadf asdf BRIEFCASE_REPO: https://github.com/freakboy3742/briefcase.git xcvbwer BRIEFCASE_REF: 19215d9 xczvb https://example.com/asdf?q=repo%3Aindygreg%2" | |
expected: "19215d9" | |
- test-case: "PR Repo & Ref (irregular)" | |
testing-pr-body: "sadf asdf BrIeFcAsE__REpo: https://github.com/freakboy3742/briefcase.git xcvbwer BRIEFcaseREF:19215d9 xczvb https://example.com/asdf?q=repo%3Aindygreg%2" | |
expected: "19215d9" | |
- test-case: "PR Ref" | |
testing-pr-body: "sadf asdf BRIEFcaseREF: v0.3.17" | |
expected: "v0.3.17" | |
# Test version derivation for Releases | |
- test-case: "refs/tags/v0.3.17" | |
testing-trigger-ref: "refs/tags/v0.3.17" | |
testing-ref-name: "v0.3.17" | |
expected: "v0.3.17" | |
- test-case: "refs/tags/v40.0.5" | |
testing-trigger-ref: "refs/tags/v40.0.5" | |
testing-ref-name: "v40.0.5" | |
expected: "main" | |
- test-case: "refs/heads/v0.3.17" | |
testing-trigger-ref: "refs/heads/v0.3.17" | |
testing-ref-name: "v0.3.17" | |
expected: "v0.3.17" | |
- test-case: "refs/heads/v40.0.5" | |
testing-trigger-ref: "refs/heads/v40.0.5" | |
testing-ref-name: "v40.0.5" | |
expected: "main" | |
# Test version derivation for PRs | |
- test-case: "refs/pull/v0.3.17" | |
testing-trigger-ref: "refs/pull/18/merge" | |
testing-pr-ref: "refs/heads/v0.3.17" | |
expected: "v0.3.17" | |
- test-case: "refs/pull/v40.0.5" | |
testing-trigger-ref: "refs/pull/25/merge" | |
testing-pr-ref: "v40.0.5" | |
expected: "main" | |
steps: | |
- name: Checkout beeware/.github | |
uses: actions/[email protected] | |
- name: Set up Python | |
uses: actions/[email protected] | |
with: | |
python-version: "3.x" | |
cache: pip | |
cache-dependency-path: | | |
**/setup.cfg | |
**/pyproject.toml | |
.pre-commit-config.yaml | |
- name: Install Briefcase | |
id: briefcase | |
uses: ./.github/actions/install-briefcase | |
with: | |
briefcase-override-version: ${{ matrix.version }} | |
testing-pr-body: ${{ matrix.testing-pr-body }} | |
testing-trigger-ref: ${{ matrix.testing-trigger-ref }} | |
testing-pr-ref: ${{ matrix.testing-pr-ref }} | |
testing-ref-name: ${{ matrix.testing-ref-name }} | |
- name: Briefcase @ ${{ matrix.test-case }} | |
run: | | |
if [[ "${{ matrix.expected }}" != "${{ steps.briefcase.outputs.installed-version }}" ]]; then | |
echo "installed-version: ${{ steps.briefcase.outputs.installed-version }}" | |
echo "Found Briefcase version v$(briefcase -V)" | |
echo "Expected Briefcase version ${{ matrix.expected }}" | |
exit 1 | |
fi | |
test-pre-commit-run: | |
name: Pre-commit | |
needs: pre-commit | |
uses: ./.github/workflows/pre-commit-run.yml | |
with: | |
repository: beeware/${{ matrix.repo }} | |
pre-commit-source: ${{ matrix.pre-commit-source }} | |
strategy: | |
fail-fast: false | |
matrix: | |
repo: [ briefcase, gbulb, Python-support-testbed, rubicon-objc, toga ] | |
include: | |
- pre-commit-source: .[dev] | |
- repo: gbulb | |
pre-commit-source: pre-commit | |
- repo: Python-support-testbed | |
pre-commit-source: pre-commit | |
- repo: toga | |
pre-commit-source: ./core[dev] | |
test-package-python: | |
name: Create Package | |
needs: pre-commit | |
uses: ./.github/workflows/python-package-create.yml | |
with: | |
repository: beeware/${{ matrix.repo || matrix.name }} | |
build-subdirectory: ${{ matrix.build-subdir }} | |
strategy: | |
fail-fast: false | |
matrix: | |
name: | |
- briefcase | |
- briefcase-automation | |
- gbulb | |
- rubicon-objc | |
- toga-core | |
- toga-android | |
include: | |
- name: briefcase-automation | |
repo: briefcase | |
build-subdir: automation | |
- name: toga-core | |
repo: toga | |
build-subdir: core | |
- name: toga-android | |
repo: toga | |
build-subdir: android | |
test-install-requirements: | |
name: Install Requirements | |
needs: pre-commit | |
runs-on: ${{ matrix.runner-os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runner-os: [ macos-latest, windows-latest, ubuntu-latest ] | |
steps: | |
- name: Checkout beeware/briefcase | |
uses: actions/[email protected] | |
with: | |
repository: beeware/briefcase | |
- name: Checkout beeware/briefcase to path | |
uses: actions/[email protected] | |
with: | |
repository: beeware/briefcase | |
path: repos/briefcase | |
- name: Checkout beeware/.github | |
uses: actions/[email protected] | |
with: | |
repository: beeware/.github | |
path: repos/.github-beeware | |
- name: Set up Python | |
uses: actions/[email protected] | |
with: | |
python-version: "3.x" | |
- name: Test Install Requirements with Path | |
uses: ./repos/.github-beeware/.github/actions/install-requirement | |
with: | |
requirements: "pre-commit tox" | |
extra: "dev" | |
project-root: "repos/briefcase" | |
- name: Test Install Requirements with Extra | |
uses: ./repos/.github-beeware/.github/actions/install-requirement | |
with: | |
requirements: "coverage" | |
extra: "dev" | |
- name: Test Install Requirements | |
uses: ./repos/.github-beeware/.github/actions/install-requirement | |
with: | |
requirements: "cookiecutter" | |
- name: Verify Requirements Installed | |
run: | | |
if ! python -m pip list | grep tox; then | |
echo '::error::Failed to install tox' | |
python -m pip list | |
exit 1 | |
fi | |
if ! python -m pip list | grep pre_commit; then | |
echo '::error::Failed to install pre-commit' | |
python -m pip list | |
exit 1 | |
fi | |
if ! python -m pip list | grep coverage; then | |
echo '::error::Failed to install coverage' | |
python -m pip list | |
exit 1 | |
fi | |
if ! python -m pip list | grep cookiecutter; then | |
echo '::error::Failed to install cookiecutter' | |
python -m pip list | |
exit 1 | |
fi | |
test-verify-projects-briefcase: | |
name: Verify Project | |
needs: [ pre-commit, test-package-python ] | |
uses: ./.github/workflows/app-create-verify.yml | |
with: | |
python-version: ${{ matrix.python-version }} # Falls back to 3.x if undefined | |
repository: beeware/briefcase | |
runner-os: ${{ matrix.runner-os }} | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga, pyside6 ] | |
runner-os: [ macos-latest, windows-latest, ubuntu-22.04 ] | |
includes: | |
# Ubuntu apps need to run on the system Python | |
- runner-os: ubuntu-22.04 | |
python-version: "system" | |
test-verify-apps-briefcase: | |
name: Verify Briefcase | |
needs: [ pre-commit, test-package-python ] | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
python-version: ${{ matrix.python-version }} # Falls back to 3.x if undefined | |
repository: beeware/briefcase | |
runner-os: ${{ matrix.runner-os }} | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga ] | |
runner-os: [ macos-latest, windows-latest, ubuntu-22.04 ] | |
includes: | |
# Ubuntu apps need to run on the system Python | |
- runner-os: ubuntu-22.04 | |
python-version: "system" | |
test-verify-apps-briefcase-template: | |
name: Verify Briefcase Template | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
python-version: "3.11" # Explicitly test the python-version override | |
repository: beeware/briefcase-template | |
runner-os: ${{ matrix.runner-os }} | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga ] | |
runner-os: [ macos-latest, windows-latest, ubuntu-latest ] | |
test-verify-apps-android-templates: | |
name: Verify Android | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-android-gradle-template | |
runner-os: ${{ matrix.runner-os }} | |
target-platform: android | |
target-format: gradle | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga ] # toga only | |
runner-os: [ macos-latest, windows-latest, ubuntu-latest ] | |
test-verify-apps-iOS-templates: | |
name: Verify iOS | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-iOS-xcode-template | |
runner-os: macos-latest | |
target-platform: iOS | |
target-format: xcode | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga ] # toga only | |
test-verify-apps-linux-system-templates: | |
name: Verify Linux | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
# Ubuntu apps need to run on the system Python | |
python-version: "system" | |
repository: beeware/briefcase-linux-system-template | |
runner-os: ubuntu-22.04 | |
target-platform: linux | |
target-format: system | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga, pyside6, pygame, console ] | |
test-verify-apps-appimage-templates: | |
name: Verify AppImage | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-linux-appimage-template | |
runner-os: ubuntu-latest | |
target-platform: linux | |
target-format: appimage | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# 2024-07-11 (beeware/briefcase#1908): pyside6 segfaults on AppImage start. | |
framework: [ toga, pygame, console ] | |
test-verify-apps-flatpak-templates: | |
name: Verify Flatpak | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-linux-flatpak-template | |
runner-os: ubuntu-latest | |
target-platform: linux | |
target-format: flatpak | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga, pyside6, pygame, console ] | |
test-verify-apps-macOS-templates: | |
name: Verify macOS | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-macos-${{ matrix.format }}-template | |
runner-os: macos-latest | |
target-platform: macOS | |
target-format: ${{ matrix.format }} | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga, pyside6, pygame, console ] | |
format: [ app, Xcode ] | |
test-verify-apps-web-templates: | |
name: Verify Web | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-web-static-template | |
runner-os: ubuntu-latest | |
target-platform: web | |
target-format: static | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga ] # toga only | |
test-verify-apps-windows-templates: | |
name: Verify Windows | |
needs: pre-commit | |
uses: ./.github/workflows/app-build-verify.yml | |
with: | |
repository: beeware/briefcase-windows-${{ matrix.format }}-template | |
runner-os: windows-latest | |
target-platform: windows | |
target-format: ${{ matrix.format }} | |
framework: ${{ matrix.framework }} | |
strategy: | |
fail-fast: false | |
matrix: | |
framework: [ toga, pyside6, pygame, console ] | |
format: [ app, VisualStudio ] |