Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_linux_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_linux_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (macOS)
uses: actions/cache@v5
Expand All @@ -71,6 +72,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_macos_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_macos_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Windows)
uses: actions/cache@v5
Expand All @@ -79,6 +81,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_windows_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_windows_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Python Latest Supported)
uses: actions/cache@v5
Expand All @@ -87,6 +90,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_python_latest_supported_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_python_latest_supported_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Python 3.12)
uses: actions/cache@v5
Expand All @@ -95,6 +99,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_python_312_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_python_312_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Python 3.11)
uses: actions/cache@v5
Expand All @@ -103,6 +108,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_python_311_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_python_311_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Python 3.10)
uses: actions/cache@v5
Expand All @@ -111,6 +117,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_python_310_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_python_310_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Qt GUI)
uses: actions/cache@v5
Expand All @@ -119,6 +126,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_qt_gui_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_qt_gui_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Packaging)
uses: actions/cache@v5
Expand All @@ -127,6 +135,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_packaging_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_packaging_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Test (Code Quality)
uses: actions/cache@v5
Expand All @@ -135,6 +144,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.test_code_quality_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.test_code_quality_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Build (Linux)
uses: actions/cache@v5
Expand All @@ -143,6 +153,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.build_linux_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.build_linux_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Build (macOS App)
uses: actions/cache@v5
Expand All @@ -151,6 +162,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.build_macos_app_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.build_macos_app_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Notarize (macOS App)
uses: actions/cache@v5
Expand All @@ -159,6 +171,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.notarize_macos_app_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.notarize_macos_app_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Build (macOS DMG)
uses: actions/cache@v5
Expand All @@ -167,6 +180,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.build_macos_dmg_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.build_macos_dmg_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Notarize (macOS DMG)
uses: actions/cache@v5
Expand All @@ -175,6 +189,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.notarize_macos_dmg_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.notarize_macos_dmg_skip_cache_key }}
enableCrossOsArchive: true

- name: Check skip cache for Build (Windows)
uses: actions/cache@v5
Expand All @@ -183,6 +198,7 @@ jobs:
key: 0_check_${{ steps.set_cache.outputs.build_windows_skip_cache_key }}_${{ github.run_id }}
restore-keys:
0_${{ steps.set_cache.outputs.build_windows_skip_cache_key }}
enableCrossOsArchive: true

