Build Container Images #700
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: Build Container Images | |
on: | |
push: | |
branches: [ main ] | |
paths-ignore: | |
- '**/README.md' | |
- '**/Dockerfile' | |
- '**/save_docker_pull_count.yml' | |
- '**/build_test_images.yml' | |
- '**/Test_Git_Actions-Dockerfile' | |
pull_request: | |
branches: [ main ] | |
workflow_dispatch: | |
inputs: | |
tachidesk_release_type: | |
required: false | |
default: 'stable' | |
description: 'Tachidesk Release Type' | |
publish_images_manually: | |
required: false | |
default: 'no' | |
description: 'Force Publish Images Manually' | |
env: | |
build_repo_docker: 'tachidesk' | |
build_base_image_temurin: 'eclipse-temurin:11-jre-jammy' | |
build_base_image_temurin_platform: 'linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x' | |
build_base_image_temurin_platform_testing: 'linux/amd64' | |
build_base_image_alpine: 'alpine:3.16' | |
build_base_image_alpine_platform: 'linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x' | |
build_base_image_alpine_platform_testing: 'linux/amd64' | |
startup_script_url: 'https://raw.githubusercontent.com/${{ github.repository }}/main/scripts/startup_script.sh' | |
tachidesk_webui_stable_url: 'https://api.github.com/repos/suwayomi/Tachidesk-Server/releases/latest' | |
tachidesk_webui_preview_url: 'https://api.github.com/repos/suwayomi/Tachidesk-Server-preview/releases/latest' | |
jobs: | |
check_workflow: | |
runs-on: ubuntu-latest | |
outputs: | |
enable_discord_hook: ${{ steps.run_job_steps.outputs.enable_discord_hook }} | |
enable_build_publish: ${{ steps.run_job_steps.outputs.enable_discord_hook }} | |
run_check_stable: ${{ steps.run_job_steps.outputs.run_check_stable }} | |
run_check_preview: ${{ steps.run_job_steps.outputs.run_check_preview }} | |
run_build_stable: ${{ steps.run_job_steps.outputs.run_build_stable }} | |
run_build_preview: ${{ steps.run_job_steps.outputs.run_build_preview }} | |
if: "!startsWith(github.event.head_commit.message, '[SKIP CI]')" | |
steps: | |
- name: run job and steps check | |
id: run_job_steps | |
run: | | |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | |
if [[ "${{ github.event.inputs.tachidesk_release_type }}" == "stable" ]]; then | |
if [[ "${{ github.actor }}" == "AriaMoradi" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "arbuilder" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "Suwayomi" && "${{ github.event.inputs.publish_images_manually }}" == "yes" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "Suwayomi" && "${{ github.event.inputs.publish_images_manually }}" == "no" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" != "arbuilder" && "${{ github.event.inputs.publish_images_manually }}" == "yes" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
else | |
echo "run_check_stable=false" >> $GITHUB_OUTPUT | |
echo "run_build_stable=false" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
fi | |
fi | |
if [[ "${{ github.event.inputs.tachidesk_release_type }}" == "preview" ]]; then | |
if [[ "${{ github.actor }}" == "AriaMoradi" ]]; then | |
echo "run_check_preview=true" >> $GITHUB_OUTPUT | |
echo "run_build_preview=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "arbuilder" ]]; then | |
echo "run_check_preview=true" >> $GITHUB_OUTPUT | |
echo "run_build_preview=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "Suwayomi" && "${{ github.event.inputs.publish_images_manually }}" == "yes" ]]; then | |
echo "run_check_preview=true" >> $GITHUB_OUTPUT | |
echo "run_build_preview=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=true" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" == "arbuilder" && "${{ github.repository_owner }}" == "Suwayomi" && "${{ github.event.inputs.publish_images_manually }}" == "no" ]]; then | |
echo "run_check_preview=true" >> $GITHUB_OUTPUT | |
echo "run_build_preview=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.actor }}" != "arbuilder" && "${{ github.event.inputs.publish_images_manually }}" == "yes" ]]; then | |
echo "run_check_preview=true" >> $GITHUB_OUTPUT | |
echo "run_build_preview=true" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=true" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
else | |
echo "run_check_preview=false" >> $GITHUB_OUTPUT | |
echo "run_build_preview=false" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
fi | |
fi | |
elif [[ "${{ github.event_name }}" == "pull_request" || "${{ github.event_name }}" == "push" ]]; then | |
echo "run_check_stable=true" >> $GITHUB_OUTPUT | |
echo "run_build_stable=false" >> $GITHUB_OUTPUT | |
echo "run_check_preview=false" >> $GITHUB_OUTPUT | |
echo "run_build_preview=false" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
else | |
echo "run_check_stable=false" >> $GITHUB_OUTPUT | |
echo "run_build_stable=false" >> $GITHUB_OUTPUT | |
echo "run_check_preview=false" >> $GITHUB_OUTPUT | |
echo "run_build_preview=false" >> $GITHUB_OUTPUT | |
echo "enable_build_publish=false" >> $GITHUB_OUTPUT | |
echo "enable_discord_hook=false" >> $GITHUB_OUTPUT | |
fi | |
check_stable: | |
needs: check_workflow | |
runs-on: ubuntu-latest | |
outputs: | |
new_release_check: ${{ steps.release_version_check.outputs.new_release_check }} | |
release_url: ${{ steps.get_latest_release_metadata.outputs.release_url }} | |
release_commit: ${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
release_tag: ${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
release_filename: ${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
release_version: ${{ steps.get_latest_release_metadata.outputs.release_version }} | |
release_var: ${{ steps.get_latest_release_metadata.outputs.release_var }} | |
tachidesk_docker_git_commit: ${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
build_date: ${{ steps.get_latest_release_metadata.outputs.build_date }} | |
repository_owner_lower: ${{ steps.get_latest_release_metadata.outputs.repository_owner_lower }} | |
run_build_stable : ${{ needs.check_workflow.outputs.run_build_stable }} | |
enable_discord_hook: ${{ needs.check_workflow.outputs.enable_discord_hook }} | |
enable_build_publish: ${{ needs.check_workflow.outputs.enable_build_publish }} | |
if: needs.check_workflow.outputs.run_check_stable == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: main | |
path: main | |
fetch-depth: 0 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: get latest release metadata | |
id: get_latest_release_metadata | |
run: | | |
cd main | |
release_url=$(curl -s ${{ env.tachidesk_webui_stable_url }} | egrep -o "https://.*./releases/download.*.Tachidesk-Server.*.jar") | |
release_tag=$(curl -s ${{ env.tachidesk_webui_stable_url }} | egrep -o "tag_name.*.v[0-9]+.[0-9]+.[0-9]+" | egrep -o "v[0-9]+.[0-9]+.[0-9]+") | |
release_var=$(echo $release_url | egrep -o "Tachidesk-Server-$release_tag-r[0-9]+.jar" | egrep -o "$release_tag-r[0-9]+") | |
release_commit=$(echo $release_var | cut -f2 -d"r") | |
release_filename=Tachidesk-Server-${release_var}.jar | |
release_version=$(echo $release_tag | cut -c2-) | |
echo "release_url=$release_url" >> $GITHUB_OUTPUT | |
echo "release_commit=$release_commit" >> $GITHUB_OUTPUT | |
echo "release_tag=$release_tag" >> $GITHUB_OUTPUT | |
echo "release_filename=$release_filename" >> $GITHUB_OUTPUT | |
echo "release_version=$release_version" >> $GITHUB_OUTPUT | |
echo "release_var=$release_var" >> $GITHUB_OUTPUT | |
tachidesk_docker_git_commit=$(git rev-list --count HEAD) | |
echo "tachidesk_docker_git_commit=$tachidesk_docker_git_commit" >> $GITHUB_OUTPUT | |
build_date=$(date "+%F") | |
echo "build_date=$build_date" >> $GITHUB_OUTPUT | |
echo "repository_owner_lower=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | |
- name: Build and save stable ubuntu | |
id: docker_build_release_ubuntu | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_temurin_platform_testing }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_temurin }} | |
BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} | |
IMAGE_VERSION=${{ steps.get_latest_release_metadata.outputs.release_version }} | |
IMAGE_TYPE=stable-ubuntu | |
TACHIDESK_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ steps.get_latest_release_metadata.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
tags: | | |
test-image:stable | |
outputs: type=docker,dest=/tmp/test_image_stable.tar | |
- name: Docker Run Test Stable Ubuntu Image | |
id: docker_run_test_image_stable | |
run: | | |
docker load --input /tmp/test_image_stable.tar | |
mkdir -p /home/runner/work/_temp/tachidesk | |
chmod -R 777 /home/runner/work/_temp/tachidesk | |
docker run --rm -d -p 127.0.0.1:4568:4567 -v /home/runner/work/_temp/tachidesk:/home/suwayomi/.local/share/Tachidesk --name=test_image_stable test-image:stable | |
sleep 15 | |
cat /home/runner/work/_temp/tachidesk/logfile.log | |
curl -s 127.0.0.1:4568/api/v1/settings/about/ && val=$(curl -s 127.0.0.1:4568/api/v1/settings/about/ | grep -o "Tachidesk" | sort --unique) | |
if [[ $val == "Tachidesk" ]]; then | |
echo "" | |
echo "Tachidesk stable ubuntu run successfully" | |
echo "value=true" >> $GITHUB_OUTPUT | |
docker stop test_image_stable | |
else | |
echo "" | |
echo "Tachidesk stable ubuntu run Failed" | |
echo "value=false" >> $GITHUB_OUTPUT | |
if [[ ${{ needs.check_workflow.outputs.enable_discord_hook }} == 'true' ]]; then | |
curl \ | |
-F 'payload_json={"username": "Github", "content": "<@255018340244914177>\n<@785012853178499073>\nDocker Stable Ubuntu Image Dry Run Failed Version - ${{ steps.get_latest_release_metadata.outputs.release_tag }}"}' \ | |
-F "file1=@/home/runner/work/_temp/tachidesk/logfile.log" \ | |
"https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" | |
fi | |
exit 1 | |
fi | |
- name: Build and save stable alpine | |
id: docker_build_release_alpine | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_alpine_platform_testing }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_alpine }} | |
BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} | |
IMAGE_VERSION=${{ steps.get_latest_release_metadata.outputs.release_version }} | |
IMAGE_TYPE=stable-alpine | |
TACHIDESK_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ steps.get_latest_release_metadata.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
tags: | | |
test-image:stable-alpine | |
outputs: type=docker,dest=/tmp/test_image_stable_alpine.tar | |
- name: Docker Run Test Stable Alpine Image | |
id: docker_run_test_image_stable_alpine | |
run: | | |
docker load --input /tmp/test_image_stable_alpine.tar | |
mkdir -p /home/runner/work/_temp/tachidesk_alpine | |
chmod -R 777 /home/runner/work/_temp/tachidesk_alpine | |
docker run --rm -d -p 127.0.0.1:4568:4567 -v /home/runner/work/_temp/tachidesk_alpine:/home/suwayomi/.local/share/Tachidesk --name=test_image_stable_alpine test-image:stable-alpine | |
sleep 15 | |
cat /home/runner/work/_temp/tachidesk_alpine/logfile.log | |
curl -s 127.0.0.1:4568/api/v1/settings/about/ && val=$(curl -s 127.0.0.1:4568/api/v1/settings/about/ | grep -o "Tachidesk" | sort --unique) | |
if [[ $val == "Tachidesk" ]]; then | |
echo "" | |
echo "Tachidesk stable alpine run successfully" | |
echo "value=true" >> $GITHUB_OUTPUT | |
docker stop test_image_stable_alpine | |
else | |
echo "" | |
echo "Tachidesk stable alpine run Failed" | |
echo "value=false" >> $GITHUB_OUTPUT | |
if [[ ${{ needs.check_workflow.outputs.enable_discord_hook }} == 'true' ]]; then | |
curl \ | |
-F 'payload_json={"username": "Github", "content": "<@255018340244914177>\n<@785012853178499073>\nDocker Stable Alpine Image Dry Run Failed Version - ${{ steps.get_latest_release_metadata.outputs.release_tag }}"}' \ | |
-F "file1=@/home/runner/work/_temp/tachidesk_alpine/logfile.log" \ | |
"https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" | |
fi | |
exit 1 | |
fi | |
- name: Delete docker files | |
run: | | |
rm -f /tmp/test_image_stable.tar | |
rm -f /tmp/test_image_stable_alpine.tar | |
#rm -rf /home/runner/work/_temp/tachidesk | |
#rm -rf /home/runner/work/_temp/tachidesk_alpine | |
build_stable: | |
needs: check_stable | |
runs-on: ubuntu-latest | |
if: needs.check_stable.outputs.run_build_stable == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: main | |
path: main | |
fetch-depth: 0 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push stable ubuntu | |
id: docker_build_release_ubuntu | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_temurin_platform }} | |
push: ${{ needs.check_stable.outputs.enable_build_publish == 'true' }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_temurin }} | |
BUILD_DATE=${{ needs.check_stable.outputs.build_date }} | |
IMAGE_VERSION=${{ needs.check_stable.outputs.release_version }} | |
IMAGE_TYPE=stable-ubuntu | |
TACHIDESK_GIT_COMMIT=${{ needs.check_stable.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ needs.check_stable.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ needs.check_stable.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ needs.check_stable.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ needs.check_stable.outputs.tachidesk_docker_git_commit }} | |
IMAGE_OWNER=${{ needs.check_stable.outputs.repository_owner_lower }} | |
tags: | | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:latest | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:stable | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:${{ needs.check_stable.outputs.release_tag }} | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:latest-ubuntu | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:stable-ubuntu | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:${{ needs.check_stable.outputs.release_tag }}-ubuntu | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
- name: Build and push stable alpine | |
id: docker_build_release_alpine | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_alpine_platform }} | |
push: ${{ needs.check_stable.outputs.enable_build_publish == 'true' }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_alpine }} | |
BUILD_DATE=${{ needs.check_stable.outputs.build_date }} | |
IMAGE_VERSION=${{ needs.check_stable.outputs.release_version }} | |
IMAGE_TYPE=stable-alpine | |
TACHIDESK_GIT_COMMIT=${{ needs.check_stable.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ needs.check_stable.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ needs.check_stable.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ needs.check_stable.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ needs.check_stable.outputs.tachidesk_docker_git_commit }} | |
IMAGE_OWNER=${{ needs.check_stable.outputs.repository_owner_lower }} | |
tags: | | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:latest-alpine | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:stable-alpine | |
ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:${{ needs.check_stable.outputs.release_tag }}-alpine | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
- name: save stable release | |
run: | | |
cd main | |
git pull | |
echo "`jq '.stable="${{ needs.check_stable.outputs.release_tag }}"' scripts/tachidesk_version.json`" > scripts/tachidesk_version.json | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
git status | |
if [ -n "$(git status --porcelain)" ]; then | |
git pull | |
git add . | |
git commit -m "Update stable release version" | |
git push | |
else | |
echo "No changes to commit" | |
fi | |
- name: discord webhook stable | |
if: ${{ needs.check_stable.outputs.enable_discord_hook == 'true' }} | |
id: discord_webhook_stable | |
run: | | |
curl -H "Content-Type: application/json" -d '{"content": "Docker Stable Image Published!","embeds":[{"color":16729344,"author":{"name":"${{ github.repository_owner }}","icon_url":"https://avatars.githubusercontent.com/u/81182076","url":"https://github.com/${{ github.repository_owner }}"},"title":"Docker Stable Release","url":"https://github.com/${{ github.repository_owner }}/docker-tachidesk","fields":[{"name":"docker update","value":"docker pull ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/tachidesk","inline":false},{"name":"docker run","value":"docker run -p 4567:4567 ghcr.io/${{ needs.check_stable.outputs.repository_owner_lower }}/tachidesk","inline":false}],"thumbnail":{"url": "https://www.docker.com/sites/default/files/d8/2019-07/vertical-logo-monochromatic.png"},"description":"Tachidesk version - ${{ needs.check_stable.outputs.release_tag }}"}]}' "https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" | |
check_preview: | |
needs: check_workflow | |
runs-on: ubuntu-latest | |
outputs: | |
new_release_check: ${{ steps.release_version_check.outputs.new_release_check }} | |
release_url: ${{ steps.get_latest_release_metadata.outputs.release_url }} | |
release_commit: ${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
release_tag: ${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
release_filename: ${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
release_version: ${{ steps.get_latest_release_metadata.outputs.release_version }} | |
release_var: ${{ steps.get_latest_release_metadata.outputs.release_var }} | |
tachidesk_docker_git_commit: ${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
build_date: ${{ steps.get_latest_release_metadata.outputs.build_date }} | |
repository_owner_lower: ${{ steps.get_latest_release_metadata.outputs.repository_owner_lower }} | |
run_build_preview : ${{ needs.check_workflow.outputs.run_build_preview }} | |
enable_discord_hook: ${{ needs.check_workflow.outputs.enable_discord_hook }} | |
enable_build_publish: ${{ needs.check_workflow.outputs.enable_build_publish }} | |
if: needs.check_workflow.outputs.run_check_preview == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: main | |
path: main | |
fetch-depth: 0 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: get latest release metadata | |
id: get_latest_release_metadata | |
run: | | |
cd main | |
release_url=$(curl -s ${{ env.tachidesk_webui_preview_url }} | egrep -o "https://.*./releases/download.*.Tachidesk-Server.*.jar") | |
release_tag=$(curl -s ${{ env.tachidesk_webui_preview_url }} | egrep -o "tag_name.*.v[0-9]+.[0-9]+.[0-9]+-r[0-9]+" | egrep -o "v[0-9]+.[0-9]+.[0-9]+-r[0-9]+") | |
release_var=$(echo $release_url | grep -o "Tachidesk-Server-$release_tag.jar" | grep -o "$release_tag" ) | |
release_commit=$(echo $release_var | cut -f2 -d"r") | |
release_filename=Tachidesk-Server-${release_var}.jar | |
release_version=$(echo $release_tag | cut -c2-) | |
echo "release_url=$release_url" >> $GITHUB_OUTPUT | |
echo "release_commit=$release_commit" >> $GITHUB_OUTPUT | |
echo "release_tag=$release_tag" >> $GITHUB_OUTPUT | |
echo "release_filename=$release_filename" >> $GITHUB_OUTPUT | |
echo "release_version=$release_version" >> $GITHUB_OUTPUT | |
echo "release_var=$release_var" >> $GITHUB_OUTPUT | |
tachidesk_docker_git_commit=$(git rev-list --count HEAD) | |
echo "tachidesk_docker_git_commit=$tachidesk_docker_git_commit" >> $GITHUB_OUTPUT | |
build_date=$(date "+%F") | |
echo "build_date=$build_date" >> $GITHUB_OUTPUT | |
echo "repository_owner_lower=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | |
- name: Build and save preview ubuntu | |
id: docker_build_release_ubuntu | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_temurin_platform_testing }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_temurin }} | |
BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} | |
IMAGE_VERSION=${{ steps.get_latest_release_metadata.outputs.release_version }} | |
IMAGE_TYPE=preview-ubuntu | |
TACHIDESK_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ steps.get_latest_release_metadata.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
tags: | | |
test-image:preview | |
outputs: type=docker,dest=/tmp/test_image_preview.tar | |
- name: Docker Run Test Preview Image Ubuntu | |
id: docker_run_test_image_preview | |
run: | | |
docker load --input /tmp/test_image_preview.tar | |
mkdir -p /home/runner/work/_temp/tachidesk | |
chmod -R 777 /home/runner/work/_temp/tachidesk | |
docker run --rm -d -p 127.0.0.1:4569:4567 -v /home/runner/work/_temp/tachidesk:/home/suwayomi/.local/share/Tachidesk --name=test_image_preview test-image:preview | |
sleep 15 | |
cat /home/runner/work/_temp/tachidesk/logfile.log | |
curl -s 127.0.0.1:4569/api/v1/settings/about/ && val=$(curl -s 127.0.0.1:4569/api/v1/settings/about/ | grep -o "Tachidesk" | sort --unique) | |
if [[ $val == "Tachidesk" ]]; then | |
echo "" | |
echo "Tachidesk preview run successfully" | |
echo "value=true" >> $GITHUB_OUTPUT | |
docker stop test_image_preview | |
run_check="true" | |
else | |
echo "" | |
echo "Tachidesk preview run Failed" | |
echo "value=false" >> $GITHUB_OUTPUT | |
if [[ ${{ needs.check_workflow.outputs.enable_discord_hook }} == 'true' ]]; then | |
curl \ | |
-F 'payload_json={"username": "Github", "content": "<@255018340244914177>\n<@785012853178499073>\nDocker Preview Image Dry Run Failed Version - ${{ steps.get_latest_release_metadata.outputs.release_tag }}"}' \ | |
-F "file1=@/home/runner/work/_temp/tachidesk/logfile.log" \ | |
"https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" | |
fi | |
exit 1 | |
fi | |
docker system prune -a -f --volumes | |
- name: Build and save preview alpine | |
id: docker_build_release_alpine | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_alpine_platform_testing }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_alpine }} | |
BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} | |
IMAGE_VERSION=${{ steps.get_latest_release_metadata.outputs.release_version }} | |
IMAGE_TYPE=preview-alpine | |
TACHIDESK_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ steps.get_latest_release_metadata.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ steps.get_latest_release_metadata.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ steps.get_latest_release_metadata.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} | |
tags: | | |
test-image:preview-alpine | |
outputs: type=docker,dest=/tmp/test_image_preview_alpine.tar | |
- name: Docker Run Test Preview Image Alpine | |
id: docker_run_test_image_preview_alpine | |
run: | | |
docker load --input /tmp/test_image_preview_alpine.tar | |
mkdir -p /home/runner/work/_temp/tachidesk_alpine | |
chmod -R 777 /home/runner/work/_temp/tachidesk_alpine | |
docker run --rm -d -p 127.0.0.1:4569:4567 -v /home/runner/work/_temp/tachidesk_alpine:/home/suwayomi/.local/share/Tachidesk --name=test_image_preview_alpine test-image:preview-alpine | |
sleep 15 | |
cat /home/runner/work/_temp/tachidesk_alpine/logfile.log | |
curl -s 127.0.0.1:4569/api/v1/settings/about/ && val=$(curl -s 127.0.0.1:4569/api/v1/settings/about/ | grep -o "Tachidesk" | sort --unique) | |
if [[ $val == "Tachidesk" ]]; then | |
echo "" | |
echo "Tachidesk preview alpine run successfully" | |
echo "value=true" >> $GITHUB_OUTPUT | |
docker stop test_image_preview_alpine | |
run_check="true" | |
else | |
echo "" | |
echo "Tachidesk preview alpine run Failed" | |
echo "value=false" >> $GITHUB_OUTPUT | |
if [[ ${{ needs.check_workflow.outputs.enable_discord_hook }} == 'true' ]]; then | |
curl \ | |
-F 'payload_json={"username": "Github", "content": "<@255018340244914177>\n<@785012853178499073>\nDocker Preview Alpine Image Dry Run Failed Version - ${{ steps.get_latest_release_metadata.outputs.release_tag }}"}' \ | |
-F "file1=@/home/runner/work/_temp/tachidesk_alpine/logfile.log" \ | |
"https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" | |
fi | |
exit 1 | |
fi | |
docker system prune -a -f --volumes | |
- name: Delete docker files | |
run: | | |
rm -f /tmp/test_image_preview.tar | |
rm -f /tmp/test_image_preview_alpine.tar | |
#rm -rf /home/runner/work/_temp/tachidesk | |
#rm -rf /home/runner/work/_temp/tachidesk_alpine | |
build_preview: | |
needs: check_preview | |
runs-on: ubuntu-latest | |
if: needs.check_preview.outputs.run_build_preview == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
ref: main | |
path: main | |
fetch-depth: 0 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push preview ubuntu | |
id: docker_build_release_ubuntu | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_temurin_platform }} | |
push: ${{ needs.check_preview.outputs.enable_build_publish == 'true' }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_temurin }} | |
BUILD_DATE=${{ needs.check_preview.outputs.build_date }} | |
IMAGE_VERSION=${{ needs.check_preview.outputs.release_version }} | |
IMAGE_TYPE=preview-ubuntu | |
TACHIDESK_GIT_COMMIT=${{ needs.check_preview.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ needs.check_preview.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ needs.check_preview.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ needs.check_preview.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ needs.check_preview.outputs.tachidesk_docker_git_commit }} | |
IMAGE_OWNER=${{ needs.check_preview.outputs.repository_owner_lower }} | |
tags: | | |
ghcr.io/${{ needs.check_preview.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:preview | |
ghcr.io/${{ needs.check_preview.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:preview-ubuntu | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
- name: Build and push preview alpine | |
id: docker_build_release_alpine | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/dockerfiles/Git_Actions-Dockerfile | |
platforms: ${{ env.build_base_image_alpine_platform }} | |
push: ${{ needs.check_preview.outputs.enable_build_publish == 'true' }} | |
build-args: | | |
BASE_IMAGE=${{ env.build_base_image_alpine }} | |
BUILD_DATE=${{ needs.check_preview.outputs.build_date }} | |
IMAGE_VERSION=${{ needs.check_preview.outputs.release_version }} | |
IMAGE_TYPE=preview-alpine | |
TACHIDESK_GIT_COMMIT=${{ needs.check_preview.outputs.release_commit }} | |
TACHIDESK_RELEASE_TAG=${{ needs.check_preview.outputs.release_tag }} | |
TACHIDESK_RELEASE_DOWNLOAD_URL=${{ needs.check_preview.outputs.release_url }} | |
TACHIDESK_FILENAME=${{ needs.check_preview.outputs.release_filename }} | |
STARTUP_SCRIPT_URL=${{ env.startup_script_url }} | |
TACHIDESK_DOCKER_GIT_COMMIT=${{ needs.check_preview.outputs.tachidesk_docker_git_commit }} | |
IMAGE_OWNER=${{ needs.check_preview.outputs.repository_owner_lower }} | |
tags: | | |
ghcr.io/${{ needs.check_preview.outputs.repository_owner_lower }}/${{ env.build_repo_docker }}:preview-alpine | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
- name: save preview release | |
run: | | |
cd main | |
git pull | |
echo "`jq '.preview="${{ needs.check_preview.outputs.release_tag }}"' scripts/tachidesk_version.json`" > scripts/tachidesk_version.json | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
git status | |
if [ -n "$(git status --porcelain)" ]; then | |
git pull | |
git add . | |
git commit -m "Update current preview version" | |
git push | |
else | |
echo "No changes to commit" | |
fi | |
- name: discord webhook preview | |
if: ${{ needs.check_preview.outputs.enable_discord_hook == 'true' }} | |
id: discord_webhook_preview | |
run: | | |
curl -H "Content-Type: application/json" -d '{"content": "Docker Preview Image Published!","embeds":[{"color":16729344,"author":{"name":"${{ github.repository_owner }}","icon_url":"https://avatars.githubusercontent.com/u/81182076","url":"https://github.com/${{ github.repository_owner }}"},"title":"Docker Preview Release","url":"https://github.com/${{ github.repository_owner }}/docker-tachidesk","fields":[{"name":"docker update","value":"docker pull ghcr.io/${{ needs.check_preview.outputs.repository_owner_lower }}/tachidesk:preview","inline":false},{"name":"docker run","value":"docker run -p 4567:4567 ghcr.io/${{ needs.check_preview.outputs.repository_owner_lower }}/tachidesk:preview","inline":false}],"thumbnail":{"url": "https://www.docker.com/sites/default/files/d8/2019-07/vertical-logo-monochromatic.png"},"description":"Tachidesk version - ${{ needs.check_preview.outputs.release_tag }}"}]}' "https://discord.com/api/webhooks/${{ secrets.DISCORD_TACHIDESK_WEBHOOK_ID }}/${{ secrets.DISCORD_TACHIDESK_TOKEN }}" |