Repository navigation
Add GitHub Actions build and prerelease workflow #28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,139 @@ | ||
| name: Build | ||
|
|
||
| # Pushes build only on main; other branches are built through their pull request. | ||
| # This avoids duplicate runs: concurrency groups are per ref, and a push | ||
| # (refs/heads/x) and a pull_request (refs/pull/N/merge) never share a ref. | ||
| on: | ||
| push: | ||
| branches: [main] | ||
| paths-ignore: | ||
| - '**.md' | ||
| - 'LICENSE' | ||
| - '.github/ISSUE_TEMPLATE/**' | ||
| pull_request: | ||
| paths-ignore: | ||
| - '**.md' | ||
| - 'LICENSE' | ||
| - '.github/ISSUE_TEMPLATE/**' | ||
| workflow_dispatch: | ||
|
|
||
| # Least privilege by default; only the prerelease job elevates to contents: write. | ||
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| group: build-${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: false | ||
|
|
||
| jobs: | ||
| build: | ||
| name: VoodooHDA | ||
| runs-on: macos-15-intel | ||
| timeout-minutes: 45 | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | ||
| - name: Install MacKernelSDK | ||
| uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | ||
| with: | ||
| repository: acidanthera/MacKernelSDK | ||
| ref: 3f750085caa17ec3a7880f11c11bf4f48cd6a164 | ||
| path: MacKernelSDK | ||
| - name: Build VoodooHDA for macOS | ||
| env: | ||
| CONFIGURATION: Release | ||
| run: | | ||
| set -euo pipefail | ||
| mkdir -p logs | ||
| xcodebuild -project tranc/VoodooHDA_BS.xcodeproj -target VoodooHDA \ | ||
| -configuration "$CONFIGURATION" -jobs 3 ARCHS=x86_64 \ | ||
| SYMROOT="$PWD/build/products" OBJROOT="$PWD/build/obj" \ | ||
| CODE_SIGNING_ALLOWED=NO GIT_COMMIT="_$(git rev-parse --short HEAD)" \ | ||
| build > logs/VoodooHDA.log 2>&1 || { tail -100 logs/VoodooHDA.log; exit 1; } | ||
| - name: Package VoodooHDA kernel extension | ||
| env: | ||
| CONFIGURATION: Release | ||
| run: | | ||
| set -euo pipefail | ||
| mkdir -p artifacts | ||
| products="$PWD/build/products/$CONFIGURATION" | ||
| version=$(awk '/CURRENT_PROJECT_VERSION =/ {gsub(/;/, "", $3); print $3; exit}' tranc/VoodooHDA_BS.xcodeproj/project.pbxproj) | ||
| if [[ -z "$version" ]]; then | ||
| echo "::error::Could not determine CURRENT_PROJECT_VERSION from project.pbxproj" | ||
| exit 1 | ||
| fi | ||
| short_sha=$(git rev-parse --short HEAD) | ||
| configuration=$(printf '%s' "$CONFIGURATION" | tr '[:lower:]' '[:upper:]') | ||
| suffix="v$version-$configuration-alpha-$short_sha" | ||
| ditto -c -k --keepParent "$products/VoodooHDA.kext" "artifacts/VoodooHDA-$suffix.zip" | ||
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||
| with: | ||
| name: VoodooHDA | ||
| path: artifacts/VoodooHDA-*.zip | ||
| if-no-files-found: error | ||
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||
| if: always() | ||
| with: | ||
| name: build-logs | ||
| path: logs | ||
|
|
||
| prerelease: | ||
| name: Publish development build | ||
| needs: build | ||
| # Only publish from trusted triggers on main. Pull requests (including from | ||
| # forks) never reach this job, so untrusted code cannot get a write token. | ||
| if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 15 | ||
| permissions: | ||
| contents: write | ||
| steps: | ||
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | ||
| with: | ||
| # Keep in sync with `git log -5` in the release notes step below. | ||
| fetch-depth: 5 | ||
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | ||
| with: | ||
| name: VoodooHDA | ||
| path: artifacts | ||
| - name: Publish alpha artifacts | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| run: | | ||
| set -euo pipefail | ||
| version=$(awk '/CURRENT_PROJECT_VERSION =/ {gsub(/;/, "", $3); print $3; exit}' tranc/VoodooHDA_BS.xcodeproj/project.pbxproj) | ||
| if [[ -z "$version" ]]; then | ||
| echo "::error::Could not determine CURRENT_PROJECT_VERSION from project.pbxproj" | ||
| exit 1 | ||
| fi | ||
| tag="v${version}-alpha" | ||
| printf '%s\n\n' 'Development build. Hardware validation is required before daily use.' > ReleaseNotes.md | ||
| # -5 intentionally matches fetch-depth: 5 in the checkout step. | ||
| git log -5 --format='- %h %s' >> ReleaseNotes.md | ||
| if gh release view "$tag" --json isPrerelease > current-release.json 2>/dev/null; then | ||
| # Never replace a stable release with development artifacts. | ||
| jq -e '.isPrerelease == true' current-release.json > /dev/null | ||
| gh api --method PATCH "repos/$GITHUB_REPOSITORY/git/refs/tags/$tag" \ | ||
| -f sha="$GITHUB_SHA" -F force=true | ||
| gh release edit "$tag" --prerelease --notes-file ReleaseNotes.md | ||
| else | ||
| gh release create "$tag" --target "$GITHUB_SHA" --prerelease --title "$tag" --notes-file ReleaseNotes.md | ||
| fi | ||
| gh release upload "$tag" artifacts/VoodooHDA-*.zip --clobber | ||
|
|
||
| # Remove obsolete assets only after the replacement set has uploaded. | ||
| gh api "repos/$GITHUB_REPOSITORY/releases/tags/$tag" \ | ||
| --jq '.assets[] | [.id, .name] | @tsv' > release-assets.tsv | ||
| while IFS=$'\t' read -r asset_id asset_name; do | ||
| if [[ ! -f "artifacts/$asset_name" ]]; then | ||
| gh api --method DELETE "repos/$GITHUB_REPOSITORY/releases/assets/$asset_id" | ||
| fi | ||
| done < release-assets.tsv | ||
|
|
||
| # Keep exactly one prerelease; stable releases are retained. | ||
| gh api --paginate "repos/$GITHUB_REPOSITORY/releases" \ | ||
| --jq '.[] | select(.prerelease and (.draft | not)) | .tag_name' > prereleases.txt | ||
| while IFS= read -r old_tag; do | ||
| if [[ "$old_tag" != "$tag" ]]; then | ||
| gh release delete "$old_tag" --yes --cleanup-tag | ||
| fi | ||
| done < prereleases.txt | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.