Skip to content

Make itch.io username optional and drop itch related actions if not set #28

Make itch.io username optional and drop itch related actions if not set

Make itch.io username optional and drop itch related actions if not set #28

Workflow file for this run

name: Release
# Only trigger this workflow when a tag is pushed in the format `vA.B.C`.
on:
push:
# Syntax: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"
workflow_dispatch:
inputs:
version:
description: 'Version - in the form of v1.2.3'
required: true
type: string
# Configure constants for this workflow.
env:
# TODO: This may become unnecessary: https://github.com/rust-lang/cargo/issues/6790
# The base filename of the binary produced by `cargo build`.
BINARY: {{crate_name}}
# The name to use for the packaged application produced by this workflow.
PACKAGE_NAME: {{project-name}}
# The itch.io page to upload to, in the format: `user-name/project-name`.
# Comment this out to disable.
{%- if itch_username != "" -%}

Check failure on line 25 in .github/workflows/release.yaml

View workflow run for this annotation

GitHub Actions / .github/workflows/release.yaml

Invalid workflow file

You have an error in your yaml syntax on line 25
ITCH_TARGET: {{itch_username}}/{{project-name}}
{%- else -%}
#ITCH_TARGET: {{itch_username}}/{{project-name}}
{%- endif -%}
# The organization or author that owns the rights to the game.
OWNER: {{itch_username}}
# Whether packages produced by this workflow should be uploaded to the Github release.
UPLOAD_PACKAGES_TO_GITHUB_RELEASE: true
# Before enabling LFS, please take a look at GitHub's documentation for costs and quota limits:
# https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-storage-and-bandwidth-usage
USE_GIT_LFS: false
{%- raw -%}
jobs:
# Extract the version number from the pushed tag.
get-version:
runs-on: ubuntu-latest
steps:
- name: Get version number from tag
id: tag
run: |
echo "tag=${GITHUB_REF#refs/tags/}" >> "${GITHUB_OUTPUT}"
outputs:
version: ${{ inputs.version || steps.tag.outputs.tag }}
# Build for web.
build-for-web:
runs-on: ubuntu-latest
needs: get-version
env:
TARGET: wasm32-unknown-unknown
PROFILE: release
PLATFORM: web
VERSION: ${{ needs.get-version.outputs.version }}
steps:
- name: Set PACKAGE environment variable
run: |
echo "PACKAGE=${{ env.PACKAGE_NAME }}-${{ env.VERSION }}-${{ env.PLATFORM }}" >> "${GITHUB_ENV}"
- name: Set OUT_DIR environment variable
run: |
echo "OUT_DIR=build/${{ env.PACKAGE }}/${{ env.PACKAGE_NAME }}" >> "${GITHUB_ENV}"
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: ${{ env.USE_GIT_LFS }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ env.TARGET }}
- name: Cache target directory
uses: Leafwing-Studios/cargo-cache@v1
- name: Install cargo-binstall
uses: cargo-bins/[email protected]
- name: Install dependencies
run: |
cargo binstall trunk --no-confirm
- name: Prepare package
run: |
mkdir -p "${{ env.OUT_DIR }}"
trunk build --release --dist "${{ env.OUT_DIR }}"
- name: Compress package
working-directory: ./build/${{ env.PACKAGE }}
run: |
zip --recurse-paths "../${{ env.PACKAGE }}.zip" "${{ env.PACKAGE_NAME }}"
- name: Upload package to artifacts
uses: actions/upload-artifact@v4
with:
path: build/${{ env.PACKAGE }}.zip
name: ${{ env.PLATFORM }}
retention-days: 1
- name: Upload package to Github release
if: ${{ env.UPLOAD_PACKAGES_TO_GITHUB_RELEASE == 'true' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/${{ env.PACKAGE }}.zip
asset_name: ${{ env.PACKAGE }}.zip
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
# Build for Linux.
build-for-linux:
runs-on: ubuntu-latest
needs: get-version
env:
TARGET: x86_64-unknown-linux-gnu
PROFILE: release-native
PLATFORM: linux
VERSION: ${{ needs.get-version.outputs.version }}
steps:
- name: Set PACKAGE environment variable
run: |
echo "PACKAGE=${{ env.PACKAGE_NAME }}-${{ env.VERSION }}-${{ env.PLATFORM }}" >> "${GITHUB_ENV}"
- name: Set OUT_DIR environment variable
run: |
echo "OUT_DIR=build/${{ env.PACKAGE }}/${{ env.PACKAGE_NAME }}" >> "${GITHUB_ENV}"
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: ${{ env.USE_GIT_LFS }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ env.TARGET }}
- name: Cache target directory
uses: Leafwing-Studios/cargo-cache@v1
- name: Install dependencies
run: |
sudo apt-get update; sudo apt-get install libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
- name: Build binary
run: |
cargo build --profile="${{ env.PROFILE }}" --target="${{ env.TARGET }}" --no-default-features --features=bevy/wayland
- name: Prepare package
run: |
mkdir -p "${{ env.OUT_DIR }}"
cp "target/${{ env.TARGET }}/${{ env.PROFILE }}/${{ env.BINARY }}" "${{ env.OUT_DIR }}"
cp -r assets "${{ env.OUT_DIR }}" || true # Ignore error if `assets` folder does not exist
- name: Compress package
working-directory: ./build/${{ env.PACKAGE }}
run: |
zip --recurse-paths ../"${{ env.PACKAGE }}.zip" "${{ env.PACKAGE_NAME }}"
- name: Upload package to artifacts
uses: actions/upload-artifact@v4
with:
path: build/${{ env.PACKAGE }}.zip
name: ${{ env.PLATFORM }}
retention-days: 1
- name: Upload package to Github release
if: ${{ env.UPLOAD_PACKAGES_TO_GITHUB_RELEASE == 'true' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/${{ env.PACKAGE }}.zip
asset_name: ${{ env.PACKAGE }}.zip
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
# Build for Windows.
build-for-windows:
runs-on: windows-latest
needs: get-version
env:
TARGET: x86_64-pc-windows-msvc
PROFILE: release-native
PLATFORM: windows
VERSION: ${{ needs.get-version.outputs.version }}
steps:
- name: Set PACKAGE environment variable
run: |
"PACKAGE=${{ env.PACKAGE_NAME }}-${{ env.VERSION }}-${{ env.PLATFORM }}" | Out-File -FilePath "${Env:GITHUB_ENV}" -Append
- name: Set OUT_DIR environment variable
run: |
"OUT_DIR=build/${{ env.PACKAGE }}/${{ env.PACKAGE_NAME }}" | Out-File -FilePath "${Env:GITHUB_ENV}" -Append
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: ${{ env.USE_GIT_LFS }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ env.TARGET }}
- name: Cache target directory
uses: Leafwing-Studios/cargo-cache@v1
- name: Build binary
run: |
cargo build --profile="${{ env.PROFILE }}" --target="${{ env.TARGET }}" --no-default-features
- name: Prepare package
run: |
mkdir -p "${{ env.OUT_DIR }}"
cp "target/${{ env.TARGET }}/${{ env.PROFILE }}/${{ env.BINARY }}.exe" "${{ env.OUT_DIR }}"
cp -r assets "${{ env.OUT_DIR }}" || true # Ignore error if `assets` folder does not exist
- name: Compress package
working-directory: ./build/${{ env.PACKAGE }}
run: |
Compress-Archive -Path "${{ env.PACKAGE_NAME }}" -DestinationPath "../${{ env.PACKAGE }}.zip"
- name: Upload package to artifacts
uses: actions/upload-artifact@v4
with:
path: build/${{ env.PACKAGE }}.zip
name: ${{ env.PLATFORM }}
retention-days: 1
- name: Upload package to Github release
if: ${{ env.UPLOAD_PACKAGES_TO_GITHUB_RELEASE == 'true' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/${{ env.PACKAGE }}.zip
asset_name: ${{ env.PACKAGE }}.zip
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
# Build for MacOS x86_64 and Apple Silicon.
build-for-macos:
runs-on: macos-latest
needs: get-version
env:
# macOS 11.0 Big Sur is the first version to support universal binaries
MACOSX_DEPLOYMENT_TARGET: 11.0
PROFILE: release-native
PLATFORM: macos
VERSION: ${{ needs.get-version.outputs.version }}
steps:
- name: Set PACKAGE environment variable
run: |
echo "PACKAGE=${{ env.PACKAGE_NAME }}-${{ env.VERSION }}-${{ env.PLATFORM }}" >> "${GITHUB_ENV}"
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: ${{ env.USE_GIT_LFS }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Cache target directory
uses: Leafwing-Studios/cargo-cache@v1
- name: Build binary for Apple Silicon
run: |
SDKROOT="$(xcrun -sdk macosx --show-sdk-path)" cargo build --profile="${{ env.PROFILE }}" --no-default-features --target=aarch64-apple-darwin
- name: Install rust toolchain for Apple x86_64
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
targets: x86_64-apple-darwin
- name: Cache target directory
uses: Leafwing-Studios/cargo-cache@v1
- name: Build binary for Apple x86_64
run: |
SDKROOT="$(xcrun -sdk macosx --show-sdk-path)" cargo build --profile="${{ env.PROFILE }}" --no-default-features --target=x86_64-apple-darwin
- name: Create Universal Binary
run: |
lipo -create -output "target/${{ env.PROFILE }}/${{ env.BINARY }}" "target/aarch64-apple-darwin/${{ env.PROFILE }}/${{ env.BINARY }}" "target/x86_64-apple-darwin/${{ env.PROFILE }}/${{ env.BINARY }}"
- name: Prepare package
run: |
mkdir -p "build/${{ env.PACKAGE_NAME }}.app/Contents/MacOS/assets"
cat > "build/${{ env.PACKAGE_NAME }}.app/Contents/Info.plist" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${{ env.PACKAGE_NAME }}</string>
<key>CFBundleExecutable</key>
<string>${{ env.BINARY }}</string>
<key>CFBundleIdentifier</key>
<string>${{ env.OWNER }}.${{ env.PACKAGE_NAME}}</string>
<key>CFBundleName</key>
<string>${{ env.PACKAGE_NAME }}</string>
<key>CFBundleShortVersionString</key>
<string>${{ env.VERSION }}</string>
<key>CFBundleVersion</key>
<string>${{ env.VERSION }}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
</dict>
</plist>
EOF
cp -r assets/ "build/${{ env.PACKAGE_NAME }}.app/Contents/MacOS/assets"|| true # Ignore error if `assets` folder does not exist
cp "target/${{ env.PROFILE }}/${{ env.BINARY }}" "build/${{ env.PACKAGE_NAME }}.app/Contents/MacOS/"
ln -s /Applications build/
hdiutil create -fs HFS+ -volname "${{ env.PACKAGE_NAME }}" -srcfolder build "build/${{ env.PACKAGE }}.dmg"
- name: Upload package to artifacts
uses: actions/upload-artifact@v4
with:
path: build/${{ env.PACKAGE }}.dmg
name: ${{ env.PLATFORM }}
retention-days: 1
- name: Upload package to Github release
if: ${{ env.UPLOAD_PACKAGES_TO_GITHUB_RELEASE == 'true' }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: build/${{ env.PACKAGE }}.dmg
asset_name: ${{ env.PACKAGE }}.dmg
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
# Check if upload to itch.io is configured.
check-if-upload-to-itch-is-configured:
runs-on: ubuntu-latest
steps:
- name: Check ITCH_TARGET environment variable
id: check-env
run: |
if [[ -z "${ITCH_TARGET}" ]]; then
echo "has-itch-target=no" >> "${GITHUB_OUTPUT}"
else
echo "has-itch-target=yes" >> "${GITHUB_OUTPUT}"
fi
outputs:
should-upload: ${{ steps.check-env.outputs.has-itch-target }}
# Upload artifacts to itch.io.
upload-to-itch:
runs-on: ubuntu-latest
needs:
- get-version
- check-if-upload-to-itch-is-configured
- build-for-web
- build-for-linux
- build-for-windows
- build-for-macos
env:
VERSION: ${{ needs.get-version.outputs.version }}
if: ${{ needs.check-if-upload-to-itch-is-configured.outputs.should-upload == 'yes' }}
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: ./builds
- name: Install butler
run: |
curl -L -o butler.zip https://broth.itch.ovh/butler/linux-amd64/LATEST/archive/default
unzip butler.zip
chmod +x butler
./butler -V
- name: Upload artifacts to itch.io
env:
BUTLER_API_KEY: ${{ secrets.BUTLER_CREDENTIALS }}
run: |
for channel in $(ls builds); do
./butler push \
--fix-permissions \
--userversion="${{ env.VERSION }}" \
builds/"${channel}"/* \
${{ env.ITCH_TARGET }}:"${channel}"
done
{%- endraw -%}