mirror of
https://github.com/Crunchy-DL/Crunchy-Downloader.git
synced 2026-04-22 01:11:58 +00:00
123 lines
No EOL
3.8 KiB
YAML
123 lines
No EOL
3.8 KiB
YAML
name: Docker From Release
|
|
|
|
on:
|
|
release:
|
|
types:
|
|
- published
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: Release tag to build from
|
|
required: true
|
|
type: string
|
|
asset_contains:
|
|
description: Substring used to find the Linux zip asset
|
|
required: false
|
|
default: linux-x64
|
|
type: string
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
IMAGE_NAME: ${{ github.repository_owner }}/crunchy-downloader-webtop
|
|
|
|
jobs:
|
|
docker:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Resolve release asset
|
|
id: release
|
|
uses: actions/github-script@v7
|
|
env:
|
|
INPUT_TAG: ${{ inputs.tag || '' }}
|
|
INPUT_ASSET_CONTAINS: ${{ inputs.asset_contains || 'linux-x64' }}
|
|
with:
|
|
script: |
|
|
const tag = context.eventName === "release"
|
|
? context.payload.release.tag_name
|
|
: process.env.INPUT_TAG;
|
|
const assetContains = context.eventName === "release"
|
|
? "linux-x64"
|
|
: process.env.INPUT_ASSET_CONTAINS;
|
|
|
|
const { data: release } = await github.rest.repos.getReleaseByTag({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
tag,
|
|
});
|
|
|
|
const asset = release.assets.find(a =>
|
|
a.name.toLowerCase().includes(assetContains.toLowerCase()) &&
|
|
a.name.toLowerCase().endsWith(".zip")
|
|
);
|
|
|
|
if (!asset) {
|
|
core.setFailed(`No release asset containing "${assetContains}" and ending in .zip was found on ${tag}.`);
|
|
return;
|
|
}
|
|
|
|
core.setOutput("tag", tag);
|
|
core.setOutput("asset_name", asset.name);
|
|
core.setOutput("asset_api_url", asset.url);
|
|
core.setOutput("is_prerelease", String(release.prerelease));
|
|
|
|
- name: Download release zip
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
gh api -H "Accept: application/octet-stream" "${{ steps.release.outputs.asset_api_url }}" > release.zip
|
|
|
|
- name: Stage Docker payload
|
|
run: |
|
|
rm -rf docker/crd-linux-x64
|
|
mkdir -p docker/crd-linux-x64 docker/.tmp-release
|
|
unzip -q release.zip -d docker/.tmp-release
|
|
shopt -s dotglob nullglob
|
|
entries=(docker/.tmp-release/*)
|
|
if [ ${#entries[@]} -eq 1 ] && [ -d "${entries[0]}" ]; then
|
|
cp -a "${entries[0]}/." docker/crd-linux-x64/
|
|
else
|
|
cp -a docker/.tmp-release/. docker/crd-linux-x64/
|
|
fi
|
|
test -f docker/crd-linux-x64/CRD
|
|
rm -rf docker/.tmp-release
|
|
|
|
- name: Setup Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to GHCR
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract Docker metadata
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
flavor: |
|
|
latest=false
|
|
tags: |
|
|
type=semver,pattern={{version}},value=${{ steps.release.outputs.tag }}
|
|
type=raw,value=current
|
|
type=raw,value=latest,enable=${{ steps.release.outputs.is_prerelease != 'true' }}
|
|
type=raw,value=stable,enable=${{ steps.release.outputs.is_prerelease != 'true' }}
|
|
|
|
- name: Build and push image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: Dockerfile.webtop
|
|
push: true
|
|
platforms: linux/amd64
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }} |