name: Build Release on: push: branches: [release] pull_request: branches: [release] env: GODOT_VERSION: 4.3 EXPORT_NAME: test-project PROJECT_PATH: test-project jobs: export-windows: name: Windows Export runs-on: ubuntu-24.04 # Use 24.04 with godot 4 container: barichello/godot-ci:4.3 steps: - name: Update and install dependencies run: | apt-get update apt-get install -y curl gnupg - name: Install Node.js run: | curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt-get install -y nodejs - name: Checkout uses: actions/checkout@v4 with: show-progress: true lfs: true - name: Setup run: | mkdir -v -p ~/.local/share/godot/export_templates/ mkdir -v -p ~/.config/ mv /root/.config/godot ~/.config/godot mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Windows Build run: | mkdir -v -p build/windows EXPORT_DIR="$(readlink -f build)" cd $PROJECT_PATH godot --headless --verbose --export-release "Windows Desktop" "$EXPORT_DIR/windows/$EXPORT_NAME.exe" - name: Upload Artifact uses: actions/upload-artifact@v5 with: name: windows path: build/windows export-linux: name: Linux Export runs-on: ubuntu-24.04 # Use 24.04 with godot 4 container: barichello/godot-ci:4.3 steps: - name: Checkout uses: actions/checkout@v4 with: show-progress: true lfs: true - name: Setup run: | mkdir -v -p ~/.local/share/godot/export_templates/ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Linux Build run: | mkdir -v -p build/linux EXPORT_DIR="$(readlink -f build)" cd $PROJECT_PATH godot --headless --verbose --export-release "Linux/X11" "$EXPORT_DIR/linux/$EXPORT_NAME.x86_64" - name: Upload Artifact uses: actions/upload-artifact@v5 with: name: linux path: build/linux # export-web: # name: Web Export # runs-on: ubuntu-24.04 # Use 24.04 with godot 4 # container: # image: barichello/godot-ci:4.3 # steps: # - name: Checkout # uses: actions/checkout@v4 # with: # lfs: true # - name: Setup # run: | # mkdir -v -p ~/.local/share/godot/export_templates/ # mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable # - name: Web Build # run: | # mkdir -v -p build/web # EXPORT_DIR="$(readlink -f build)" # cd $PROJECT_PATH # godot --headless --verbose --export-release "Web" "$EXPORT_DIR/web/index.html" # - name: Upload Artifact # uses: actions/upload-artifact@v5 # with: # name: web # path: build/web # - name: Install rsync 📚 # run: | # apt-get update && apt-get install -y rsync # - name: Deploy to GitHub Pages 🚀 # uses: JamesIves/github-pages-deploy-action@releases/v4 # with: # branch: gh-pages # The branch the action should deploy to. # folder: build/web # The folder the action should deploy. export-mac: name: Mac Export runs-on: ubuntu-24.04 # Use 24.04 with godot 4 container: barichello/godot-ci:4.3 steps: - name: Checkout uses: actions/checkout@v4 with: show-progress: true lfs: true - name: Setup run: | mkdir -v -p ~/.local/share/godot/export_templates/ mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable - name: Mac Build run: | mkdir -v -p build/mac EXPORT_DIR="$(readlink -f build)" cd $PROJECT_PATH godot --headless --verbose --export-release "macOS" "$EXPORT_DIR/mac/$EXPORT_NAME.zip" - name: Upload Artifact uses: actions/upload-artifact@v5 with: name: mac path: build/mac create-release: name: Create Release runs-on: ubuntu-latest needs: [export-mac, export-linux, export-windows] steps: - name: Extract version and body from CHANGELOG id: changelog run: | # Extract the latest released version (skip Unreleased) LATEST=$(grep -E '^## \[[0-9]+\.[0-9]+\.[0-9]+\]' CHANGELOG.md | head -n1 | sed -E 's/^## \[([0-9]+\.[0-9]+\.[0-9]+)\].*/\1/') if [ -z "$LATEST" ]; then echo "No released version found in CHANGELOG.md" exit 1 fi echo "Released version found: $LATEST" echo "version=$LATEST" >> $GITHUB_OUTPUT # Extract the body: lines until the next ## header BODY=$(awk -v ver="$LATEST" ' $0 ~ "^## \\[" ver "\\]" {found=1; next} found && $0 ~ "^## \\[" {exit} found {print} ' CHANGELOG.md) # Trim leading/trailing empty lines BODY=$(echo "$BODY" | sed '/^\s*$/d') # Output body safely for GitHub Actions echo "body<> $GITHUB_OUTPUT echo "$BODY" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create Release uses: akkuman/gitea-release-action@v1 with: server_url: ${{ vars.SERVER_URL }} tag_name: ${{ steps.changelog.outputs.version }} name: "${{ steps.changelog.outputs.version }}" body: ${{ steps.changelog.outputs.body }} draft: false token: ${{ secrets.GITEA_TOKEN }}