Skip to content

Build Container Images #693

Build Container Images

Build Container Images #693

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 }}"