Skip to content

Add uthash

Add uthash #126

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@v3
- 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-build:
name: 'Build FFmpeg'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
target: [macos-arm64, macos-x86_64, linux-x86_64, windows-x64, windows-x86]
include:
- target: macos-arm64
os: 'macos-13'
config: 'Release'
type: 'static'
revision: 9
- target: macos-x86_64
os: 'macos-13'
config: 'Release'
type: 'static'
revision: 9
- target: linux-x86_64
os: 'ubuntu-22.04'
config: 'Release'
type: 'static'
revision: 9
- target: windows-x64
os: 'ubuntu-22.04'
config: 'Release'
type: 'static'
revision: 8
- target: windows-x86
os: 'ubuntu-22.04'
config: 'Release'
type: 'static'
revision: 8
env:
CACHE_REVISION: ${{ matrix.revision }}
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Environment
id: setup
run: |
case "${{ runner.os }}" in
Linux)
sudo apt update
sudo apt install zsh
;;
macOS)
to_remove=()
for formula in llvm gcc postgresql openjdk sox libsndfile flac libvorbis opusfile \
libogg composer php gd freetype fontconfig webp libpng lame libtiff opus kotlin \
sbt libxft libxcb; do
if [[ -d /usr/local/opt/"${formula}" ]]; then
to_remove+=(${formula})
fi
done
if [[ ${#to_remove} -gt 0 ]]; then
brew uninstall --ignore-dependencies ${to_remove[@]}
fi
;;
esac
target='${{ matrix.target }}'
artifact_name="ffmpeg-${target}-${{ github.sha }}"
file_name="${target%%-*}-ffmpeg-$(date +"%Y-%m-%d")-${target##*-}.tar.xz"
dsym_artifact_name="ffmpeg-${target}-dSYMs-${{ github.sha }}"
dsym_file_name="${target%%-*}-ffmpeg-$(date +"%Y-%m-%d")-${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 +"%Y-%m-%d")" >> $GITHUB_OUTPUT
- name: Restore Compilation Cache
id: ccache-cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.target }}-ccache-ffmpeg-${{ steps.setup.outputs.ccacheDate }}
restore-keys: |
${{ matrix.target }}-ccache-ffmpeg-
- name: Check for GitHub Labels
id: seekingTesters
if: ${{ github.event_name == 'pull_request' }}
run: |
if [[ -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')" ]]; then
echo "found=true" >> $GITHUB_OUTPUT
else
echo "found=false" >> $GITHUB_OUTPUT
fi
- name: Build FFmpeg
uses: ./.github/actions/build-ffmpeg
with:
target: ${{ matrix.target }}
type: ${{ matrix.type }}
config: ${{ matrix.config }}
cacheRevision: ${{ env.CACHE_REVISION }}
- name: Publish Build Artifacts
if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
uses: actions/upload-artifact@v3
with:
name: ${{ steps.setup.outputs.artifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.artifactFileName }}
- name: Publish Debug Symbol Artifacts
if: ${{ startsWith(matrix.os, 'macos') && success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
uses: actions/upload-artifact@v3
with:
name: ${{ steps.setup.outputs.dsymArtifactName }}
path: ${{ github.workspace }}/${{ matrix.target }}/${{ steps.setup.outputs.dsymArtifactFileName }}
ffmpeg-package-universal:
name: 'Build FFmpeg (Universal)'
runs-on: macos-13
needs: [ffmpeg-build]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Check for GitHub Labels
id: seekingTesters
if: ${{ github.event_name == 'pull_request' }}
run: |
if [[ -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')" ]]; then
echo "found=true" >> $GITHUB_OUTPUT
else
echo "found=false" >> $GITHUB_OUTPUT
fi
- name: Create universal binary package
if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
uses: ./.github/actions/create-universal
with:
arm64: 'ffmpeg-macos-arm64-${{ github.sha }}'
x86_64: 'ffmpeg-macos-x86_64-${{ github.sha }}'
outputName: 'ffmpeg-macos-universal-${{ github.sha }}'
- name: Create universal dSYM package
if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
uses: ./.github/actions/create-universal
with:
arm64: 'ffmpeg-macos-arm64-dSYMs-${{ github.sha }}'
x86_64: 'ffmpeg-macos-x86_64-dSYMs-${{ github.sha }}'
outputName: 'ffmpeg-macos-universal-dSYMs-${{ github.sha }}'
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@v3
- 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@v3
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@v3
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@v3
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@v3
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@v3
- 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@v3
- 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@v3
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@v3
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@v3
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@v3
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@v3
- 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@v3
- 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 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@v3
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@v3
- 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@v3
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@v3
- 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, 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@v3
- 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 ${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 Linux dependencies'
run: |
shopt -s extglob
for arch in x86_64; do
_temp=$(mktemp -d)
pushd "${_temp}" > /dev/null
for artifact in ${{ github.workspace }}/**/linux-*-${arch}.*; do
case ${artifact} in
*.zip) unzip ${artifact} > /dev/null ;;
*.tar.xz) XZ_OPT=-T0 tar -xvJf ${artifact} ;;
*.tar.gz) tar -xvzf ${artifact} ;;
esac
done
XZ_OPT=-T0 tar -cvJf linux-deps-${{ steps.metadata.outputs.version }}-${arch}.tar.xz -- *
mv linux-deps-${{ steps.metadata.outputs.version }}-${arch}.tar.xz ${{ 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 ${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@1e07f4398721186383de40550babbdf2b84acfc5
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
${{ github.workspace }}/linux-*-x86_64.tar.xz