name: Build on: push: branches-ignore: - artifacts tags: - "v*" pull_request: workflow_dispatch: permissions: contents: write jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Java 21 uses: actions/setup-java@v4 with: distribution: temurin java-version: "21" - name: Make Gradle wrapper executable run: chmod +x ./gradlew - name: Build run: ./gradlew build --no-daemon - name: Create Gitea release if: startsWith(github.ref, 'refs/tags/') shell: bash env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -euo pipefail tag="${GITHUB_REF_NAME}" api="${GITHUB_SERVER_URL}/api/v1" release_name="WorldHandler ${tag}" jar="$(find build/libs -maxdepth 1 -name '*neoforge*.jar' -print -quit)" token="${GITEA_TOKEN:-${GITHUB_TOKEN:-}}" if [ -z "${jar}" ]; then echo "No NeoForge jar found in build/libs" >&2 exit 1 fi if [ -z "${token}" ]; then echo "No Gitea token available" >&2 exit 1 fi release_json="$(mktemp)" if ! curl -fsS \ -H "Authorization: token ${token}" \ -H "Accept: application/json" \ "${api}/repos/${GITHUB_REPOSITORY}/releases/tags/${tag}" \ -o "${release_json}"; then export tag release_name GITHUB_SHA python3 -c 'import json, os; print(json.dumps({"tag_name": os.environ["tag"], "target_commitish": os.environ["GITHUB_SHA"], "name": os.environ["release_name"], "body": "NeoForge 21.1.225 build for Minecraft 1.21.1.", "draft": False, "prerelease": False}))' > "${release_json}" curl -fsS \ -X POST \ -H "Authorization: token ${token}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ --data-binary @"${release_json}" \ "${api}/repos/${GITHUB_REPOSITORY}/releases" \ -o "${release_json}" fi release_id="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["id"])' "${release_json}")" asset_name="$(basename "${jar}")" python3 -c 'import json, sys; release = json.load(open(sys.argv[1])); asset_name = sys.argv[2]; [print(asset["id"]) for asset in release.get("assets", []) if asset.get("name") == asset_name]' "${release_json}" "${asset_name}" > assets-to-delete.txt while read -r asset_id; do [ -z "${asset_id}" ] && continue curl -fsS \ -X DELETE \ -H "Authorization: token ${token}" \ "${api}/repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets/${asset_id}" done < assets-to-delete.txt curl -fsS \ -X POST \ -H "Authorization: token ${token}" \ -H "Accept: application/json" \ -F "attachment=@${jar};type=application/java-archive" \ "${api}/repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets?name=${asset_name}" - name: Publish jar to artifacts branch if: github.event_name != 'pull_request' shell: bash run: | set -euo pipefail mkdir -p /tmp/worldhandler-artifacts cp build/libs/*.jar /tmp/worldhandler-artifacts/ git config user.name "Gitea Actions" git config user.email "actions@gitea.local" git fetch origin artifacts || true git switch --force-create artifacts git rm -rf . cp /tmp/worldhandler-artifacts/*.jar . cat > README.md <<'EOF' # WorldHandler build artifacts This branch is maintained by the Gitea runner. Download the jar file from this branch. EOF git add README.md *.jar git commit --allow-empty -m "Publish WorldHandler jar from ${GITHUB_SHA}" git push --force origin artifacts