# 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@v3 - 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<> $GITHUB_OUTPUT echo "$r" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT build-jar: runs-on: ubuntu-latest needs: get-release-body steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: 17 - name: Setup Android SDK uses: android-actions/setup-android@v3 - name: Setup Gradle uses: gradle/gradle-build-action@v2.11.1 - 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@v3 with: name: UncivJar path: | desktop/build/libs/Unciv.jar - name: Upload linux files continue-on-error: true uses: actions/upload-artifact@v3 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@v3 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@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: 17 - name: Setup Android SDK uses: android-actions/setup-android@v3 - name: Setup Gradle uses: gradle/gradle-build-action@v2.11.1 - 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.2 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 userFraction: 0.1 status: inProgress 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@v3 with: name: UncivAPK path: Unciv-signed.apk packr-build: runs-on: ubuntu-latest needs: build-jar steps: - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: 17 - name: Setup Gradle uses: gradle/gradle-build-action@v2.11.1 - name: Download JAR uses: actions/download-artifact@v3 # 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 LINUX_JRE_URL=$(curl -fsSL 'https://api.adoptium.net/v3/assets/latest/11/hotspot?os=linux&architecture=x64&image_type=jre' | jq -r '.[].binary.package.link') wget -q -O jre-linux-64.tar.gz $LINUX_JRE_URL ./gradlew desktop:packrLinux64 WIN_JRE_URL=$(curl -fsSL 'https://api.adoptium.net/v3/assets/latest/11/hotspot?os=windows&architecture=x64&image_type=jre' | jq -r '.[].binary.package.link') wget -q -O jdk-windows-64.zip $WIN_JRE_URL ./gradlew desktop:packrWindows64 - name: Upload packed zips uses: actions/upload-artifact@v3 with: name: UncivDeploymentZips path: | deploy/Unciv-Windows64.zip deploy/Unciv-Linux64.zip upload-to-itch: runs-on: ubuntu-latest needs: [packr-build] continue-on-error: true steps: - name: Download packed zips uses: actions/download-artifact@v3 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] runs-on: ubuntu-latest steps: - name: Download all artifacts uses: actions/download-artifact@v3 - 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 - 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,dsa,ecdsa,ed25519 updpkgsums: true allow_empty_commits: false