-
Notifications
You must be signed in to change notification settings - Fork 0
109 lines (99 loc) · 4.49 KB
/
deploy.yml
File metadata and controls
109 lines (99 loc) · 4.49 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
# Workflow to automatically build the Activity-Tracker plugin JAR and deploy it
# to a running omcsi (open-mc-server-infrastructure) instance.
#
# ─── Setup ───────────────────────────────────────────────────────────────────
# Required GitHub repository secrets:
# OMCSI_DEPLOY_URL – Base URL of your omcsi instance,
# e.g. https://mc.example.com:8092
# OMCSI_DEPLOY_TOKEN – The value set as DEPLOY_AUTH_TOKEN in your omcsi .env
#
# Required GitHub repository variables:
# PLUGIN_JAR_NAME – Filename of the plugin JAR on the server,
# e.g. ActivityTracker.jar (the file that will be replaced)
#
# Optional GitHub repository variables:
# DEPLOY_BRANCH – Branch that triggers a deployment (default: main)
# ─────────────────────────────────────────────────────────────────────────────
name: Deploy Plugin to omcsi
# Trigger on pushes (branch-gated via the job condition) and on manual runs
# via the "Run workflow" button in the Actions tab.
# Note: ${{ vars.* }} expressions are NOT evaluated inside the `on:` event
# filter – only inside job steps and conditions.
on:
push:
workflow_dispatch:
jobs:
build-and-deploy:
name: Build and Deploy Plugin
# Run on manual dispatch (any branch) or when the pushed branch matches
# DEPLOY_BRANCH (default: main).
if: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == (vars.DEPLOY_BRANCH || 'main') }}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '8'
- name: Build plugin JAR
run: mvn --batch-mode package
- name: Locate built JAR
id: locate-jar
run: |
# Use find to reliably locate the shaded JAR, excluding the maven-shade-plugin's
# original (pre-shading) copy and any *-sources / *-javadoc JARs.
JAR_FILE=$(find target -maxdepth 1 -name '*.jar' \
! -name 'original-*' \
! -name '*-sources.jar' \
! -name '*-javadoc.jar' \
-print -quit)
if [ -z "${JAR_FILE}" ]; then
echo "❌ No JAR found in target/"
exit 1
fi
echo "jar_file=${JAR_FILE}" >> "$GITHUB_OUTPUT"
echo "✅ Found JAR: ${JAR_FILE}"
- name: Deploy plugin to omcsi
env:
DEPLOY_TOKEN: ${{ secrets.OMCSI_DEPLOY_TOKEN }}
DEPLOY_URL: ${{ secrets.OMCSI_DEPLOY_URL }}
JAR_FILE: ${{ steps.locate-jar.outputs.jar_file }}
run: |
PLUGIN_JAR_NAME="${{ vars.PLUGIN_JAR_NAME }}"
if [ -z "${PLUGIN_JAR_NAME}" ]; then
echo "❌ PLUGIN_JAR_NAME variable is not set"
exit 1
fi
RESPONSE_BODY=$(mktemp)
trap 'rm -f "${RESPONSE_BODY}"' EXIT
HTTP_STATUS=$(curl --silent --write-out "%{http_code}" \
--output "${RESPONSE_BODY}" \
--request POST \
--header "Authorization: Bearer ${DEPLOY_TOKEN}" \
--form "pluginName=${PLUGIN_JAR_NAME}" \
--form "file=@${JAR_FILE}" \
--form "branch=${{ github.ref_name }}" \
--form "repoUrl=${{ github.server_url }}/${{ github.repository }}" \
"${DEPLOY_URL}/api/plugins/deploy") || {
echo "❌ curl failed – network error or invalid URL"
exit 1
}
if [ "${HTTP_STATUS}" -eq 200 ]; then
echo "✅ Plugin deployed successfully (HTTP ${HTTP_STATUS})"
elif [ "${HTTP_STATUS}" -eq 401 ]; then
echo "❌ Authentication failed – check OMCSI_DEPLOY_TOKEN (HTTP ${HTTP_STATUS})"
echo "Response body:"; cat "${RESPONSE_BODY}"
exit 1
elif [ "${HTTP_STATUS}" -eq 400 ]; then
echo "❌ Bad request – check PLUGIN_JAR_NAME and the uploaded JAR (HTTP ${HTTP_STATUS})"
echo "Response body:"; cat "${RESPONSE_BODY}"
exit 1
else
echo "❌ Deployment failed (HTTP ${HTTP_STATUS})"
echo "Response body:"; cat "${RESPONSE_BODY}"
exit 1
fi