name: CI on: push: branches: [main, experimental, patch-release] pull_request: branches: [main, experimental, patch-release] jobs: export-windows: name: Export Windows runs-on: ubuntu-latest env: ACTIONS_STEP_DEBUG: true timeout-minutes: 45 steps: - name: Setup SSH config for Gitea run: | echo -e "Host gitea\n HostName 100.79.174.108\n Port 222\n StrictHostKeyChecking no" >> /etc/ssh/ssh_config - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 ssh-key: ${{ secrets.TEKTON_SSH_KEY }} ssh-strict: false - name: Setup Godot run: | wget -q https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_linux.x86_64.zip unzip -q Godot_v4.6-stable_linux.x86_64.zip mv Godot_v4.6-stable_linux.x86_64 /usr/local/bin/godot chmod +x /usr/local/bin/godot - name: Install export templates run: | set -euo pipefail mkdir -v -p ~/.local/share/godot/export_templates/4.6.stable wget -nv https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_export_templates.tpz -O /tmp/godot-templates.tpz unzip -o -q /tmp/godot-templates.tpz -d /tmp/godot-templates if [ -d /tmp/godot-templates/templates ]; then mv /tmp/godot-templates/templates/* ~/.local/share/godot/export_templates/4.6.stable/ else cp -a /tmp/godot-templates/* ~/.local/share/godot/export_templates/4.6.stable/ 2>/dev/null || true fi ls -la ~/.local/share/godot/export_templates/4.6.stable || true - name: Export Windows run: | mkdir -p build godot --headless --export-release "Windows Desktop" build/tekton_armageddon_windows.exe - name: Upload Windows artifact uses: actions/upload-artifact@v4 with: name: tekton-windows path: build/tekton_armageddon_windows.exe retention-days: 7 export-linux: name: Export Linux runs-on: ubuntu-latest timeout-minutes: 45 steps: - name: Setup SSH config for Gitea run: | echo -e "Host gitea\n HostName 100.79.174.108\n Port 222\n StrictHostKeyChecking no" >> /etc/ssh/ssh_config - name: Checkout repository uses: actions/checkout@v4 with: ssh-key: ${{ secrets.TEKTON_SSH_KEY }} ssh-strict: false - name: Setup Godot run: | wget -q https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_linux.x86_64.zip unzip -q Godot_v4.6-stable_linux.x86_64.zip mv Godot_v4.6-stable_linux.x86_64 /usr/local/bin/godot chmod +x /usr/local/bin/godot - name: Install export templates run: | set -euo pipefail mkdir -v -p ~/.local/share/godot/export_templates/4.6.stable wget -nv https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_export_templates.tpz -O /tmp/godot-templates.tpz unzip -o -q /tmp/godot-templates.tpz -d /tmp/godot-templates if [ -d /tmp/godot-templates/templates ]; then mv /tmp/godot-templates/templates/* ~/.local/share/godot/export_templates/4.6.stable/ else cp -a /tmp/godot-templates/* ~/.local/share/godot/export_templates/4.6.stable/ 2>/dev/null || true fi ls -la ~/.local/share/godot/export_templates/4.6.stable || true - name: Export Linux run: | mkdir -p build godot --headless --export-release "Linux/X11" build/tekton_armageddon_linux.x86_64 - name: Upload Linux artifact uses: actions/upload-artifact@v4 with: name: tekton-linux path: build/tekton_armageddon_linux.x86_64 retention-days: 7 export-android: name: Export Android runs-on: ubuntu-latest timeout-minutes: 60 steps: - name: Setup SSH config for Gitea run: | echo -e "Host gitea\n HostName 100.79.174.108\n Port 222\n StrictHostKeyChecking no" >> /etc/ssh/ssh_config - name: Checkout repository uses: actions/checkout@v4 with: ssh-key: ${{ secrets.TEKTON_SSH_KEY }} ssh-strict: false - name: Setup Godot run: | wget -q https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_linux.x86_64.zip unzip -q Godot_v4.6-stable_linux.x86_64.zip mv Godot_v4.6-stable_linux.x86_64 /usr/local/bin/godot chmod +x /usr/local/bin/godot - name: Install export templates run: | set -euo pipefail mkdir -v -p ~/.local/share/godot/export_templates/4.6.stable wget -nv https://github.com/godotengine/godot-builds/releases/download/4.6-stable/Godot_v4.6-stable_export_templates.tpz -O /tmp/godot-templates.tpz unzip -o -q /tmp/godot-templates.tpz -d /tmp/godot-templates if [ -d /tmp/godot-templates/templates ]; then mv /tmp/godot-templates/templates/* ~/.local/share/godot/export_templates/4.6.stable/ else cp -a /tmp/godot-templates/* ~/.local/share/godot/export_templates/4.6.stable/ 2>/dev/null || true fi ls -la ~/.local/share/godot/export_templates/4.6.stable || true - name: Setup Android SDK run: | set -euo pipefail ANDROID_HOME=/root/Android/Sdk mkdir -p "$ANDROID_HOME" cd "$ANDROID_HOME" wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip unzip -q cmdline-tools.zip mkdir -p cmdline-tools/latest mv cmdline-tools/* cmdline-tools/latest/ 2>/dev/null || true export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> "$GITHUB_PATH" echo "$ANDROID_HOME/platform-tools" >> "$GITHUB_PATH" yes | sdkmanager --sdk_root="$ANDROID_HOME" "platform-tools" "platforms;android-34" "build-tools;34.0.0" "ndk;26.1.10909118" - name: Export Android run: | mkdir -p build godot --headless --export-release "Android" build/tekton_dash_armageddon.apk - name: Upload Android artifact uses: actions/upload-artifact@v4 with: name: tekton-android path: build/tekton_dash_armageddon.apk retention-days: 7 release: name: Create Release runs-on: ubuntu-latest timeout-minutes: 15 needs: [export-windows, export-linux, export-android] if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') permissions: contents: write steps: - name: Download Windows artifact uses: actions/download-artifact@v4 with: name: tekton-windows path: artifacts/windows - name: Download Linux artifact uses: actions/download-artifact@v4 with: name: tekton-linux path: artifacts/linux - name: Download Android artifact uses: actions/download-artifact@v4 with: name: tekton-android path: artifacts/android - name: Get or create Gitea release id: gitea_release env: GITEA_TOKEN: ${{ secrets.TEKTON_RELEASE_TOKEN }} TAG_NAME: ${{ github.ref_name }} run: | API="https://git.klud.top/api/v1/repos/danchie/tekton/releases" RELEASE_JSON=$(curl -s -H "Authorization: token ***" "$API/tags/$TAG_NAME") RELEASE_ID=$(echo "$RELEASE_JSON" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') if [ -z "$RELEASE_ID" ]; then RELEASE_JSON=$(curl -s -X POST \ -H "Authorization: token ***" \ -H "Content-Type: application/json" \ -d "{\"tag_name\": \"$TAG_NAME\", \"name\": \"$TAG_NAME\"}" \ "$API") RELEASE_ID=$(echo "$RELEASE_JSON" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') fi echo "release_id=$RELEASE_ID" >> "$GITHUB_OUTPUT" - name: Upload Windows asset run: | curl -X POST \ -H "Authorization: token *** secrets.TEKTON_RELEASE_TOKEN }}" \ -H "Content-Type: multipart/form-data" \ -F "attachment=@artifacts/windows/tekton_armageddon_windows.exe" \ "https://git.klud.top/api/v1/repos/danchie/tekton/releases/${{ steps.gitea_release.outputs.release_id }}/assets" - name: Upload Linux asset run: | curl -X POST \ -H "Authorization: token *** secrets.TEKTON_RELEASE_TOKEN }}" \ -H "Content-Type: multipart/form-data" \ -F "attachment=@artifacts/linux/tekton_armageddon_linux.x86_64" \ "https://git.klud.top/api/v1/repos/danchie/tekton/releases/${{ steps.gitea_release.outputs.release_id }}/assets" - name: Upload Android asset run: | curl -X POST \ -H "Authorization: token *** secrets.TEKTON_RELEASE_TOKEN }}" \ -H "Content-Type: multipart/form-data" \ -F "attachment=@artifacts/android/tekton_dash_armageddon.apk" \ "https://git.klud.top/api/v1/repos/danchie/tekton/releases/${{ steps.gitea_release.outputs.release_id }}/assets"