|
name: CI |
|
|
|
on: |
|
push: |
|
branches: [master] |
|
pull_request: |
|
schedule: |
|
- cron: "0 0 * * *" # Every day at midnight UTC |
|
workflow_dispatch: |
|
inputs: |
|
NIGHTLY: |
|
description: "Run as a nightly build" |
|
default: false |
|
required: true |
|
type: boolean |
|
|
|
run-name: >- |
|
${{ |
|
(github.event_name == 'schedule' || inputs.NIGHTLY == true) |
|
&& 'Build and Deploy Nightly Builds' |
|
|| github.event.pull_request.title |
|
|| github.event.head_commit.message |
|
|| format('{0} on {1}', github.workflow, github.ref_name) |
|
}} |
|
|
|
jobs: |
|
check-skippable: |
|
name: Check Skippable |
|
runs-on: ubuntu-24.04 |
|
permissions: |
|
contents: read |
|
outputs: |
|
skip: ${{ steps.set-skippable.outputs.skippable || 'false' }} |
|
steps: |
|
- uses: actions/checkout@v7 |
|
|
|
- name: Check and set skippable |
|
id: set-skippable |
|
continue-on-error: true |
|
run: | |
|
if [ "${{ github.event_name }}" = "schedule" ]; then |
|
git fetch origin tag nightly |
|
LAST_COMMIT_HASH=$(git rev-list -n 1 nightly) |
|
if [ "$(git rev-parse HEAD)" = "$LAST_COMMIT_HASH" ]; then |
|
echo "::notice::No new commits since last nightly build, skipping this build." |
|
echo "skippable=true" >> $GITHUB_OUTPUT |
|
fi |
|
else |
|
echo "skippable=false" >> $GITHUB_OUTPUT |
|
fi |
|
|
|
build-macos: |
|
needs: check-skippable |
|
if: needs.check-skippable.outputs.skip != 'true' |
|
permissions: |
|
actions: read |
|
contents: write |
|
uses: ./.github/workflows/cppcmake-macos.yml |
|
secrets: inherit |
|
with: |
|
NIGHTLY: ${{ github.event_name == 'schedule' || inputs.NIGHTLY == true }} |
|
CONSOLIDATE_DEPENDENCY_SUMMARY: true |
|
|
|
build-ubuntu: |
|
needs: check-skippable |
|
if: needs.check-skippable.outputs.skip != 'true' |
|
permissions: |
|
actions: read |
|
contents: write |
|
uses: ./.github/workflows/cppcmake-ubuntu.yml |
|
with: |
|
NIGHTLY: ${{ github.event_name == 'schedule' || inputs.NIGHTLY == true }} |
|
CONSOLIDATE_DEPENDENCY_SUMMARY: true |
|
|
|
build-windows: |
|
needs: check-skippable |
|
if: needs.check-skippable.outputs.skip != 'true' |
|
permissions: |
|
actions: read |
|
contents: write |
|
uses: ./.github/workflows/cppcmake-windows.yml |
|
secrets: inherit |
|
with: |
|
NIGHTLY: ${{ github.event_name == 'schedule' || inputs.NIGHTLY == true }} |
|
CONSOLIDATE_DEPENDENCY_SUMMARY: true |
|
|
|
build-windows_on_arm: |
|
needs: check-skippable |
|
if: needs.check-skippable.outputs.skip != 'true' |
|
permissions: |
|
actions: read |
|
contents: write |
|
uses: ./.github/workflows/cppcmake-windows_on_arm.yml |
|
secrets: inherit |
|
with: |
|
NIGHTLY: ${{ github.event_name == 'schedule' || inputs.NIGHTLY == true }} |
|
CONSOLIDATE_DEPENDENCY_SUMMARY: true |
|
|
|
summarize-dependencies: |
|
needs: |
|
[ |
|
check-skippable, |
|
build-macos, |
|
build-ubuntu, |
|
build-windows, |
|
build-windows_on_arm, |
|
] |
|
if: always() && needs.check-skippable.outputs.skip != 'true' && !cancelled() |
|
name: Summarize Dependencies |
|
runs-on: ubuntu-24.04 |
|
permissions: |
|
actions: read |
|
contents: read |
|
steps: |
|
- name: Download dependency summaries |
|
uses: actions/download-artifact@v8 |
|
continue-on-error: true |
|
with: |
|
pattern: dependency-summary-* |
|
path: dependency-summary |
|
merge-multiple: true |
|
|
|
- name: Summary |
|
run: | |
|
{ |
|
echo "## Dependencies used" |
|
echo "" |
|
echo "| Workflow | Target | OpenSSL | Qt | SQLCipher | SQLite |" |
|
echo "| :---: | :---: | :---: | :---: | :---: | :---: |" |
|
} >> "$GITHUB_STEP_SUMMARY" |
|
|
|
if [ -d dependency-summary ] && find dependency-summary -type f -name '*.md' | grep -q .; then |
|
find dependency-summary -type f -name '*.md' -print | sort | while IFS= read -r file; do |
|
cat "$file" >> "$GITHUB_STEP_SUMMARY" |
|
done |
|
else |
|
echo "| Not available | No dependency summaries were uploaded. | - | - | - | - |" >> "$GITHUB_STEP_SUMMARY" |
|
fi |
|
|
|
release: |
|
if: github.event_name != 'pull_request' |
|
needs: [build-macos, build-ubuntu, build-windows, build-windows_on_arm] |
|
name: Release |
|
permissions: |
|
actions: read |
|
contents: write |
|
uses: ./.github/workflows/release.yml |