Unciv/.github/workflows/buildAndDeploy.yml
Yair Morgenstern 2add42b580 Split itch upload to separate job - test5
Need to setup gradle and git repo to actually run dist
In future maybe we can get rid of gradle dist entirely and just run packr directly, not today though
2023-03-07 22:14:18 +02:00

302 lines
12 KiB
YAML

# This is a basic workflow to help you get started with Actions
name: Build and deploy
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
tags:
- '*' # This doesn't mean that it HAS to have a tag, only that the workflow triggers when we push a tag
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# On push events only, if it's a "Update X" commit, it's probably something done through the UI -
# so an .md or yaml change, and not something we need to rebuild over
# We can't simply put !startsWith - see https://github.community/t/expression-syntax-for-not-startswith/17040
if: github.event_name != 'push' || startsWith(github.event.commits[0].message, 'Update ') != true
runs-on: ubuntu-latest
outputs:
version_tag: ${{ steps.tag.outputs.tag }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2.3.3
- name: Compile kotlin and build classes
run: ./gradlew classes
- name: Run code checks
run: ./gradlew check
- name: Run unit tests
run: ./gradlew --no-build-cache cleanTest test tests:test
# RELEASE
- name: Get release tag # We can then get the tag using ${{steps.tag.outputs.tag}} as below
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
id: tag
uses: dawidd6/action-get-tag@v1
- name: Read release.md and use it as a body of new release. This will fail for patch releases, since they have no readme.
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
id: read_release
shell: bash
run: |
## To test this in Windows PS: cat .\changelog.md | wsl grep -Pzo --color '\\#{2}.3.15.7[^\\#]*?\\#{2}' | wsl head -n -2
r=$(grep -Pzo '\#{2}.${{steps.tag.outputs.tag}}[^\#]*\#' changelog.md) # grep to get only our release
r=$(echo "$r" | head -n -2 | tail -n +3)
## See https://trstringer.com/github-actions-multiline-strings/
echo "--- Set variable manually in github env ---"
echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
echo "$r" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
## ANDROID
- name: Prepare .aab (for Google Play) and .apk (for Github) files
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
shell: bash
run: |
mkdir whatsNewDirectory
echo "${{ env.RELEASE_BODY }}" > whatsNewDirectory/whatsnew-en-US
./gradlew :android:bundleRelease
./gradlew :android:assembleRelease
- name: Sign AAB for Google Play upload
uses: r0adkll/sign-android-release@v1
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
with:
releaseDirectory: android/build/outputs/bundle/release
signingKeyBase64: ${{ secrets.BUNDLE_SIGNING_KEY_BASE64 }}
alias: ${{ secrets.BUNDLE_SIGNING_KEY_ALIAS }}
keyStorePassword: ${{ secrets.BUNDLE_SIGNING_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.BUNDLE_SIGNING_KEY_PASSWORD }}
- name: Upload AAB to google play
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
continue-on-error: true
uses: r0adkll/upload-google-play@v1.0.15
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.unciv.app
releaseFiles: android/build/outputs/bundle/release/Unciv-release.aab
track: production
userFraction: 0.1
whatsNewDirectory: whatsNewDirectory
- name: Sign APK for Github upload
uses: r0adkll/sign-android-release@v1
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
with:
releaseDirectory: android/build/outputs/apk/release
signingKeyBase64: ${{ secrets.BUNDLE_SIGNING_KEY_BASE64 }}
alias: ${{ secrets.BUNDLE_SIGNING_KEY_ALIAS }}
keyStorePassword: ${{ secrets.BUNDLE_SIGNING_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.BUNDLE_SIGNING_KEY_PASSWORD }}
- name: Move APK to deploy folder
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
shell: bash
run: |
mkdir deploy
ls android/build/outputs/apk/release
mv android/build/outputs/apk/release/Unciv-release-unsigned-signed.apk deploy/Unciv-signed.apk
- name: Upload APK
uses: actions/upload-artifact@v3
with:
name: APK
path: deploy/Unciv-signed.apk
## DESKTOP
- name: Build UncivServer.jar
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
run: |
./gradlew desktop:dist
# Copy JAR for final Github version deploy
cp desktop/build/libs/Unciv.jar deploy/Unciv.jar
- name: Upload JAR
uses: actions/upload-artifact@v3
with:
name: UncivJar
path: desktop/build/libs/Unciv.jar
## Server
- name: Build UncivServer.jar
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
run: |
./gradlew server:dist
mv server/build/libs/UncivServer.jar deploy/UncivServer.jar
## Finalize
- name: Upload binaries to Github release
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
continue-on-error: true
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: deploy/*
tag: ${{ github.ref }}
overwrite: true
file_glob: true
# <--- Use environment variables that was created earlier - see https://github.com/svenstaro/upload-release-action
# Single-quotes do not solve the multiline problem.
body: |
## ${{steps.tag.outputs.tag}}
${{ env.RELEASE_BODY }}
- name: Get AUR PKGBUILD
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
continue-on-error: true
run: |
curl --silent --output PKGBUILD 'https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=unciv-bin'
sed -E -e "s#(_pkgver=).*#\1${{steps.tag.outputs.tag}}#" -e "s#(pkgrel=).*#\10#" -i PKGBUILD
- name: Publish AUR package
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
continue-on-error: true
uses: Thyrum/github-actions-deploy-aur@master
with:
pkgname: unciv-bin
pkgbuild: ./PKGBUILD
commit_username: ${{ secrets.AUR_COMMIT_USERNAME }}
commit_email: ${{ secrets.AUR_COMMIT_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: |
Update to ${{steps.tag.outputs.tag}}
${{ env.RELEASE_BODY }}
ssh_keyscan_types: rsa,dsa,ecdsa,ed25519
updpkgsums: true
allow_empty_commits: false
- name: Post announcement on Discord
continue-on-error: true
## On patch releases, don't notify Discord
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') && env.RELEASE_BODY != ''
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: | # See https://discordjs.guide/miscellaneous/parsing-mention-arguments.html#how-discord-mentions-work
<@&663705024265715743>
*${{steps.tag.outputs.tag}} rolling out!*
${{ env.RELEASE_BODY }}
upload_to_itch:
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: build
steps:
- name: Download JAR
uses: actions/download-artifact@v3
# See 'Upload JAR' step in 'build' job
with:
name: UncivJar
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2.3.3
- name: Upload to itch.io
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
env:
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
run: |
wget -q -O butler.zip https://broth.itch.ovh/butler/linux-amd64/LATEST/archive/default
unzip butler.zip
chmod +x butler
wget -q -O packr-all-4.0.0.jar https://github.com/libgdx/packr/releases/download/4.0.0/packr-all-4.0.0.jar
wget -q -O jre-linux-64.tar.gz https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jre_x64_linux_hotspot_11.0.11_9.tar.gz
./gradlew desktop:packrLinux64
./butler push deploy/Unciv-Linux64.zip yairm210/unciv:Linux64 --userversion ${{needs.build.outputs.version_tag}}
./gradlew desktop:zipLinuxFilesForJar
# MacOS bundles correctly but does not run as intended, see https://github.com/yairm210/Unciv/issues/4970
# Disabled until this can be checked by sommeone who actually has a Mac computer
# wget -q -O jre-macOS.tar.gz https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jre_x64_mac_hotspot_11.0.11_9.tar.gz
# ./gradlew desktop:packrMacOS
# ./butler push deploy/Unciv-MacOS.zip yairm210/unciv:MacOS --userversion ${{needs.build.outputs.version_tag}}
wget -q -O jdk-windows-64.zip https://github.com/ojdkbuild/ojdkbuild/releases/download/java-1.8.0-openjdk-1.8.0.232-1.b09/java-1.8.0-openjdk-1.8.0.232-1.b09.ojdkbuild.windows.x86_64.zip
./gradlew desktop:packrWindows64
./butler push deploy/Unciv-Windows64.zip yairm210/unciv:Windows64 --userversion ${{needs.build.outputs.version_tag}}
- name: Unzip zips for steam deployment
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
shell: bash
run: |
mkdir steam
unzip deploy/Unciv-Windows64.zip -d steam/Unciv-Windows64
unzip deploy/Unciv-Linux64.zip -d steam/Unciv-Linux64
- name: Steam deploy
continue-on-error: true
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
uses: game-ci/steam-deploy@v1
with:
username: ${{ secrets.STEAM_USERNAME }}
password: ${{ secrets.STEAM_PASSWORD }}
configVdf: ${{ secrets.STEAM_CONFIG_VDF}}
ssfnFileName: ${{ secrets.STEAM_SSFN_FILE_NAME }}
ssfnFileContents: ${{ secrets.STEAM_SSFN_FILE_CONTENTS }}
appId: 2118950
buildDescription: ${{steps.tag.outputs.tag}}
rootPath: steam
depot1Path: Unciv-Windows64
depot2Path: Unciv-Linux64
releaseBranch: release