Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
- name: Verify universal release packaging
run: |
./scripts/build_release.sh
(cd dist && shasum -a 256 --check SHA256SUMS.txt)
(cd dist && shasum -a 256 --check Cineleaf-0.3.0-macOS-SHA256SUMS.txt)
hdiutil verify dist/Cineleaf-0.3.0-macOS.dmg
ARCHITECTURES="$(lipo -archs dist/Cineleaf.app/Contents/MacOS/Cineleaf)"
[[ "$ARCHITECTURES" == *arm64* && "$ARCHITECTURES" == *x86_64* ]]
Expand Down
125 changes: 125 additions & 0 deletions .github/workflows/release-packages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Publish release packages

on:
workflow_dispatch:
inputs:
tag:
description: Existing GitHub release tag
required: true
default: v0.3.0-beta.2
type: string
platform:
description: Packages to build and attach
required: true
default: all
type: choice
options:
- all
- macos
- windows

permissions:
contents: write

concurrency:
group: cineleaf-release-${{ inputs.tag }}-${{ inputs.platform }}
cancel-in-progress: false

jobs:
validate-release:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.validate.outputs.version }}
steps:
- name: Validate tag and existing release
id: validate
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
[[ "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]
gh release view "$RELEASE_TAG" >/dev/null
VERSION="${RELEASE_TAG#v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

macos-package:
if: inputs.platform == 'all' || inputs.platform == 'macos'
needs: validate-release
runs-on: macos-15
timeout-minutes: 45
steps:
- name: Check out the released source
uses: actions/checkout@v7
with:
ref: ${{ inputs.tag }}
- name: Select Xcode 16.4
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
- name: Install XcodeGen
run: brew install xcodegen
- name: Build and verify universal Mac package
env:
CINELEAF_RELEASE_VERSION: ${{ needs.validate-release.outputs.version }}
run: |
set -euo pipefail
./scripts/build_release.sh
PREFIX="Cineleaf-$CINELEAF_RELEASE_VERSION-macOS"
(cd dist && shasum -a 256 --check "$PREFIX-SHA256SUMS.txt")
hdiutil verify "dist/$PREFIX.dmg"
ARCHITECTURES="$(lipo -archs dist/Cineleaf.app/Contents/MacOS/Cineleaf)"
[[ "$ARCHITECTURES" == *arm64* && "$ARCHITECTURES" == *x86_64* ]]
- name: Attach Mac downloads to the release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ inputs.tag }}
MAC_VERSION: ${{ needs.validate-release.outputs.version }}
run: |
set -euo pipefail
PREFIX="Cineleaf-$MAC_VERSION-macOS"
gh release upload "$RELEASE_TAG" \
"dist/$PREFIX.dmg" \
"dist/$PREFIX.zip" \
"dist/$PREFIX-SHA256SUMS.txt" \
--clobber

windows-package:
if: inputs.platform == 'all' || inputs.platform == 'windows'
needs: validate-release
runs-on: windows-2025
timeout-minutes: 50
steps:
- name: Check out the released source
uses: actions/checkout@v7
with:
ref: ${{ inputs.tag }}
- name: Set up .NET 10 SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Install installer compiler
shell: pwsh
run: choco install innosetup --yes --no-progress
- name: Build and verify Windows packages
shell: pwsh
env:
RELEASE_VERSION: ${{ needs.validate-release.outputs.version }}
run: ./scripts/build_windows_release.ps1 -ReleaseVersion $env:RELEASE_VERSION
- name: Attach Windows downloads to the release
shell: pwsh
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_TAG: ${{ inputs.tag }}
RELEASE_VERSION: ${{ needs.validate-release.outputs.version }}
run: |
$assets = Get-ChildItem -LiteralPath dist -File | Where-Object { $_.Name -like "Cineleaf-$env:RELEASE_VERSION-Windows-*" }
if ($assets.Count -ne 3) {
throw "Expected three Windows release files, found $($assets.Count)."
}
$arguments = @("release", "upload", $env:RELEASE_TAG) + @($assets.FullName) + "--clobber"
& gh @arguments
if ($LASTEXITCODE -ne 0) {
throw "Uploading Windows release files failed."
}
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ All notable changes are recorded here. Cineleaf follows semantic versioning afte

## Unreleased

## 0.3.0-beta.2 — 2026-07-27

### Distribution and documentation

- Added one reproducible GitHub Release workflow that builds, verifies and attaches both Windows and universal Mac packages.
- Added direct, plain-language Windows and Mac download instructions to the English base README.
- Versioned Mac DMG, ZIP and checksum names now match their GitHub release tag; the DMG volume also shows the correct release version.
- Kept the private `instructions.md` build brief ignored and guarded by both CI systems.

## 0.3.0-beta.1 — 2026-07-27

### Added
Expand Down
Loading
Loading