name: Build and publish release on: push: branches: - main tags: - '*' workflow_dispatch: inputs: release_tag: description: 'GitHub Release tag to publish' required: true default: '0.7.3' source_ref: description: 'Source branch/tag/commit to compile' required: true default: 'main' permissions: contents: write env: ZIG_VERSION: '0.16.0' CUSTOM_WEIRDPERFORMANCE_TAG: '0.7.3' jobs: release: name: Build DLLs and publish release runs-on: ubuntu-latest steps: - name: Resolve build metadata shell: bash run: | set -euo pipefail if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then echo "RELEASE_TAG=${{ inputs.release_tag }}" >> "$GITHUB_ENV" echo "SOURCE_DESCRIPTION=${{ inputs.source_ref }}" >> "$GITHUB_ENV" elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then echo "RELEASE_TAG=${GITHUB_REF_NAME}" >> "$GITHUB_ENV" echo "SOURCE_DESCRIPTION=${GITHUB_REF_NAME}" >> "$GITHUB_ENV" else echo "RELEASE_TAG=dev" >> "$GITHUB_ENV" echo "SOURCE_DESCRIPTION=${GITHUB_SHA}" >> "$GITHUB_ENV" fi - name: Checkout source uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.source_ref || github.ref }} fetch-depth: 0 - name: Install Zig uses: mlugg/setup-zig@v2 with: version: ${{ env.ZIG_VERSION }} - name: Build public DLL variants shell: bash run: | set -euo pipefail zig build all-variants -Doptimize=ReleaseSmall \ -Dweirdperformance=false \ -Doutline=true \ -Dframecrash=true \ -Ddpslog=true - name: Collect release DLLs shell: bash run: | set -euo pipefail mkdir -p release dlls=( bigcursor.dll clickthrough.dll customassets.dll dpslog.dll framecrash.dll healtextfix.dll interact.dll logsessions.dll minimapicons.dll outline.dll pngscreenshots.dll transmogfix.dll worldmarkers.dll ) for dll in "${dlls[@]}"; do src="zig-out/variants/$dll" if [[ ! -s "$src" ]]; then echo "Missing expected DLL: $src" >&2 exit 1 fi cp "$src" "release/$dll" done - name: Add custom WeirdPerformance v0.7.3 shell: bash run: | set -euo pipefail api_url="https://codeberg.org/api/v1/repos/Dusk92/WeirdUtils/releases/tags/${CUSTOM_WEIRDPERFORMANCE_TAG}" release_json="$(curl --retry 3 --retry-all-errors -fsSL "$api_url")" download_url="$(printf '%s' "$release_json" | python3 -c ' import json, sys data = json.load(sys.stdin) for asset in data.get("assets", []): if asset.get("name", "").lower() == "weirdperformance.dll": print(asset.get("browser_download_url", "")) break ')" if [[ -z "$download_url" ]]; then echo "Could not find weirdperformance.dll in Codeberg release ${CUSTOM_WEIRDPERFORMANCE_TAG}" >&2 exit 1 fi curl --retry 3 --retry-all-errors -fsSL "$download_url" -o release/weirdperformance.dll python3 - <<'PY' from pathlib import Path p = Path('release/weirdperformance.dll') data = p.read_bytes() if len(data) < 1024 or data[:2] != b'MZ': raise SystemExit('Downloaded weirdperformance.dll is not a valid-looking Windows DLL') print(f'Custom WeirdPerformance: {len(data)} bytes, PE header OK') PY - name: Create checksums and ZIP shell: bash run: | set -euo pipefail ( cd release sha256sum *.dll > SHA256SUMS.txt ) zip -j "WeirdUtils-${RELEASE_TAG}.zip" release/*.dll release/SHA256SUMS.txt - name: Publish GitHub Release if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/') shell: bash env: GH_TOKEN: ${{ github.token }} run: | set -euo pipefail cat > release-notes.md </dev/null 2>&1; then echo "Release $RELEASE_TAG already exists; replacing assets." else gh release create "$RELEASE_TAG" \ --title "WeirdUtils ${RELEASE_TAG}" \ --notes-file release-notes.md fi gh release upload "$RELEASE_TAG" \ release/*.dll \ release/SHA256SUMS.txt \ "WeirdUtils-${RELEASE_TAG}.zip" \ --clobber