- name: Set outputs
id: set_ouputs
Expand Down Expand Up @@ -293,6 +309,7 @@ jobs:
with:
path: .skip_cache_test_linux
key: 0_${{ needs.analyze.outputs.test_linux_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_linux'"
Expand Down Expand Up @@ -346,6 +363,7 @@ jobs:
with:
path: .skip_cache_test_macos
key: 0_${{ needs.analyze.outputs.test_macos_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_macos'"
Expand Down Expand Up @@ -405,6 +423,7 @@ jobs:
with:
path: .skip_cache_test_windows
key: 0_${{ needs.analyze.outputs.test_windows_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_windows'"
Expand Down Expand Up @@ -463,6 +482,7 @@ jobs:
with:
path: .skip_cache_test_python_latest_supported
key: 0_${{ needs.analyze.outputs.test_python_latest_supported_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_python_latest_supported'"
Expand Down Expand Up @@ -521,6 +541,7 @@ jobs:
with:
path: .skip_cache_test_python_312
key: 0_${{ needs.analyze.outputs.test_python_312_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_python_312'"
Expand Down Expand Up @@ -579,6 +600,7 @@ jobs:
with:
path: .skip_cache_test_python_311
key: 0_${{ needs.analyze.outputs.test_python_311_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_python_311'"
Expand Down Expand Up @@ -637,6 +659,7 @@ jobs:
with:
path: .skip_cache_test_python_310
key: 0_${{ needs.analyze.outputs.test_python_310_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_python_310'"
Expand Down Expand Up @@ -697,6 +720,7 @@ jobs:
with:
path: .skip_cache_test_qt_gui
key: 0_${{ needs.analyze.outputs.test_qt_gui_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_qt_gui'"
Expand Down Expand Up @@ -788,6 +812,7 @@ jobs:
with:
path: .skip_cache_test_packaging
key: 0_${{ needs.analyze.outputs.test_packaging_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_packaging'"
Expand Down Expand Up @@ -847,6 +872,7 @@ jobs:
with:
path: .skip_cache_test_code_quality
key: 0_${{ needs.analyze.outputs.test_code_quality_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_test_code_quality'"
Expand Down Expand Up @@ -918,6 +944,7 @@ jobs:
with:
path: .skip_cache_build_linux
key: 0_${{ needs.analyze.outputs.build_linux_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_build_linux'"
Expand Down Expand Up @@ -990,6 +1017,7 @@ jobs:
with:
path: .skip_cache_build_macos_app
key: 0_${{ needs.analyze.outputs.build_macos_app_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_build_macos_app'"
Expand Down Expand Up @@ -1085,6 +1113,7 @@ jobs:
with:
path: .skip_cache_notarize_macos_app
key: 0_${{ needs.analyze.outputs.notarize_macos_app_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_notarize_macos_app'"
Expand Down Expand Up @@ -1170,6 +1199,7 @@ jobs:
with:
path: .skip_cache_build_macos_dmg
key: 0_${{ needs.analyze.outputs.build_macos_dmg_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_build_macos_dmg'"
Expand Down Expand Up @@ -1256,6 +1286,7 @@ jobs:
with:
path: .skip_cache_notarize_macos_dmg
key: 0_${{ needs.analyze.outputs.notarize_macos_dmg_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_notarize_macos_dmg'"
Expand Down Expand Up @@ -1338,6 +1369,7 @@ jobs:
with:
path: .skip_cache_build_windows
key: 0_${{ needs.analyze.outputs.build_windows_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'.skip_cache_build_windows'"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci/skiplist_os_linux.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.github/workflows/ci/skiplist_os_Windows.txt
.github/workflows/ci/skiplist_os_macOS.txt
.github/workflows/ci/skiplist_os_windows.txt
.github/workflows/ci/skiplist_os_macos.txt
osx/*
plover/oslayer/osx/*
plover/oslayer/windows/*
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci/skiplist_os_macos.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.github/workflows/ci/skiplist_os_Linux.txt
.github/workflows/ci/skiplist_os_Windows.txt
.github/workflows/ci/skiplist_os_linux.txt
.github/workflows/ci/skiplist_os_windows.txt
linux/*
plover/oslayer/linux/*
plover/oslayer/windows/*
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci/skiplist_os_windows.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.github/workflows/ci/skiplist_os_Linux.txt
.github/workflows/ci/skiplist_os_macOS.txt
.github/workflows/ci/skiplist_os_linux.txt
.github/workflows/ci/skiplist_os_macos.txt
linux/*
osx/*
plover/oslayer/linux/*
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci/workflow_template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ jobs:
key: <@ cache_epoch @>_check_${{ steps.set_cache.outputs.<@ j.id @>_skip_cache_key }}_${{ github.run_id }}
restore-keys:
<@ cache_epoch @>_${{ steps.set_cache.outputs.<@ j.id @>_skip_cache_key }}
enableCrossOsArchive: true

<% endfor %>
<% endif %>
Expand Down Expand Up @@ -393,6 +394,7 @@ jobs:
with:
path: <@ j.skip_cache_path @>
key: <@ cache_epoch @>_${{ needs.analyze.outputs.<@ j.id @>_skip_cache_key }}
enableCrossOsArchive: true

- name: Update skip cache 2
run: run_eval "echo 'https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID' >'<@ j.skip_cache_path @>'"
Expand Down
39 changes: 27 additions & 12 deletions doc/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,18 @@ actions), in order to reduce duplications, that file is currently generated:

The current workflow consists of:

- 1 pre-processing job: "Analyze", all other jobs depend on it
- 3 "platform tests" jobs: Linux, macOS, and Windows
- 3 "platform build" jobs, again: Linux, macOS and Windows, dependent on their
respective "platform tests" job (so if the `Test (macOS)` job fails, the
- **Analyze**: a pre-processing job, all other jobs depend on it.
- **Platform tests**: jobs for Linux, macOS, and Windows.
- **Qt GUI test**: specifically for testing the Qt interface.
- **Python tests**: for checking compatibility across all supported versions of Python.
- **Code quality**: runs linting and formatting checks.
- **Packaging**: runs a number of packaging related checks.
- **Platform build**: jobs for Linux, macOS and Windows, dependent on their
respective platform tests job (so if the `Test (macOS)` job fails, the
`Build (macOS)` job is skipped).
- 1 "packaging" job that run a number of packaging related checks
- 3 "Python tests" jobs: for checking support for older/newer versions of Python
(other than the version currently used for the distributions)
- 1 final, optional, "release" job
- **macOS notarization**: handles code signing and Apple notarization for
the macOS application and disk image.
- **Release**: a final, optional job.


## Analyze job
Expand Down Expand Up @@ -105,6 +108,22 @@ If the key changes, the cache is cleared/reset, and the Python environment
will be recreated, wheel and extra dependencies re-downloaded, etc...


## macOS Notarization

To ensure that Plover can be run on modern macOS versions without being blocked
by Gatekeeper, the macOS app and DMG are code-signed and notarized by Apple.

This process involves:
- Importing a Developer ID certificate into a temporary keychain.
- Signing the application bundle and the disk image.
- Submitting the artifacts to Apple's notarization service.
- Stapling the notarization ticket to the artifacts.

Because this requires access to sensitive credentials, notarization is only
performed for commits on the `main` branch and `maintenance/*` branches. These
jobs are automatically skipped for all other branches and pull requests from forks.


## Packaging job

This job will run a number of packaging-related checks. See
Expand Down Expand Up @@ -138,8 +157,4 @@ The release notes are automatically generated from the last release section in

## Limitations

- The artifact upload action [always wraps artifacts in a
zip](https://github.com/actions/upload-artifact/issues/39),
even if they are a single file such as an exe or a dmg.
- Artifacts can only be downloaded when logged-in.
- Artifacts are only accessible once all the jobs of a workflow have completed.
Loading