mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-19 14:00:55 +02:00
The release environment only accepts main and v* tags, so a workflow pushed on another branch cannot read the keys. Flatpak builds that do not publish run without it.
196 lines
7.0 KiB
YAML
196 lines
7.0 KiB
YAML
# Modified by vii from komaruworld/mocktail. See README "About this fork".
|
|
name: Flatpak
|
|
|
|
on:
|
|
push:
|
|
tags: ['v*']
|
|
pull_request:
|
|
paths:
|
|
- '.github/workflows/flatpak.yml'
|
|
- '.gitmodules'
|
|
- 'CMakeLists.txt'
|
|
- 'LICENSE'
|
|
- 'assets/screenshots/**'
|
|
- 'cmake/**'
|
|
- 'config/**'
|
|
- 'include/**'
|
|
- 'packaging/flatpak/**'
|
|
- 'packaging/icons/**'
|
|
- 'packaging/io.github.CoderDayton.nightcap.desktop'
|
|
- 'packaging/io.github.CoderDayton.nightcap.metainfo.xml'
|
|
- 'packaging/io.github.CoderDayton.nightcap.svg'
|
|
- 'scripts/assemble_flatpak_pages.sh'
|
|
- 'site/**'
|
|
- 'src/**'
|
|
- 'stubs/**'
|
|
- 'third_party/**'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: flatpak-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
flatpak:
|
|
name: Flatpak build
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 120
|
|
# The signing key lives in the release environment, which only main and
|
|
# v* tags may use. Builds that do not publish run without it.
|
|
environment: ${{ (startsWith(github.ref, 'refs/tags/v') || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main')) && 'release' || '' }}
|
|
env:
|
|
# Publish on release tags and on manual runs from main. Pull requests
|
|
# only verify that the manifest still builds.
|
|
MOCKTAIL_PUBLISH: ${{ startsWith(github.ref, 'refs/tags/v') || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') }}
|
|
steps:
|
|
- name: Check out source
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
fetch-depth: 0
|
|
submodules: recursive
|
|
|
|
- name: Install Flatpak builder
|
|
shell: bash
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install --yes flatpak flatpak-builder gnupg
|
|
flatpak remote-add --user --if-not-exists flathub \
|
|
https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
|
|
- name: Build Flatpak repository and bundle
|
|
shell: bash
|
|
env:
|
|
FLATPAK_GPG_PRIVATE_KEY: ${{ secrets.FLATPAK_GPG_PRIVATE_KEY }}
|
|
FLATPAK_GPG_KEY_ID: ${{ secrets.FLATPAK_GPG_KEY_ID }}
|
|
run: |
|
|
set -Eeuo pipefail
|
|
# The manifest builds the local checkout from refs/heads/main.
|
|
git update-ref refs/heads/main "$GITHUB_SHA"
|
|
builder_signing=()
|
|
bundle_keys=()
|
|
if [[ "$MOCKTAIL_PUBLISH" == true ]]; then
|
|
[[ -n "$FLATPAK_GPG_PRIVATE_KEY" && \
|
|
-n "$FLATPAK_GPG_KEY_ID" ]]
|
|
install -d -m 0700 "$RUNNER_TEMP/nightcap-gnupg"
|
|
printf '%s' "$FLATPAK_GPG_PRIVATE_KEY" | \
|
|
gpg --batch --homedir "$RUNNER_TEMP/nightcap-gnupg" --import
|
|
gpg --batch --homedir "$RUNNER_TEMP/nightcap-gnupg" \
|
|
--export "$FLATPAK_GPG_KEY_ID" >nightcap-flatpak.gpg
|
|
builder_signing=(
|
|
"--gpg-sign=$FLATPAK_GPG_KEY_ID"
|
|
"--gpg-homedir=$RUNNER_TEMP/nightcap-gnupg"
|
|
)
|
|
bundle_keys=(--gpg-keys=nightcap-flatpak.gpg)
|
|
fi
|
|
flatpak-builder \
|
|
--arch=x86_64 \
|
|
--jobs=4 \
|
|
--user \
|
|
--install-deps-from=flathub \
|
|
--disable-rofiles-fuse \
|
|
--force-clean \
|
|
--default-branch=stable \
|
|
--repo=repo \
|
|
"${builder_signing[@]}" \
|
|
build-flatpak-ci \
|
|
packaging/flatpak/io.github.CoderDayton.nightcap.json
|
|
if [[ "$MOCKTAIL_PUBLISH" == true ]]; then
|
|
flatpak build-update-repo \
|
|
--generate-static-deltas \
|
|
--static-delta-jobs=2 \
|
|
--prune \
|
|
--gpg-sign="$FLATPAK_GPG_KEY_ID" \
|
|
--gpg-homedir="$RUNNER_TEMP/nightcap-gnupg" \
|
|
repo
|
|
fi
|
|
flatpak build-bundle \
|
|
--arch=x86_64 \
|
|
"${bundle_keys[@]}" \
|
|
repo \
|
|
Nightcap-x86_64.flatpak \
|
|
io.github.CoderDayton.nightcap \
|
|
stable
|
|
if [[ "$MOCKTAIL_PUBLISH" == true ]]; then
|
|
./scripts/assemble_flatpak_pages.sh \
|
|
repo Nightcap-x86_64.flatpak nightcap-flatpak.gpg public
|
|
fi
|
|
|
|
- name: Upload Flatpak
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: Nightcap-x86_64-flatpak
|
|
path: Nightcap-x86_64.flatpak
|
|
if-no-files-found: error
|
|
retention-days: 14
|
|
|
|
- name: Configure GitHub Pages
|
|
if: env.MOCKTAIL_PUBLISH == 'true'
|
|
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
|
|
|
|
- name: Upload GitHub Pages repository
|
|
if: env.MOCKTAIL_PUBLISH == 'true'
|
|
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
|
|
with:
|
|
path: public
|
|
|
|
deploy-pages:
|
|
name: Publish Flatpak repository
|
|
if: startsWith(github.ref, 'refs/tags/v') || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main')
|
|
needs: flatpak
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 10
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
steps:
|
|
- name: Deploy GitHub Pages
|
|
id: deployment
|
|
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
|
|
|
|
release:
|
|
name: Attach bundle to GitHub release
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
needs: flatpak
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- name: Check out source
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Download Flatpak
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: Nightcap-x86_64-flatpak
|
|
path: release
|
|
|
|
- name: Upload to release
|
|
shell: bash
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
set -Eeuo pipefail
|
|
tag="${GITHUB_REF_NAME}"
|
|
(cd release && sha256sum Nightcap-x86_64.flatpak > Nightcap-x86_64.flatpak.sha256)
|
|
./scripts/release_notes.sh "$tag" > release/notes.md
|
|
# The Release workflow creates the same release; whichever job
|
|
# arrives second sees "already exists" and continues.
|
|
if ! gh release view "$tag" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
|
|
gh release create "$tag" --repo "$GITHUB_REPOSITORY" \
|
|
--title "Nightcap $tag" --notes-file release/notes.md ||
|
|
gh release view "$tag" --repo "$GITHUB_REPOSITORY" >/dev/null
|
|
fi
|
|
gh release edit "$tag" --repo "$GITHUB_REPOSITORY" \
|
|
--title "Nightcap $tag" --notes-file release/notes.md
|
|
gh release upload "$tag" --repo "$GITHUB_REPOSITORY" --clobber \
|
|
release/Nightcap-x86_64.flatpak \
|
|
release/Nightcap-x86_64.flatpak.sha256
|