Skip to content

4.14.6

4.14.6 #11701

Workflow file for this run

# This is a basic workflow to help you get started with Actions
name: 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
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
get-release-body:
runs-on: ubuntu-latest
outputs:
release_body: ${{ steps.read_release.outputs.release_body }}
steps:
- uses: actions/checkout@v4
- 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
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}.${{ github.ref_name }}[^\#]*\#' changelog.md) # grep to get only our release
# We replace all quotes in the readme with single quotes, so the whatsnew directory echo doesn't crash us
r=$(echo "$r" | tr '"' "'" | 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_OUTPUT
echo "$r" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
build-jar:
runs-on: ubuntu-latest
needs: get-release-body
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- 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
- name: build UncivServer.jar
continue-on-error: true
run: |
./gradlew desktop:dist
./gradlew desktop:zipLinuxFilesForJar
- name: Upload JAR
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: UncivJar
path: |
desktop/build/libs/Unciv.jar
- name: Upload linux files
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: UncivLinuxFiles
path: |
deploy/linuxFilesForJar.zip
- name: build UncivServer.jar
continue-on-error: true
run: |
./gradlew server:dist
- name: Upload Server
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: UncivServer
path: server/build/libs/UncivServer.jar
android-build:
continue-on-error: true
runs-on: ubuntu-latest
needs: get-release-body
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Prepare .aab (for Google Play) and .apk (for Github) files
shell: bash
run: |
mkdir whatsNewDirectory
echo "${{needs.get-release-body.outputs.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
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
uses: r0adkll/[email protected]
continue-on-error: true
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.unciv.app
releaseFiles: android/build/outputs/bundle/release/Unciv-release.aab
track: production
whatsNewDirectory: whatsNewDirectory
- name: Sign APK for Github upload
uses: r0adkll/sign-android-release@v1
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 }}
env:
BUILD_TOOLS_VERSION: "34.0.0"
- name: Move APK to deploy folder
shell: bash
run: |
mv android/build/outputs/apk/release/Unciv-release-unsigned-signed.apk Unciv-signed.apk
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: UncivAPK
path: Unciv-signed.apk
packr-build:
runs-on: ubuntu-latest
needs: build-jar
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Download JAR
uses: actions/download-artifact@v4
# See 'Upload JAR' step in 'build' job
with:
name: UncivJar
- name: Display structure of downloaded files
run: ls -R
- name: Packr build
run: |
mkdir -p desktop/build/libs
mv Unciv.jar desktop/build/libs
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://api.adoptium.net/v3/binary/latest/21/ga/linux/x64/jre/hotspot/normal/eclipse
./gradlew desktop:packrLinux64
wget -q -O jdk-windows-64.zip https://api.adoptium.net/v3/binary/latest/21/ga/windows/x64/jre/hotspot/normal/eclipse
./gradlew desktop:packrWindows64
- name: Upload packed zips
uses: actions/upload-artifact@v4
with:
name: UncivDeploymentZips
path: |
deploy/Unciv-Windows64.zip
deploy/Unciv-Linux64.zip
build-msi:
needs: packr-build
runs-on: windows-latest
steps:
- uses: actions/checkout@v4 # For the icon
- name: Download packed zips
uses: actions/download-artifact@v4
with:
name: UncivDeploymentZips
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Unzip unciv file
run: |
mkdir .github/workflows/wix-msi-files
tar -xf Unciv-Windows64.zip -C .github/workflows/wix-msi-files
dir .github/workflows/wix-msi-files
- name: Install WiX
run: dotnet tool install --global wix
- name: Build WiX on Windows
shell: bash
run: |
UNCIV_VERSION=${{ github.ref_name }} wix build .github/workflows/unciv.wxs
- name: Show folders
run: |
dir
dir .github/workflows/wix-msi-files
- name: Upload MSI
uses: actions/upload-artifact@v4
with:
name: Unciv-MSI
path: .github/workflows/Unciv.msi
if-no-files-found: error
upload-to-itch:
runs-on: ubuntu-latest
needs: [packr-build]
continue-on-error: true
steps:
- name: Download packed zips
uses: actions/download-artifact@v4
with:
name: UncivDeploymentZips
- name: Upload to itch.io
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
./butler push Unciv-Linux64.zip yairm210/unciv:Linux64 --userversion ${{ github.ref_name }}
./butler push Unciv-Windows64.zip yairm210/unciv:Windows64 --userversion ${{ github.ref_name }}
upload-github-release-and-post-to-discord:
needs: [get-release-body, android-build, packr-build, build-msi]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
- name: consolidate deploy folder
run: |
mkdir deploy
mv UncivJar/Unciv.jar deploy
mv UncivLinuxFiles/linuxFilesForJar.zip deploy
mv UncivDeploymentZips/Unciv-Windows64.zip deploy
mv UncivDeploymentZips/Unciv-Linux64.zip deploy
mv UncivAPK/Unciv-signed.apk deploy
mv UncivServer/UncivServer.jar deploy
mv Unciv-MSI/Unciv.msi deploy
- name: Check if this is a real release or a test version, for Github release
id: check-version-tag
run: |
if [[ ${{ github.ref_name }} =~ [0-9]\.[0-9]+\.[0-9]+ ]]; then
echo "real_release=true" >> $GITHUB_OUTPUT
fi
- name: Upload binaries to Github release
continue-on-error: true
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: deploy/*
tag: ${{ github.ref }}
prerelease: ${{ steps.check-version-tag.outputs.real_release != 'true' }}
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: |
## ${{ github.ref_name }}
${{needs.get-release-body.outputs.release_body}}
- name: Post announcement on Discord
continue-on-error: true
## On patch releases, don't notify Discord
if: needs.get-release-body.outputs.release_body != ''
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/[email protected]
with:
args: | # See https://discordjs.guide/miscellaneous/parsing-mention-arguments.html#how-discord-mentions-work
<@&663705024265715743>
*${{ github.ref_name }} rolling out!*
${{needs.get-release-body.outputs.release_body}}
AUR-update:
continue-on-error: true
runs-on: ubuntu-latest
needs: [get-release-body, upload-github-release-and-post-to-discord]
steps:
- name: Get AUR PKGBUILD
run: |
curl --silent --output PKGBUILD 'https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=unciv-bin'
sed -E -e "s#(_pkgver=).*#\1${{ github.ref_name }}#" -e "s#(pkgrel=).*#\10#" -i PKGBUILD
- name: Publish AUR package
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 ${{ github.ref_name }}
${{needs.get-release-body.outputs.release_body}}
ssh_keyscan_types: rsa
updpkgsums: true
allow_empty_commits: false