Skip to content

release-flow

release-flow #3

Workflow file for this run

name: release-flow
on:
push:
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
env:
# heads-up: this value is used as a pattern in an sed command as a workaround for a trunk issue
# if you use special characters, take a look at the 'Make paths relative' step in the 'build-web' job
GAME_EXECUTABLE_NAME: voxel_vegetables
GAME_OSX_APP_NAME: VoxelVegetables
permissions:
contents: write
jobs:
get-version:
runs-on: ubuntu-latest
steps:
- name: Get tag
id: tag
run: echo "tag=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
outputs:
version: ${{ inputs.version || steps.tag.outputs.tag }}
build-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
VERSION: ${{needs.get-version.outputs.version}}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Remove build script
run: |
rm build.rs
- name: Install rust toolchain for Apple Silicon
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: aarch64-apple-darwin
- name: Build release for Apple Silicon
run: |
# SDKROOT=$(xcrun -sdk macosx --show-sdk-path) cargo build --release --target=aarch64-apple-darwin
SDKROOT=$(xcrun -sdk macosx --show-sdk-path) cargo build --target=aarch64-apple-darwin
- name: Install rust toolchain for Apple x86
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: x86_64-apple-darwin
- name: Build release for x86 Apple
run: |
# SDKROOT=$(xcrun -sdk macosx --show-sdk-path) cargo build --release --target=x86_64-apple-darwin
SDKROOT=$(xcrun -sdk macosx --show-sdk-path) cargo build --target=x86_64-apple-darwin
- name: Create Universal Binary
run: |
# lipo -create -output target/release/${{ env.GAME_EXECUTABLE_NAME }} target/aarch64-apple-darwin/release/${{ env.GAME_EXECUTABLE_NAME }} target/x86_64-apple-darwin/release/${{ env.GAME_EXECUTABLE_NAME }}
lipo -create -output target/debug/${{ env.GAME_EXECUTABLE_NAME }} target/aarch64-apple-darwin/debug/${{ env.GAME_EXECUTABLE_NAME }} target/x86_64-apple-darwin/debug/${{ env.GAME_EXECUTABLE_NAME }}
- name: Create release
run: |
mkdir -p build/macos/src/Game.app/Contents/MacOS/assets
cp -r assets/ build/macos/src/Game.app/Contents/MacOS/assets
cp -r credits/ build/macos/src/Game.app/Contents/MacOS/credits
# cp target/release/${{ env.GAME_EXECUTABLE_NAME }} build/macos/src/Game.app/Contents/MacOS/
cp target/debug/${{ env.GAME_EXECUTABLE_NAME }} build/macos/src/Game.app/Contents/MacOS/
strip build/macos/src/Game.app/Contents/MacOS/${{ env.GAME_EXECUTABLE_NAME }}
mv build/macos/src/Game.app build/macos/src/${{ env.GAME_OSX_APP_NAME }}.app
ln -s /Applications build/macos/src/
hdiutil create -fs HFS+ -volname "${{ env.GAME_OSX_APP_NAME }}" -srcfolder build/macos/src ${{ env.GAME_EXECUTABLE_NAME }}.dmg
- name: Upload release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.GAME_EXECUTABLE_NAME }}.dmg
asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_macOS.dmg
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
build-linux:
runs-on: ubuntu-latest
needs: get-version
env:
VERSION: ${{needs.get-version.outputs.version}}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev
- name: Build release
run: |
# cargo build --release
cargo build
- name: Prepare release
run: |
# strip target/release/${{ env.GAME_EXECUTABLE_NAME }}
# chmod +x target/release/${{ env.GAME_EXECUTABLE_NAME }}
# mv target/release/${{ env.GAME_EXECUTABLE_NAME }} .
strip target/debug/${{ env.GAME_EXECUTABLE_NAME }}
chmod +x target/debug/${{ env.GAME_EXECUTABLE_NAME }}
mv target/debug/${{ env.GAME_EXECUTABLE_NAME }} .
- name: Bundle release
run: |
tar -czf ${{ env.GAME_EXECUTABLE_NAME }}_linux.tar.gz ${{ env.GAME_EXECUTABLE_NAME }} assets credits
- name: Upload release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.GAME_EXECUTABLE_NAME }}_linux.tar.gz
asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_linux.tar.gz
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
build-windows:
runs-on: windows-latest
needs: get-version
env:
VERSION: ${{needs.get-version.outputs.version}}
BUILD_INSTALLER: false
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Install dotnet
if: ${{ env.BUILD_INSTALLER }}
uses: actions/setup-dotnet@v3
with:
global-json-file: build/windows/installer/global.json
- name: Build release
run: |
# cargo build --release
cargo build
- name: Prepare release
run: |
# mkdir target/release/assets && cp -r assets target/release/assets
# mkdir target/release/credits && cp -r credits target/release/credits
mkdir target/debug/assets && cp -r assets target/debug/assets
mkdir target/debug/credits && cp -r credits target/debug/credits
- name: Zip release
uses: vimtor/action-zip@v1
with:
# files: target/release/assets/ target/release/credits/ target/release/${{ env.GAME_EXECUTABLE_NAME }}.exe
files: target/debug/assets/ target/debug/credits/ target/debug/${{ env.GAME_EXECUTABLE_NAME }}.exe
dest: ${{ env.GAME_EXECUTABLE_NAME }}_windows.zip
- name: Create Installer
if: ${{ env.BUILD_INSTALLER }}
run: dotnet build -p:Version=1.2.3 -c Release build/windows/installer/Installer.wixproj --output installer
- name: Upload release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.GAME_EXECUTABLE_NAME }}_windows.zip
asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_windows.zip
tag: ${{ github.ref }}
overwrite: true
- name: Upload installer
if: ${{ env.BUILD_INSTALLER }}
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: installer/en-US/installer.msi
asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ steps.tag.outputs.tag }}_windows.msi
release_name: ${{ env.VERSION }}
tag: ${{ env.VERSION }}
overwrite: true
# build-web:
# runs-on: ubuntu-latest
# needs: get-version
# env:
# VERSION: ${{needs.get-version.outputs.version}}
# steps:
# - name: Checkout repository
# uses: actions/checkout@v3
# - name: Install rust toolchain
# uses: dtolnay/rust-toolchain@master
# with:
# toolchain: stable
# - name: Install Dependencies
# run: sudo apt-get update; sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev
# - name: Install trunk
# uses: jetli/trunk-action@v0.1.0
# with:
# version: latest
# - name: Add wasm target
# run: |
# rustup target add wasm32-unknown-unknown
# - name: Build Release
# run: |
# trunk build --release
# - name: Optimize Wasm
# uses: NiklasEi/wasm-opt-action@v2
# with:
# file: dist/*.wasm
# # Trunk cannot import assets from relative paths (see e.g. https://github.com/thedodd/trunk/issues/395)
# # On sites like itch.io, we don't know on which base path the game gets served, so we need to rewrite all links to be relative
# - name: Make paths relative
# run: |
# sed -i 's/\/index/.\/index/g' dist/index.html
# sed -i 's/\/${{ env.GAME_EXECUTABLE_NAME }}/.\/${{ env.GAME_EXECUTABLE_NAME }}/g' dist/index.html
# - name: Zip release
# uses: vimtor/action-zip@v1
# with:
# files: dist/
# dest: ${{ env.GAME_EXECUTABLE_NAME }}_web.zip
# - name: Upload release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: ${{ env.GAME_EXECUTABLE_NAME }}_web.zip
# asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_web.zip
# release_name: ${{ env.VERSION }}
# tag: ${{ env.VERSION }}
# overwrite: true
# build-for-iOS:
# runs-on: macos-latest
# timeout-minutes: 30
# needs: get-version
# env:
# VERSION: ${{needs.get-version.outputs.version}}
# steps:
# - uses: actions/checkout@v3
# - uses: dtolnay/rust-toolchain@stable
# - name: Add iOS targets
# run: rustup target add aarch64-apple-ios x86_64-apple-ios
# - name: Build app for iOS
# run: |
# cd mobile
# make xcodebuild-iphone-release
# mkdir Payload
# mv build/Build/Products/Release-iphoneos/*.app Payload
# zip -r ${{ env.GAME_EXECUTABLE_NAME }}.zip Payload
# mv ${{ env.GAME_EXECUTABLE_NAME }}.zip ${{ env.GAME_EXECUTABLE_NAME }}.ipa
# - name: Upload release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: mobile/${{ env.GAME_EXECUTABLE_NAME }}.ipa
# asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_unsigned_ios.ipa
# release_name: ${{ env.VERSION }}
# tag: ${{ env.VERSION }}
# overwrite: true
# build-for-Android:
# runs-on: ubuntu-latest
# timeout-minutes: 30
# needs: get-version
# env:
# VERSION: ${{needs.get-version.outputs.version}}
# steps:
# - uses: actions/checkout@v3
# - uses: dtolnay/rust-toolchain@stable
# - name: Add Android targets
# # could add more targets like armv7-linux-androideabi here (then also add to cargo-apk config)
# run: rustup target add aarch64-linux-android
# - name: Install Cargo APK
# run: cargo install --force cargo-apk
# - name: Build app for Android
# run: ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME cargo apk build --package mobile
# env:
# # This will reduce the APK size from 1GB to ~200MB
# CARGO_PROFILE_DEV_DEBUG: false
# - name: Upload release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: target/debug/apk/${{ env.GAME_OSX_APP_NAME }}.apk
# asset_name: ${{ env.GAME_EXECUTABLE_NAME }}_${{ env.VERSION }}_android.apk
# release_name: ${{ env.VERSION }}
# tag: ${{ env.VERSION }}
# overwrite: true