Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

Commit 7a24fd5

Browse files
committed
external trigger based on arch base releases
1 parent 606f675 commit 7a24fd5

File tree

3 files changed

+92
-9
lines changed

3 files changed

+92
-9
lines changed

.github/workflows/external_trigger.yml

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,85 @@ jobs:
1212
- name: External Trigger
1313
if: github.ref == 'refs/heads/arch'
1414
run: |
15-
echo "**** No external release, exiting ****"
16-
exit 0
15+
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_BASEIMAGE_RDESKTOP_WEB_ARCH }}" ]; then
16+
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_BASEIMAGE_RDESKTOP_WEB_ARCH is set; skipping trigger. ****"
17+
exit 0
18+
fi
19+
echo "**** External trigger running off of arch branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_BASEIMAGE_RDESKTOP_WEB_ARCH\". ****"
20+
echo "**** Retrieving external version ****"
21+
EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sX GET https://api.github.com/repos/linuxserver/docker-baseimage-rdesktop/releases | jq -r 'first(.[] | select(.tag_name | startswith("arch-2"))) | .tag_name' | sed 's|arch-||' | sed 's|-ls.*||')
22+
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
23+
echo "**** Can't retrieve external version, exiting ****"
24+
FAILURE_REASON="Can't retrieve external version for baseimage-rdesktop-web branch arch"
25+
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-baseimage-rdesktop-web/actions/runs/${{ github.run_id }}"
26+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
27+
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
28+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
29+
exit 1
30+
fi
31+
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
32+
echo "**** External version: ${EXT_RELEASE} ****"
33+
echo "**** Retrieving last pushed version ****"
34+
image="linuxserver/baseimage-rdesktop-web"
35+
tag="arch"
36+
token=$(curl -sX GET \
37+
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fbaseimage-rdesktop-web%3Apull" \
38+
| jq -r '.token')
39+
multidigest=$(curl -s \
40+
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
41+
--header "Authorization: Bearer ${token}" \
42+
"https://ghcr.io/v2/${image}/manifests/${tag}" \
43+
| jq -r 'first(.manifests[].digest)')
44+
digest=$(curl -s \
45+
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
46+
--header "Authorization: Bearer ${token}" \
47+
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
48+
| jq -r '.config.digest')
49+
image_info=$(curl -sL \
50+
--header "Authorization: Bearer ${token}" \
51+
"https://ghcr.io/v2/${image}/blobs/${digest}")
52+
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then
53+
image_info=$(echo $image_info | jq -r '.config')
54+
else
55+
image_info=$(echo $image_info | jq -r '.container_config')
56+
fi
57+
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
58+
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
59+
if [ -z "${IMAGE_VERSION}" ]; then
60+
echo "**** Can't retrieve last pushed version, exiting ****"
61+
FAILURE_REASON="Can't retrieve last pushed version for baseimage-rdesktop-web tag arch"
62+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
63+
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
64+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
65+
exit 1
66+
fi
67+
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
68+
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
69+
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
70+
exit 0
71+
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-baseimage-rdesktop-web/job/arch/lastBuild/api/json | jq -r '.building') == "true" ]; then
72+
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
73+
exit 0
74+
else
75+
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
76+
response=$(curl -iX POST \
77+
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-baseimage-rdesktop-web/job/arch/buildWithParameters?PACKAGE_CHECK=false \
78+
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
79+
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
80+
echo "**** Sleeping 10 seconds until job starts ****"
81+
sleep 10
82+
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
83+
buildurl="${buildurl%$'\r'}"
84+
echo "**** Jenkins job build url: ${buildurl} ****"
85+
echo "**** Attempting to change the Jenkins job description ****"
86+
curl -iX POST \
87+
"${buildurl}submitDescription" \
88+
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
89+
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
90+
--data-urlencode "Submit=Submit"
91+
echo "**** Notifying Discord ****"
92+
TRIGGER_REASON="A version change was detected for baseimage-rdesktop-web tag arch. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
93+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
94+
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
95+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
96+
fi

Jenkinsfile

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,14 @@ pipeline {
9999
/* ########################
100100
External Release Tagging
101101
######################## */
102-
// If this is an os release set release type to none to indicate no external release
103-
stage("Set ENV os"){
102+
// If this is a custom command to determine version use that command
103+
stage("Set tag custom bash"){
104104
steps{
105105
script{
106-
env.EXT_RELEASE = env.PACKAGE_TAG
107-
env.RELEASE_LINK = 'none'
106+
env.EXT_RELEASE = sh(
107+
script: ''' curl -sX GET https://api.github.com/repos/linuxserver/docker-baseimage-rdesktop/releases | jq -r 'first(.[] | select(.tag_name | startswith("arch-2"))) | .tag_name' | sed 's|arch-||' | sed 's|-ls.*||' ''',
108+
returnStdout: true).trim()
109+
env.RELEASE_LINK = 'custom_command'
108110
}
109111
}
110112
}
@@ -870,11 +872,11 @@ pipeline {
870872
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
871873
echo "Pushing New release for Tag"
872874
sh '''#! /bin/bash
873-
echo "Updating base packages to ${PACKAGE_TAG}" > releasebody.json
875+
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
874876
echo '{"tag_name":"'${META_TAG}'",\
875877
"target_commitish": "arch",\
876878
"name": "'${META_TAG}'",\
877-
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**OS Changes:**\\n\\n' > start
879+
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
878880
printf '","draft": false,"prerelease": true}' >> releasebody.json
879881
paste -d'\\0' start releasebody.json > releasebody.json.done
880882
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''

jenkins-vars.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
# jenkins variables
44
project_name: docker-baseimage-rdesktop-web
5-
external_type: os
5+
external_type: na
6+
custom_version_command: "curl -sX GET https://api.github.com/repos/linuxserver/docker-baseimage-rdesktop/releases | jq -r 'first(.[] | select(.tag_name | startswith(\"arch-2\"))) | .tag_name' | sed 's|arch-||' | sed 's|-ls.*||'"
67
release_type: prerelease
78
release_tag: arch
89
ls_branch: arch

0 commit comments

Comments
 (0)