Skip to content

Commit d139f11

Browse files
authored
Merge pull request #2 from linuxserver/version
use upstream version as tag
2 parents bb21f8b + 79674ec commit d139f11

4 files changed

Lines changed: 140 additions & 14 deletions

File tree

.github/workflows/external_trigger.yml

Lines changed: 122 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,130 @@ jobs:
1515
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
1616
run: |
1717
printf "# External trigger for docker-chrome\n\n" >> $GITHUB_STEP_SUMMARY
18-
echo "Type is \`os\`" >> $GITHUB_STEP_SUMMARY
19-
echo "No external release, exiting" >> $GITHUB_STEP_SUMMARY
20-
exit 0
18+
if grep -q "^chrome_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
19+
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
20+
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`chrome_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
21+
elif grep -q "^chrome_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
22+
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
23+
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`chrome_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
24+
exit 0
25+
fi
26+
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
27+
echo "> External trigger running off of master branch. To disable this trigger, add \`chrome_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
28+
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
29+
EXT_RELEASE=$(curl -sX GET http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages | grep -A 7 -m 1 'Package: google-chrome-stable' | awk -F ': ' '/Version/{print $2;exit}')
30+
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
2131
if grep -q "^chrome_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
2232
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
2333
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
2434
exit 0
2535
fi
36+
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
37+
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
38+
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
39+
FAILURE_REASON="Can't retrieve external version for chrome branch master"
40+
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-chrome/actions/runs/${{ github.run_id }}"
41+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
42+
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
43+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
44+
exit 1
45+
fi
46+
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
47+
echo "External version: \`${EXT_RELEASE}\`" >> $GITHUB_STEP_SUMMARY
48+
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
49+
image="linuxserver/chrome"
50+
tag="latest"
51+
token=$(curl -sX GET \
52+
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fchrome%3Apull" \
53+
| jq -r '.token')
54+
multidigest=$(curl -s \
55+
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
56+
--header "Accept: application/vnd.oci.image.index.v1+json" \
57+
--header "Authorization: Bearer ${token}" \
58+
"https://ghcr.io/v2/${image}/manifests/${tag}")
59+
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
60+
# If there's a layer element it's a single-arch manifest so just get that digest
61+
digest=$(jq -r '.config.digest' <<< "${multidigest}")
62+
else
63+
# Otherwise it's multi-arch or has manifest annotations
64+
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
65+
# Check for manifest annotations and delete if found
66+
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
67+
fi
68+
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
69+
# If there's still more than one digest, it's multi-arch
70+
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
71+
else
72+
# Otherwise it's single arch
73+
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
74+
fi
75+
if digest=$(curl -s \
76+
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
77+
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
78+
--header "Authorization: Bearer ${token}" \
79+
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
80+
digest=$(jq -r '.config.digest' <<< "${digest}");
81+
fi
82+
fi
83+
image_info=$(curl -sL \
84+
--header "Authorization: Bearer ${token}" \
85+
"https://ghcr.io/v2/${image}/blobs/${digest}")
86+
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then
87+
image_info=$(echo $image_info | jq -r '.config')
88+
else
89+
image_info=$(echo $image_info | jq -r '.container_config')
90+
fi
91+
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
92+
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
93+
if [ -z "${IMAGE_VERSION}" ]; then
94+
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
95+
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
96+
FAILURE_REASON="Can't retrieve last pushed version for chrome tag latest"
97+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
98+
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
99+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
100+
exit 1
101+
fi
102+
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
103+
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
104+
echo "Version \`${EXT_RELEASE}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
105+
exit 0
106+
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-chrome/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
107+
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
108+
exit 0
109+
else
110+
if [[ "${artifacts_found}" == "false" ]]; then
111+
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
112+
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
113+
FAILURE_REASON="New version ${EXT_RELEASE} for chrome tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
114+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
115+
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
116+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
117+
else
118+
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
119+
echo "New version \`${EXT_RELEASE}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
120+
if [[ "${artifacts_found}" == "true" ]]; then
121+
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
122+
fi
123+
response=$(curl -iX POST \
124+
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-chrome/job/master/buildWithParameters?PACKAGE_CHECK=false \
125+
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
126+
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
127+
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
128+
sleep 10
129+
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
130+
buildurl="${buildurl%$'\r'}"
131+
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
132+
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
133+
curl -iX POST \
134+
"${buildurl}submitDescription" \
135+
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
136+
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
137+
--data-urlencode "Submit=Submit"
138+
echo "**** Notifying Discord ****"
139+
TRIGGER_REASON="A version change was detected for chrome tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
140+
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
141+
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
142+
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
143+
fi
144+
fi

Dockerfile

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ FROM ghcr.io/linuxserver/baseimage-selkies:debianbookworm
33
# set version label
44
ARG BUILD_DATE
55
ARG VERSION
6+
ARG CHROME_VERSION
67
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
78
LABEL maintainer="thelamer"
89

@@ -15,15 +16,18 @@ RUN \
1516
/usr/share/selkies/www/icon.png \
1617
https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/chrome-logo.png && \
1718
echo "**** setup repo ****" && \
18-
curl -sL \
19+
curl -fsSL \
1920
https://dl.google.com/linux/linux_signing_key.pub \
20-
| apt-key add - && \
21-
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> \
22-
/etc/apt/sources.list.d/google.list && \
21+
| gpg --dearmor | tee /usr/share/keyrings/google-chrome.gpg >/dev/null && \
22+
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >> \
23+
/etc/apt/sources.list.d/google-chrome.list && \
2324
echo "**** install packages ****" && \
25+
if [ -z "${CHROME_VERSION+x}" ]; then \
26+
CHROME_VERSION=$(curl -sX GET http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages | grep -A 7 -m 1 'Package: google-chrome-stable' | awk -F ': ' '/Version/{print $2;exit}'); \
27+
fi && \
2428
apt-get update && \
2529
apt-get install -y --no-install-recommends \
26-
google-chrome-stable && \
30+
google-chrome-stable=${CHROME_VERSION} && \
2731
echo "**** cleanup ****" && \
2832
apt-get autoclean && \
2933
rm -rf \

Jenkinsfile

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,14 @@ pipeline {
138138
/* ########################
139139
External Release Tagging
140140
######################## */
141-
// If this is an os release set release type to none to indicate no external release
142-
stage("Set ENV os"){
141+
// If this is a custom command to determine version use that command
142+
stage("Set tag custom bash"){
143143
steps{
144144
script{
145-
env.EXT_RELEASE = env.PACKAGE_TAG
146-
env.RELEASE_LINK = 'none'
145+
env.EXT_RELEASE = sh(
146+
script: ''' curl -sX GET http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages | grep -A 7 -m 1 'Package: google-chrome-stable' | awk -F ': ' '/Version/{print $2;exit}' ''',
147+
returnStdout: true).trim()
148+
env.RELEASE_LINK = 'custom_command'
147149
}
148150
}
149151
}
@@ -981,7 +983,7 @@ pipeline {
981983
"tagger": {"name": "LinuxServer-CI","email": "[email protected]","date": "'${GITHUB_DATE}'"}}' '''
982984
echo "Pushing New release for Tag"
983985
sh '''#! /bin/bash
984-
echo "Updating base packages to ${PACKAGE_TAG}" > releasebody.json
986+
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
985987
echo '{"tag_name":"'${META_TAG}'",\
986988
"target_commitish": "master",\
987989
"name": "'${META_TAG}'",\

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-chrome
5-
external_type: os
5+
external_type: na
6+
custom_version_command: "curl -sX GET http://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages | grep -A 7 -m 1 'Package: google-chrome-stable' | awk -F ': ' '/Version/{print $2;exit}'"
67
release_type: stable
78
release_tag: latest
89
ls_branch: master

0 commit comments

Comments
 (0)