[Enhancement] Add config file prefix variable #249 (#251) #448
Workflow file for this run
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: Publish Regular multi-arch Docker images | |
on: | |
push: | |
tags: | |
- "release/*" | |
- "feature/*" | |
- "daily/*" | |
- "v*" # release | |
- "f*" # feature | |
- "d*" # daily | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
base: ["stable"] | |
sourceforge: ["Y", "N"] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Prepare for docker build | |
id: prepare | |
run: | | |
image_name=${{secrets.DOCKER_USERNAME}}/squeezelite | |
ref_type=${{ github.ref_type }} | |
echo "REF_TYPE: ["$ref_type"]" | |
ref_name=${{ github.ref_name }} | |
echo "REF_NAME: ["$ref_name"]" | |
ref=${{ github.ref }} | |
echo "REF: ["$ref"]" | |
build_platforms="linux/amd64,linux/arm64/v8,linux/arm/v7" | |
if [ ${{ matrix.sourceforge }} = "N" ]; then | |
build_platforms="${build_platforms},linux/arm/v5" | |
fi | |
declare -A base_image_from_matrix | |
base_image_from_matrix[sid]=debian:sid-slim | |
base_image_from_matrix[trixie]=debian:trixie-slim | |
base_image_from_matrix[bookworm]=debian:bookworm-slim | |
select_base_image=${base_image_from_matrix[${{ matrix.base }}]} | |
if [ -z "${select_base_image}" ]; then | |
select_base_image=debian:stable-slim | |
fi | |
echo "Select Base Image [" $select_base_image "]" | |
declare -A sl_versions | |
sl_versions[stable]=1.9.9 | |
sl_versions[bookworm]=1.9.9 | |
sl_versions[trixie]=1.9.9 | |
sl_versions[sid]=1.9.9 | |
declare -A special_tags | |
special_tags[stable-N]="${image_name}:latest,${image_name}:stable" | |
special_tags[stable-Y]="${image_name}:sourceforge-latest,${image_name}:sourceforge-stable" | |
special_tags[bookworm-N]="${image_name}:latest,${image_name}:stable" | |
special_tags[bookworm-Y]="${image_name}:sourceforge-latest,${image_name}:sourceforge-stable" | |
special_tags[trixie-N]="${image_name}:nextstable" | |
special_tags[trixie-Y]="${image_name}:sourceforge-nextstable" | |
special_tags[sid-Y]="${image_name}:sourceforge-edge" | |
special_tags[sid-N]="${image_name}:edge" | |
declare -A distro_friendly_name_dict | |
distro_friendly_name_dict[stable]=debian | |
distro_friendly_name=${{ matrix.base }} | |
lookup_distro_name=${distro_friendly_name_dict[${{ matrix.base }}]} | |
if [ -n "${lookup_distro_name}" ]; then | |
distro_friendly_name=$lookup_distro_name | |
fi | |
squeezelite_version_str="" | |
if [ ${{ matrix.sourceforge }} = "Y" ]; then | |
squeezelite_version_str="squeezelite-1.9.9-sourceforge" | |
else | |
select_squeezelite_version=unknown | |
select_squeezelite_version=${sl_versions[${{ matrix.base }}]} | |
if [ -z "${select_squeezelite_version}" ]; then | |
select_squeezelite_version=version-unknown | |
fi | |
echo "Version from dictionary: "$select_squeezelite_version" from ["${{ matrix.base }}"]" | |
squeezelite_version_str="squeezelite-"$select_squeezelite_version | |
fi | |
tags="" | |
if [ "${ref_type}" = "tag" ]; then | |
echo "tag mode" | |
echo "tag is ["${ref_name}"]" | |
if [[ "${ref_name}" = *"/"* ]]; then | |
tag_type=$(echo ${ref_name} | cut -d '/' -f 1) | |
tag_name=$(echo ${ref_name} | cut -d '/' -f 2) | |
else | |
if [[ "${ref_name}" = "v"* || "${ref_name}" = "f"* || "${ref_name}" = "d"* ]]; then | |
tag_type=${ref_name:0:1} | |
tag_name=${ref_name:1} | |
fi | |
fi | |
echo "tag_type=[$tag_type]" | |
echo "tag_name=[$tag_name]" | |
if [[ "${tag_type}" == "release" || "${tag_type}" == "v" ]]; then | |
echo "release tag" | |
tags="$image_name:${distro_friendly_name}-${squeezelite_version_str}" | |
tags="$tags,$image_name:${distro_friendly_name}-${squeezelite_version_str}-${tag_name}" | |
special_tag_lookup="${{ matrix.base }}-${{ matrix.sourceforge }}" | |
select_special_tags=${special_tags["${special_tag_lookup}"]} | |
building_now="${distro_friendly_name}-${{ matrix.sourceforge }}" | |
echo "Building now: ["$building_now"]" | |
if [[ -n "${select_special_tags}" ]]; then | |
echo "Found special tags for ["${building_now}"]=["${select_special_tags}"]" | |
tags="$tags,${select_special_tags}" | |
else | |
echo "No special tags found for ["${building_now}"]" | |
fi | |
if [ ${{ matrix.sourceforge }} = "N" ]; then | |
tags="${tags},$image_name:${distro_friendly_name}" | |
else | |
tags="${tags},$image_name:${distro_friendly_name}-sourceforge" | |
fi | |
elif [[ "${tag_type}" == "feature" || "${tag_type}" == "f" ]]; then | |
echo "feature tag" | |
tags="${image_name}:feature-${tag_name}-${distro_friendly_name}-${squeezelite_version_str}" | |
elif [[ "${tag_type}" = "daily" || "${tag_type}" = "d" ]]; then | |
echo "daily build" | |
if [ ${{ matrix.sourceforge }} = "N" ]; then | |
tags="${tags},${image_name}:daily-${distro_friendly_name}" | |
else | |
tags="${tags},${image_name}:daily-${distro_friendly_name}-sourceforge" | |
fi | |
tags="${tags},${image_name}:daily-${distro_friendly_name}-${squeezelite_version_str}" | |
fi | |
fi | |
echo "Building tags: ["${tags}"]" | |
echo "RELEASE_TAGS=${tags}" >> $GITHUB_OUTPUT | |
echo "BASE_IMAGE=${select_base_image}" >> $GITHUB_OUTPUT | |
echo "DOWNLOAD_FROM_SOURCEFORGE=N" >> $GITHUB_OUTPUT | |
echo "BUILD_PLATFORMS=${build_platforms}" >> $GITHUB_OUTPUT | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: all | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Build and push | |
uses: docker/build-push-action@v3 | |
with: | |
context: . | |
build-args: | | |
BASE_IMAGE=${{ steps.prepare.outputs.BASE_IMAGE }} | |
DOWNLOAD_FROM_SOURCEFORGE=${{ matrix.sourceforge }} | |
platforms: ${{ steps.prepare.outputs.BUILD_PLATFORMS }} | |
push: true | |
tags: ${{ steps.prepare.outputs.RELEASE_TAGS }} |