mirror of
https://github.com/yairm210/Unciv.git
synced 2025-01-05 13:08:48 +07:00
365 lines
12 KiB
YAML
365 lines
12 KiB
YAML
# 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/upload-google-play@v1.1.3
|
|
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/action-discord@0.3.2
|
|
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
|