Repository navigation
150 lines (138 loc) · 6.69 KB
/
Copy pathdeploy-release.yml
File metadata and controls
150 lines (138 loc) · 6.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
name: Release baseSteam
run-name: ${{ inputs.mode }} baseSteam ${{ inputs.version }}
on:
workflow_dispatch:
inputs:
version:
description: Approved version from .github/maven-release/releases.json
required: true
type: string
mode:
description: Check the exact release, or publish it
required: true
default: check-only
type: choice
options: [check-only, publish]
existing_curseforge_file_id:
description: Resume with an already uploaded CurseForge file (never upload it again)
required: false
type: string
permissions:
actions: read
contents: write
defaults:
run:
shell: bash
concurrency:
group: mmd-maven-publication
cancel-in-progress: false
jobs:
release:
name: Publish one verified release to CurseForge, Maven, and GitHub
if: github.repository == 'MinecraftModDevelopmentMods/baseSteam' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
runs-on: ubuntu-latest
timeout-minutes: 20
env:
RELEASE_VERSION: ${{ inputs.version }}
EXISTING_CF_FILE: ${{ inputs.existing_curseforge_file_id }}
CURSEFORGE_PROJECT_ID: '1781373'
GH_TOKEN: ${{ github.token }}
steps:
- name: Check out the publication workflow
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
- name: Install Java for the Maven publisher
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17'
- name: Verify the tag, CI artifact, and Maven destination
id: preflight
run: |
set -euo pipefail
[[ "$RELEASE_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]
[[ -z "$EXISTING_CF_FILE" || "$EXISTING_CF_FILE" =~ ^[1-9][0-9]*$ ]]
python3 -m unittest discover -s .github/maven-release -p 'test_*.py'
release_work="$RUNNER_TEMP/release"
python3 .github/maven-release/verify.py stage-candidate "$RELEASE_VERSION" "$release_work"
bash gradlew -p .github/maven-release generatePomFileForMavenJavaPublication \
"-PreleaseVersion=$RELEASE_VERSION" "-PreleaseWork=$release_work" --no-daemon
state=$(python3 .github/maven-release/verify.py check "$RELEASE_VERSION" "$release_work")
if [[ "$state" == present && -z "$EXISTING_CF_FILE" ]]; then
echo "Maven already has this release. Supply its existing CurseForge file ID." >&2
exit 1
fi
target=$(python3 .github/maven-release/verify.py target "$RELEASE_VERSION" "$release_work")
printf '%s\n' "$target" >> "$GITHUB_OUTPUT"
echo "state=$state" >> "$GITHUB_OUTPUT"
echo "RELEASE_WORK=$release_work" >> "$GITHUB_ENV"
echo "Verified $RELEASE_VERSION. $target. Maven: $state." >> "$GITHUB_STEP_SUMMARY"
- name: Check publication credentials
if: inputs.mode == 'publish'
env:
CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }}
MAVEN_UPLOAD_URL: ${{ secrets.MAVEN_UPLOAD_URL }}
MAVEN_UPLOAD_USERNAME: ${{ secrets.MAVEN_UPLOAD_USERNAME }}
MAVEN_UPLOAD_PASSWORD: ${{ secrets.MAVEN_UPLOAD_PASSWORD }}
run: |
set -euo pipefail
test -n "$EXISTING_CF_FILE" || test -n "$CURSEFORGE_TOKEN"
test -n "$MAVEN_UPLOAD_USERNAME" && test -n "$MAVEN_UPLOAD_PASSWORD"
[[ "$MAVEN_UPLOAD_URL" == https://maven.moddev.zone/releases || "$MAVEN_UPLOAD_URL" == https://maven.moddev.zone/releases/ ]]
if [[ -z "$EXISTING_CF_FILE" && "$GITHUB_RUN_ATTEMPT" != 1 ]]; then
echo "Do not retry an upload. Start a new dispatch with the existing file ID." >&2
exit 1
fi
- name: Upload the player jar to CurseForge
if: inputs.mode == 'publish' && inputs.existing_curseforge_file_id == ''
id: curseforge
uses: Kira-NT/mc-publish@52307b03863581dec6b652b83e597aec02ebb075 # v3.3.1
with:
curseforge-id: '1781373'
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
name: baseSteam ${{ inputs.version }} for Minecraft ${{ steps.preflight.outputs.minecraft }} (Forge)
version: ${{ inputs.version }}
version-type: release
changelog-file: ${{ env.RELEASE_WORK }}/release-notes.txt
files: ${{ env.RELEASE_WORK }}/baseSteam-${{ inputs.version }}.jar
game-versions: ${{ steps.preflight.outputs.minecraft }}
game-version-filter: none
loaders: forge
environment: client | server
java: ${{ steps.preflight.outputs.java }}
curseforge-dependencies: |
1780140(required)
240967(required)
fail-mode: fail
- name: Verify the public CurseForge download
if: inputs.mode == 'publish' || inputs.existing_curseforge_file_id != ''
env:
UPLOADED_CF_FILE: ${{ steps.curseforge.outputs.curseforge-version }}
run: |
set -euo pipefail
export CURSEFORGE_FILE_ID="${EXISTING_CF_FILE:-$UPLOADED_CF_FILE}"
[[ "$CURSEFORGE_FILE_ID" =~ ^[1-9][0-9]*$ ]]
echo "CurseForge file ID: $CURSEFORGE_FILE_ID. Use this ID to resume if approval is pending." >> "$GITHUB_STEP_SUMMARY"
python3 .github/maven-release/verify.py verify-curseforge "$RELEASE_VERSION" "$RELEASE_WORK"
- name: Publish the same release to MMD Maven
if: inputs.mode == 'publish' && steps.preflight.outputs.state == 'absent'
env:
MAVEN_UPLOAD_URL: ${{ secrets.MAVEN_UPLOAD_URL }}
MAVEN_UPLOAD_USERNAME: ${{ secrets.MAVEN_UPLOAD_USERNAME }}
MAVEN_UPLOAD_PASSWORD: ${{ secrets.MAVEN_UPLOAD_PASSWORD }}
run: |
set -euo pipefail
python3 .github/maven-release/verify.py require-absent "$RELEASE_VERSION" "$RELEASE_WORK"
bash gradlew -p .github/maven-release publishMavenJavaPublicationToReleaseRepository \
"-PreleaseVersion=$RELEASE_VERSION" "-PreleaseWork=$RELEASE_WORK" --no-daemon
- name: Verify Maven and publish the GitHub release
if: inputs.mode == 'publish'
run: |
set -euo pipefail
python3 .github/maven-release/verify.py verify "$RELEASE_VERSION" "$RELEASE_WORK" | tee -a "$GITHUB_STEP_SUMMARY"
target=$(jq -er --arg v "$RELEASE_VERSION" '.releases[$v].commit' .github/maven-release/releases.json)
[[ "$target" =~ ^[0-9a-f]{40}$ ]]
gh release create "$RELEASE_VERSION" --verify-tag --target "$target" \
--title "baseSteam $RELEASE_VERSION" --notes-file "$RELEASE_WORK/release-notes.txt" \
"$RELEASE_WORK/"*.jar