External Trigger Main #43327
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: External Trigger Main | |
on: | |
workflow_dispatch: | |
jobs: | |
external-trigger-beta-custom: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2.3.3 | |
- name: External Trigger | |
if: github.ref == 'refs/heads/beta' | |
run: | | |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_EMBY_BETA }}" ]; then | |
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_EMBY_BETA is set; skipping trigger. ****" | |
exit 0 | |
fi | |
echo "**** External trigger running off of beta branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_EMBY_BETA\". ****" | |
echo "**** Retrieving external version ****" | |
EXT_RELEASE=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/MediaBrowser/Emby.Releases/releases" | jq -r ". | first(.[] | select(.prerelease==true )) | .tag_name") | |
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then | |
echo "**** Can't retrieve external version, exiting ****" | |
FAILURE_REASON="Can't retrieve external version for emby branch beta" | |
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, | |
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], | |
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} | |
exit 1 | |
fi | |
echo "**** External version: ${EXT_RELEASE} ****" | |
echo "**** Retrieving last pushed version ****" | |
image="linuxserver/emby" | |
tag="beta" | |
token=$(curl -sX GET \ | |
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Femby%3Apull" \ | |
| jq -r '.token') | |
multidigest=$(curl -s \ | |
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ | |
--header "Authorization: Bearer ${token}" \ | |
"https://ghcr.io/v2/${image}/manifests/${tag}" \ | |
| jq -r 'first(.manifests[].digest)') | |
digest=$(curl -s \ | |
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ | |
--header "Authorization: Bearer ${token}" \ | |
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \ | |
| jq -r '.config.digest') | |
image_info=$(curl -sL \ | |
--header "Authorization: Bearer ${token}" \ | |
"https://ghcr.io/v2/${image}/blobs/${digest}") | |
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then | |
image_info=$(echo $image_info | jq -r '.config') | |
else | |
image_info=$(echo $image_info | jq -r '.container_config') | |
fi | |
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') | |
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') | |
if [ -z "${IMAGE_VERSION}" ]; then | |
echo "**** Can't retrieve last pushed version, exiting ****" | |
FAILURE_REASON="Can't retrieve last pushed version for emby tag beta" | |
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, | |
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], | |
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} | |
exit 1 | |
fi | |
echo "**** Last pushed version: ${IMAGE_VERSION} ****" | |
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then | |
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****" | |
exit 0 | |
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-emby/job/beta/lastBuild/api/json | jq -r '.building') == "true" ]; then | |
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****" | |
exit 0 | |
else | |
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Checking artifacts. . . ****" | |
assets=$(curl -u "${{ secrets.CR_USER }}:${{ secrets.CR_PAT }}" -sX GET "https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/tags/${EXT_RELEASE}" | jq -r '.assets[].browser_download_url') | |
if echo "$assets" | grep -q "emby-server-deb_${EXT_RELEASE}_arm64.deb$" && echo "$assets" | grep -q "emby-server-deb_${EXT_RELEASE}_armhf.deb$" && echo "$assets" | grep -q "emby-server-deb_${EXT_RELEASE}_amd64.deb$"; then | |
echo "**** All artifacts seem to be published, triggering build ****" | |
response=$(curl -iX POST \ | |
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-emby/job/beta/buildWithParameters?PACKAGE_CHECK=false \ | |
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") | |
echo "**** Jenkins job queue url: ${response%$'\r'} ****" | |
echo "**** Sleeping 10 seconds until job starts ****" | |
sleep 10 | |
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') | |
buildurl="${buildurl%$'\r'}" | |
echo "**** Jenkins job build url: ${buildurl} ****" | |
echo "**** Attempting to change the Jenkins job description ****" | |
curl -iX POST \ | |
"${buildurl}submitDescription" \ | |
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ | |
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ | |
--data-urlencode "Submit=Submit" | |
echo "**** Notifying Discord ****" | |
TRIGGER_REASON="A version change was detected for emby tag beta. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" | |
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, | |
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], | |
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} | |
else | |
echo "**** Not all artifacts are published yet, skipping trigger ****" | |
FAILURE_REASON="New version ${EXT_RELEASE} for emby tag beta is detected, however not all artifacts are uploaded to upstream release yet. Will try again in 1 hr." | |
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, | |
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], | |
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} | |
fi | |
fi |