Skip to content

CI: Fix cache refresh in scheduled nightly builds #296

CI: Fix cache refresh in scheduled nightly builds

CI: Fix cache refresh in scheduled nightly builds #296

Workflow file for this run

name: build_deps
on:
push:
branches:
- master
tags:
- '20[2-9][0-9]-[0-9][0-9]-[0-9][0-9]'
pull_request:
paths-ignore:
- '**.md'
branches:
- master
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
pre-checks:
name: Run Pre-Checks
runs-on: ubuntu-22.04
defaults:
run:
shell: bash
outputs:
seekingTesters: ${{ steps.checks.outputs.seekingTesters }}
shortHash: ${{ steps.checks.outputs.shortHash }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check for GitHub Labels
id: checks
env:
GH_TOKEN: ${{ github.token }}
run: |
: Check for GitHub Labels
case "${GITHUB_EVENT_NAME}" in
pull_request)
if gh pr view ${{ github.event.number }} --json labels \
| jq -e -r '.labels[] | select(.name == "Seeking Testers")' > /dev/null; then
echo "seekingTesters=true" >> $GITHUB_OUTPUT
else
echo "seekingTesters=false" >> $GITHUB_OUTPUT
fi
;;
*)
echo "seekingTesters=false" >> $GITHUB_OUTPUT
;;
esac
echo "shortHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
ffmpeg-macos-build:
name: Build FFmpeg for macOS
runs-on: macos-13
needs: pre-checks
strategy:
fail-fast: true
matrix:
target: [macos-arm64, macos-x86_64]
include:
- target: macos-arm64
config: Release
type: static
- target: macos-x86_64
config: Release
type: static
defaults:
run:
shell: zsh --no-rcs --errexit --pipefail {0}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
local -a to_remove=()
for formula (llvm gcc postgresql openjdk sox libsndfile flac libvorbis opusfile \
libogg composer php gd freetype fontconfig webp libpng lame libtiff opus kotlin \
sbt libxft libxcb) {
if [[ -d /usr/local/opt/${formula} ]] to_remove+=(${formula})
}
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove}
local -r date_string=$(date +"%Y-%m-%d")
local -r target='${{ matrix.target }}'
artifact_name="ffmpeg-${target}-${{ needs.pre-checks.outputs.shortHash }}"
file_name="${target%%-*}-ffmpeg-${date_string}-${target##*-}.tar.xz"
dsym_artifact_name="ffmpeg-${target}-dSYMs-${{ needs.pre-checks.outputs.shortHash }}"
dsym_file_name="${target%%-*}-ffmpeg-${date_string}-${target##*-}-dSYMs.tar.xz"
print "artifactName=${artifact_name}" >> $GITHUB_OUTPUT
print "artifactFileName=${file_name}" >> $GITHUB_OUTPUT
print "dsymArtifactName=${dsym_artifact_name}" >> $GITHUB_OUTPUT
print "dsymArtifactFileName=${dsym_file_name}" >> $GITHUB_OUTPUT
print "ccacheDate=${date_string}" >> $GITHUB_OUTPUT
- name: Restore Compilation Cache
id: ccache-cache
uses: actions/cache/restore@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.target }}-ccache-ffmpeg-${{ steps.setup.outputs.ccacheDate }}
restore-keys: |
${{ matrix.target }}-ccache-ffmpeg-
- name: Build FFmpeg
uses: ./.github/actions/build-ffmpeg
with:
target: ${{ matrix.target }}
type: ${{ matrix.type }}
config: ${{ matrix.config }}
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.artifactFileName }}
- name: Publish Debug Symbol Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.dsymArtifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.dsymArtifactFileName }}
- name: Save Compilation Cache
if: github.event_name == 'push'
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.target }}-ccache-ffmpeg-${{ steps.setup.outputs.ccacheDate }}
ffmpeg-windows-build:
name: Build FFmpeg for Windows
runs-on: windows-2022
needs: pre-checks
strategy:
fail-fast: true
matrix:
target: [x64, x86]
include:
- target: x64
config: Release
type: static
- target: x86
config: Release
type: static
defaults:
run:
shell: pwsh
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
# Setup Environment
$Target='${{ matrix.target }}'
$ArtifactName="ffmpeg-windows-${Target}-${{ needs.pre-checks.outputs.shortHash }}"
$FileName="windows-ffmpeg-$(Get-Date -Format 'yyyy-MM-dd')-${Target}.zip"
"artifactName=${ArtifactName}" >> $env:GITHUB_OUTPUT
"artifactFileName=${FileName}" >> $env:GITHUB_OUTPUT
- name: Build FFmpeg
uses: ./.github/actions/build-ffmpeg
with:
target: ${{ matrix.target }}
type: ${{ matrix.type }}
config: ${{ matrix.config }}
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}\windows\${{ steps.setup.outputs.artifactFileName }}
ffmpeg-package-universal:
name: Build FFmpeg (Universal)
runs-on: macos-13
needs: [pre-checks, ffmpeg-macos-build]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create universal binary package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-universal
with:
arm64: ffmpeg-macos-arm64-${{ needs.pre-checks.outputs.shortHash }}
x86_64: ffmpeg-macos-x86_64-${{ needs.pre-checks.outputs.shortHash }}
outputName: ffmpeg-macos-universal-${{ needs.pre-checks.outputs.shortHash }}
- name: Create universal dSYM package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-universal
with:
arm64: ffmpeg-macos-arm64-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
x86_64: ffmpeg-macos-x86_64-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
outputName: ffmpeg-macos-universal-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
macos-build:
name: Build macOS Dependencies
runs-on: macos-13
needs: pre-checks
strategy:
fail-fast: true
matrix:
target: [macos-arm64, macos-x86_64]
include:
- target: macos-arm64
config: Release
type: static
- target: macos-x86_64
config: Release
type: static
defaults:
run:
shell: zsh --no-rcs --errexit --pipefail {0}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
: Setup Environment
to_remove=()
for formula (llvm gcc) {
if [[ -d /usr/local/opt/"${formula}" ]] to_remove+=(${formula})
}
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove}
local -r date_string=$(date +"%Y-%m-%d")
local -r target='${{ matrix.target }}'
artifact_name="deps-${target}-${{ needs.pre-checks.outputs.shortHash }}"
file_name="${target%%-*}-deps-${date_string}-${target##*-}.tar.xz"
dsym_artifact_name="deps-${target}-dSYMs-${{ needs.pre-checks.outputs.shortHash }}"
dsym_file_name="${target%%-*}-deps-${date_string}-${target##*-}-dSYMs.tar.xz"
echo "artifactName=${artifact_name}" >> $GITHUB_OUTPUT
echo "artifactFileName=${file_name}" >> $GITHUB_OUTPUT
echo "dsymArtifactName=${dsym_artifact_name}" >> $GITHUB_OUTPUT
echo "dsymArtifactFileName=${dsym_file_name}" >> $GITHUB_OUTPUT
echo "ccacheDate=${date_string}" >> $GITHUB_OUTPUT
- name: Restore Compilation Cache
id: ccache-cache
uses: actions/cache/restore@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.target }}-ccache-deps-${{ steps.setup.outputs.ccacheDate }}
restore-keys: |
${{ matrix.target }}-ccache-deps-
- name: Build macOS Dependencies
uses: ./.github/actions/build-deps
with:
target: ${{ matrix.target }}
type: ${{ matrix.type }}
config: ${{ matrix.config }}
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.artifactFileName }}
- name: Publish Debug Symbol Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.dsymArtifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.dsymArtifactFileName }}
- name: Save Compilation Cache
if: github.event_name == 'push' && steps.ccache-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.target }}-ccache-deps-${{ steps.setup.outputs.ccacheDate }}
macos-package-universal:
name: Build macOS Dependencies (Universal)
runs-on: macos-13
needs: [pre-checks, macos-build]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create universal binary package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-universal
with:
arm64: deps-macos-arm64-${{ needs.pre-checks.outputs.shortHash }}
x86_64: deps-macos-x86_64-${{ needs.pre-checks.outputs.shortHash }}
outputName: deps-macos-universal-${{ needs.pre-checks.outputs.shortHash }}
- name: Create universal dSYM package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-universal
with:
arm64: deps-macos-arm64-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
x86_64: deps-macos-x86_64-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
outputName: deps-macos-universal-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
macos-qt6-build:
name: Build Qt6 (macOS)
runs-on: macos-13
needs: pre-checks
defaults:
run:
shell: zsh --no-rcs --errexit --pipefail {0}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
: Setup Environment
local -a to_remove=()
for formula (llvm gcc) {
if [[ -d /usr/local/opt/"${formula}" ]] to_remove+=(${formula})
}
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove}
local -r date_string=$(date +"%Y-%m-%d")
artifact_name="qt6-macos-universal-${{ needs.pre-checks.outputs.shortHash }}"
file_name="macos-deps-qt6-${date_string}-universal.tar.xz"
dsym_artifact_name="qt6-macos-universal-dSYMs-${{ needs.pre-checks.outputs.shortHash }}"
dsym_file_name="macos-deps-qt6-${date_string}-universal-dSYMs.tar.xz"
print "artifactName=${artifact_name}" >> $GITHUB_OUTPUT
print "artifactFileName=${file_name}" >> $GITHUB_OUTPUT
print "dsymArtifactName=${dsym_artifact_name}" >> $GITHUB_OUTPUT
print "dsymArtifactFileName=${dsym_file_name}" >> $GITHUB_OUTPUT
print "ccacheDate=${date_string}" >> $GITHUB_OUTPUT
- name: Restore Compilation Cache
id: ccache-cache
uses: actions/cache/restore@v4
with:
path: ${{ github.workspace }}/.ccache
key: macos-universal-ccache-qt6-${{ steps.setup.outputs.ccacheDate }}
restore-keys: |
macos-universal-ccache-qt6-
- name: Build macOS Qt6
uses: ./.github/actions/build-qt
with:
target: macos-universal
config: Release
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}/macos-universal/${{ steps.setup.outputs.artifactFileName }}
- name: Publish Debug Symbol Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.dsymArtifactName }}
path: ${{ github.workspace }}/macos-universal/${{ steps.setup.outputs.dsymArtifactFileName }}
- name: Save Compilation Cache
if: github.event_name == 'push' && steps.ccache-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.ccache
key: macos-universal-ccache-qt6-${{ steps.setup.outputs.ccacheDate }}
macos-qt6-package:
name: Create macOS Qt6 (${{ matrix.target }})
runs-on: macos-13
strategy:
fail-fast: true
matrix:
target: [macos-arm64, macos-x86_64]
include:
- target: macos-x86_64
config: Release
- target: macos-arm64
config: Release
needs: [pre-checks, macos-qt6-build]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create single architecture binary package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-single-arch
with:
base: qt6-macos-universal-${{ needs.pre-checks.outputs.shortHash }}
target: ${{ matrix.target }}
outputName: qt6-${{ matrix.target }}-${{ needs.pre-checks.outputs.shortHash }}
- name: Create single architecture dSYM package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/create-single-arch
with:
base: qt6-macos-universal-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
target: ${{ matrix.target }}
outputName: qt6-${{ matrix.target }}-dSYMs-${{ needs.pre-checks.outputs.shortHash }}
windows-build:
name: Build Windows Dependencies
runs-on: windows-2022
needs: pre-checks
strategy:
fail-fast: true
matrix:
target: [x64, x86]
include:
- target: x64
config: Release
type: static
- target: x86
config: Release
type: static
defaults:
run:
shell: pwsh
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
# Setup Environment
$Target='${{ matrix.target }}'
$ArtifactName="deps-windows-${Target}-${{ needs.pre-checks.outputs.shortHash }}"
$FileName="windows-deps-$(Get-Date -Format 'yyyy-MM-dd')-${Target}.zip"
"artifactName=${ArtifactName}" >> $env:GITHUB_OUTPUT
"artifactFileName=${FileName}" >> $env:GITHUB_OUTPUT
- name: Build ntv2 Debug
if: matrix.target == 'x64'
shell: pwsh
run: |
# Build ntv2 Debug
$Params = @{
Target = '${{ matrix.target }}'
Configuration = 'Debug'
Dependencies = 'ntv2'
}
./Build-Dependencies.ps1 @Params
Remove-Item -Recurse -Force ${{ github.workspace }}/windows_build_temp
- name: Build VPL Debug
if: matrix.target == 'x64'
shell: pwsh
run: |
# Build VPL Debug
$Params = @{
Target = '${{ matrix.target }}'
Configuration = 'Debug'
Dependencies = 'vpl'
}
./Build-Dependencies.ps1 @Params
Remove-Item -Recurse -Force ${{ github.workspace }}/windows_build_temp
- name: Build qrcodegencpp Debug
shell: pwsh
run: |
# Build qrcodegencpp Debug
$Params = @{
Target = '${{ matrix.target }}'
Configuration = 'Debug'
Dependencies = 'qrcodegencpp'
}
./Build-Dependencies.ps1 @Params
Remove-Item -Recurse -Force ${{ github.workspace }}/windows_build_temp
- name: Build Windows Dependencies
uses: ./.github/actions/build-deps
with:
target: ${{ matrix.target }}
type: ${{ matrix.type }}
config: ${{ matrix.config }}
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}\windows\${{ steps.setup.outputs.artifactFileName }}
windows-qt6-build:
name: Build Qt6 (Windows)
runs-on: windows-2022
needs: pre-checks
strategy:
fail-fast: true
matrix:
target: [x64, x86]
config: [RelWithDebInfo, Debug]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Environment
id: setup
run: |
# Setup Environment
$ArtifactName="qt6-windows-${{ matrix.target }}-${{ matrix.config }}-${{ needs.pre-checks.outputs.shortHash }}"
$FileName="windows-deps-qt6-$(Get-Date -Format 'yyyy-MM-dd')-${{ matrix.target }}-${{ matrix.config }}.zip"
"artifactName=${ArtifactName}" >> $env:GITHUB_OUTPUT
"artifactFileName=${FileName}" >> $env:GITHUB_OUTPUT
- name: Build Windows Qt
uses: ./.github/actions/build-qt
with:
target: ${{ matrix.target }}
config: ${{ matrix.config }}
- name: Publish Build Artifacts
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: actions/upload-artifact@v4
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}/windows/${{ steps.setup.outputs.artifactFileName }}
windows-qt6-package:
name: Package Windows Qt6
runs-on: windows-2022
strategy:
fail-fast: true
matrix:
target: [x64, x86]
needs: [pre-checks, windows-qt6-build]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create Windows Qt package
if: github.event_name != 'pull_request' || fromJSON(needs.pre-checks.outputs.seekingTesters)
uses: ./.github/actions/package-windows-qt
with:
releaseArtifact: qt6-windows-${{ matrix.target }}-RelWithDebInfo-${{ needs.pre-checks.outputs.shortHash }}
debugArtifact: qt6-windows-${{ matrix.target }}-Debug-${{ needs.pre-checks.outputs.shortHash }}
outputName: qt6-windows-${{ matrix.target }}-${{ needs.pre-checks.outputs.shortHash }}
pdbOutputName: qt6-windows-${{ matrix.target }}-PDBs-${{ needs.pre-checks.outputs.shortHash }}
make-release:
name: Create and upload release
runs-on: ubuntu-22.04
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
needs: [ffmpeg-package-universal, ffmpeg-windows-build, macos-package-universal, macos-qt6-package, windows-build, windows-qt6-package]
defaults:
run:
shell: bash
steps:
- name: Get Metadata
id: metadata
run: |
: Get Metadata
echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
- name: Download build artifacts
uses: actions/download-artifact@v4
- name: Package Windows dependencies
run: |
: Package Windows dependencies
shopt -s extglob
for arch in x64 x86; do
_temp=$(mktemp -d)
pushd "${_temp}" > /dev/null
for artifact in ${GITHUB_WORKSPACE}/**/windows-@(deps|ffmpeg)-!(qt6*)-${arch}.*; do
case ${artifact} in
*.zip) unzip -o ${artifact} > /dev/null ;;
*.tar.xz) XZ_OPT=-T0 tar -xJf ${artifact} ;;
*.tar.gz) tar -xzf ${artifact} ;;
esac
done
zip -r windows-deps-${{ steps.metadata.outputs.version }}-${arch}.zip -- *
mv windows-deps-${{ steps.metadata.outputs.version }}-${arch}.zip ${GITHUB_WORKSPACE}
mv ${GITHUB_WORKSPACE}/qt6-windows-${arch}-!(*-@(Debug|RelWithDebInfo|Release|MinSizeRel))/*.zip ${GITHUB_WORKSPACE}
popd > /dev/null
done
- name: Package macOS dependencies
run: |
: Package macOS dependencies
shopt -s extglob
for arch in arm64 x86_64 universal; do
_temp=$(mktemp -d)
pushd "${_temp}" > /dev/null
for artifact in ${GITHUB_WORKSPACE}/**/macos-@(deps|ffmpeg)-!(qt6*)-${arch}.*; do
case ${artifact} in
*.zip) unzip -o ${artifact} > /dev/null ;;
*.tar.xz) XZ_OPT=-T0 tar -xvJf ${artifact} ;;
*.tar.gz) tar -xvzf ${artifact} ;;
esac
done
XZ_OPT=-T0 tar -cvJf macos-deps-${{ steps.metadata.outputs.version }}-${arch}.tar.xz -- *
mv macos-deps-${{ steps.metadata.outputs.version }}-${arch}.tar.xz ${GITHUB_WORKSPACE}
popd > /dev/null
done
mv ${GITHUB_WORKSPACE}/qt6-macos-*/*.tar.xz ${{ github.workspace }}
- name: Generate Checksums
run: |
: Generate Checksums
shopt -s extglob
echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt
for file in ${{ github.workspace }}/@(*.tar.xz|*.zip); do
echo " ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt
done
- name: Create Release
id: create_release
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844
with:
draft: false
prerelease: false
tag_name: ${{ steps.metadata.outputs.version }}
name: OBS Deps Build ${{ steps.metadata.outputs.version }}
body_path: ${{ github.workspace }}/CHECKSUMS.txt
files: |
${{ github.workspace }}/windows-*-x64*.zip
${{ github.workspace }}/windows-*-x86*.zip
${{ github.workspace }}/macos-*-arm64.tar.xz
${{ github.workspace }}/macos-*-x86_64.tar.xz
${{ github.workspace }}/macos-*-universal.tar.xz