Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Add support for Squeezelite R2 #268 #269

Merged
merged 1 commit into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 32 additions & 29 deletions .github/workflows/docker-multi-arch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ jobs:
fail-fast: false
matrix:
base: [ stable ]
sourceforge: [ Y, N]
build_mode: [ full, pulse, alsa ]
#exclude:
# - base: stable
# sourceforge: Y
# build_mode: alsa
# - base: stable
# sourceforge: Y
# build_mode: pulse
build_mode: [ std, sf, r2 ]
binary_mode: [ full, pulse, alsa ]
exclude:
- base: stable
build_mode: r2
binary_mode: full
- base: stable
build_mode: r2
binary_mode: pulse

steps:
- name: Checkout
Expand All @@ -46,7 +46,7 @@ jobs:
echo "REF: ["$ref"]"

build_platforms="linux/amd64,linux/arm64/v8,linux/arm/v7"
if [ ${{ matrix.sourceforge }} = "N" ]; then
if [[ ${{ matrix.build_mode }} = "std" ]] || [[ ${{ matrix.build_mode }} = "r2" ]]; then
build_platforms="${build_platforms},linux/arm/v5"
fi

Expand All @@ -65,26 +65,29 @@ jobs:
sl_versions[stable]=1.9.9

declare -A special_tags
special_tags[stable-N-full]="${image_name}:latest,${image_name}:stable"
special_tags[stable-N-alsa]="${image_name}:latest-alsa,${image_name}:stable-alsa"
special_tags[stable-N-pulse]="${image_name}:latest-pulse,${image_name}:stable-pulse"
special_tags[stable-Y-full]="${image_name}:sourceforge-latest,${image_name}:sourceforge-stable"
special_tags[stable-Y-alsa]="${image_name}:sourceforge-latest-alsa,${image_name}:sourceforge-stable-alsa"
special_tags[stable-Y-pulse]="${image_name}:sourceforge-latest-pulse,${image_name}:sourceforge-stable-pulse"
special_tags[stable-std-full]="${image_name}:latest,${image_name}:stable"
special_tags[stable-std-alsa]="${image_name}:latest-alsa,${image_name}:stable-alsa"
special_tags[stable-std-pulse]="${image_name}:latest-pulse,${image_name}:stable-pulse"
special_tags[stable-sf-full]="${image_name}:sourceforge-latest,${image_name}:sourceforge-stable"
special_tags[stable-sf-alsa]="${image_name}:sourceforge-latest-alsa,${image_name}:sourceforge-stable-alsa"
special_tags[stable-sf-pulse]="${image_name}:sourceforge-latest-pulse,${image_name}:sourceforge-stable-pulse"
special_tags[stable-r2-alsa]="${image_name}:r2-latest-alsa,${image_name}:r2-stable-alsa"

declare -A distro_friendly_name_dict
distro_friendly_name_dict[stable]=debian

distro_friendly_name=${{ matrix.base }}
build_mode=${{ matrix.build_mode }}
binary_mode=${{ matrix.binary_mode }}
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
if [ ${{ matrix.build_mode }} = "sf" ]; then
squeezelite_version_str="squeezelite-1.9.9-sourceforge"
elif [ ${{ matrix.build_mode }} = "r2" ]; then
squeezelite_version_str="squeezelite-1.8.4-r2"
else
select_squeezelite_version=unknown
select_squeezelite_version=${sl_versions[${{ matrix.base }}]}
Expand Down Expand Up @@ -112,11 +115,11 @@ jobs:
echo "tag_name=[$tag_name]"
if [[ "${tag_type}" == "release" || "${tag_type}" == "v" ]]; then
echo "release tag"
tags="$image_name:${distro_friendly_name}-${build_mode}-${squeezelite_version_str}"
tags="$tags,$image_name:${distro_friendly_name}-${build_mode}-${squeezelite_version_str}-${tag_name}"
special_tag_lookup="${{ matrix.base }}-${{ matrix.sourceforge }}-${{ matrix.build_mode }}"
tags="$image_name:${distro_friendly_name}-${binary_mode}-${squeezelite_version_str}"
tags="$tags,$image_name:${distro_friendly_name}-${binary_mode}-${squeezelite_version_str}-${tag_name}"
special_tag_lookup="${{ matrix.base }}-${{ matrix.build_mode }}-${{ matrix.binary_mode }}"
select_special_tags=${special_tags["${special_tag_lookup}"]}
building_now="${distro_friendly_name}-${build_mode}-${{ matrix.sourceforge }}"
building_now="${distro_friendly_name}-${binary_mode}-${{ matrix.build_mode }}"
echo "Building now: ["$building_now"]"
if [[ -n "${select_special_tags}" ]]; then
echo "Found special tags for ["${building_now}"]=["${select_special_tags}"]"
Expand All @@ -126,21 +129,21 @@ jobs:
fi
elif [[ "${tag_type}" == "feature" || "${tag_type}" == "f" ]]; then
echo "feature tag"
tags="${image_name}:feature-${tag_name}-${distro_friendly_name}-${build_mode}-${squeezelite_version_str}"
tags="${image_name}:feature-${tag_name}-${distro_friendly_name}-${binary_mode}-${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}-${build_mode}"
if [ ${{ matrix.build_mode }} = "N" ]; then
tags="${tags},${image_name}:daily-${distro_friendly_name}-${binary_mode}"
else
tags="${tags},${image_name}:daily-${distro_friendly_name}-${build_mode}-sourceforge"
tags="${tags},${image_name}:daily-${distro_friendly_name}-${binary_mode}-sourceforge"
fi
tags="${tags},${image_name}:daily-${distro_friendly_name}-${build_mode}-${squeezelite_version_str}"
tags="${tags},${image_name}:daily-${distro_friendly_name}-${binary_mode}-${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_MODE=${{ matrix.build_mode }}" >> $GITHUB_OUTPUT
echo "BUILD_PLATFORMS=${build_platforms}" >> $GITHUB_OUTPUT

- name: Set up QEMU
Expand All @@ -164,8 +167,8 @@ jobs:
context: .
build-args: |
BASE_IMAGE=${{ steps.prepare.outputs.BASE_IMAGE }}
DOWNLOAD_FROM_SOURCEFORGE=${{ matrix.sourceforge }}
BUILD_MODE=${{ matrix.build_mode }}
BINARY_MODE=${{ matrix.binary_mode }}
platforms: ${{ steps.prepare.outputs.BUILD_PLATFORMS }}
push: true
tags: ${{ steps.prepare.outputs.RELEASE_TAGS }}
21 changes: 13 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ARG BASE_IMAGE
FROM ${BASE_IMAGE} AS BASE
ARG DOWNLOAD_FROM_SOURCEFORGE
ARG BUILD_MODE
ARG BINARY_MODE
ARG FORCE_ARCH
ARG USE_APT_PROXY

Expand All @@ -18,25 +18,30 @@ RUN if [ "${USE_APT_PROXY}" = "Y" ]; then \
echo "Building without apt proxy"; \
fi

RUN mkdir -p /app/bin

# copy installer files
RUN mkdir -p /app/install

COPY install/install-dep.sh /app/install/
RUN chmod u+x /app/install/install-dep.sh
COPY install/installer.sh /app/install/
COPY install/remove-dep.sh /app/install/

RUN /app/install/install-dep.sh
RUN rm /app/install/install-dep.sh
RUN chmod u+x /app/install/*.sh

COPY install/installer.sh /app/install/
RUN chmod u+x /app/install/*
RUN /app/install/install-dep.sh

WORKDIR /app/install

RUN mkdir -p /app/bin

# execute installation
RUN /app/install/installer.sh

RUN /app/install/remove-dep.sh

RUN rm /app/install/install-dep.sh
RUN rm /app/install/installer.sh
RUN rm /app/install/remove-dep.sh

# cleanup apt proxy config
RUN if [ "${USE_APT_PROXY}" = "Y" ]; then \
rm /etc/apt/apt.conf.d/01-apt-proxy; \
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ Now also with multiplatform support thanks to [Der-Henning](https://github.com/D

## News

### Squeezelite R2 variant

Since 2024-01-19 (see issue [#268](https://github.com/GioF71/squeezelite-docker/issues/268)) I am building separate builds for [Squeezelite R2](https://github.com/marcoc1712/squeezelite-R2), only in alsa mode.
This patched version allows server-side transcoding, also to DSD format, which some user might like to use.

### Alsa and PulseAudio variants

Since 2023-12-30 (see issue [#254](https://github.com/GioF71/squeezelite-docker/issues/254)) I am building separate builds for alsa and pulseaudio only. The [alsa sourceforge version](https://hub.docker.com/r/giof71/squeezelite/tags?page=1&name=debian-alsa-sourceforge) results in a particularily small image. Maybe the pulse version can be reduced in size, but I still need to perform a few tests in order to verify that I can remove some packages.
Expand Down
42 changes: 22 additions & 20 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# error codes
# 2 Invalid base image
# 3 Invalid download parameter
# 3 Invalid build_mode parameter
# 4 Invalid proxy parameter

declare -A base_images
Expand Down Expand Up @@ -42,21 +42,21 @@ base_images[ubuntu:mantic]=ubuntu:mantic
base_images[ubuntu:rolling]=ubuntu:rolling

DEFAULT_BASE_IMAGE=stable
DEFAULT_SOURCEFORGE_DOWNLOAD=N
DEFAULT_BUILD_MODE=std
DEFAULT_TAG=local
DEFAULT_USE_PROXY=N

download=$DEFAULT_SOURCEFORGE_DOWNLOAD
build_mode=$DEFAULT_BUILD_MODE
tag=$DEFAULT_TAG

while getopts b:d:t:p:m:f: flag
do
case "${flag}" in
b) base_image=${OPTARG};;
d) download=${OPTARG};;
d) build_mode=${OPTARG};;
t) tag=${OPTARG};;
p) proxy=${OPTARG};;
m) build_mode=${OPTARG};;
m) binary_mode=${OPTARG};;
f) force_arch=${OPTARG};;
esac
done
Expand All @@ -66,7 +66,7 @@ echo "Input: Download from SourceForge = [$sd]";
echo "Input: Force Architecture = [$force_arch]";
echo "Input: Image Tag = [$tag]";
echo "Input: Proxy = [$proxy]";
echo "Input: Build mode = [$build_mode]";
echo "Input: Binary mode = [$binary_mode]";

if [ -z "${base_image}" ]; then
base_image=$DEFAULT_BASE_IMAGE
Expand All @@ -78,16 +78,18 @@ if [ -z "${expanded_base_image}" ]; then
exit 2
fi

if [ -z "${download}" ]; then
download="Y"
if [ -z "${build_mode}" ]; then
build_mode="Y"
fi

if [[ "${download}" == "Y" || "${download}" == "y" ]]; then
download="Y"
elif [[ "${download}" == "N" || "${download}" == "n" ]]; then
download="N"
if [[ "${build_mode^^}" == "SF" ]]; then
build_mode="sf"
elif [[ "${build_mode^^}" == "STD" ]]; then
build_mode="std"
elif [[ "${build_mode^^}" == "R2" ]]; then
build_mode="r2"
else
echo "invalid download parameter ["${download}"]"
echo "invalid build_mode parameter ["${build_mode}"]"
exit 3
fi

Expand All @@ -103,26 +105,26 @@ else
exit 4
fi

if [[ -z "${build_mode}" ]]; then
build_mode=full
if [[ -z "${binary_mode}" ]]; then
binary_mode=full
else
if [[ ! "${build_mode^^}" == "ALSA" ]] && [[ ! "${build_mode^^}" == "PULSE" ]] && [[ ! "${build_mode^^}" == "FULL" ]]; then
echo "invalid build_mode parameter ["${build_mode}"]"
if [[ ! "${binary_mode^^}" == "ALSA" ]] && [[ ! "${binary_mode^^}" == "PULSE" ]] && [[ ! "${binary_mode^^}" == "FULL" ]]; then
echo "invalid binary_mode parameter ["${binary_mode}"]"
exit 4
fi
fi

echo "Build Argument: Base Image = ["$expanded_base_image"]"
echo "Build Argument: Download from SourceForge = ["$download"]"
echo "Build Argument: Download from SourceForge = ["$build_mode"]"
echo "Build Argument: Force Architecture = [$force_arch]";
echo "Build Argument: Image Tag = ["$tag"]"
echo "Build Argument: Build Mode = ["$build_mode"]"
echo "Build Argument: Binary Mode = ["$binary_mode"]"
echo "Build Argument: Proxy = ["$proxy"]"

docker build . \
--build-arg BASE_IMAGE=${expanded_base_image} \
--build-arg DOWNLOAD_FROM_SOURCEFORGE=${download} \
--build-arg BUILD_MODE=${build_mode} \
--build-arg BINARY_MODE=${binary_mode} \
--build-arg FORCE_ARCH=${force_arch} \
--build-arg USE_APT_PROXY=${proxy} \
-t giof71/squeezelite:$tag \
Expand Down
23 changes: 19 additions & 4 deletions install/install-dep.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#!/bin/bash

if [[ "$DOWNLOAD_FROM_SOURCEFORGE" == "Y" ]]; then
if [[ "$BUILD_MODE" == "sf" ]]; then
echo "Using sourceforge binaries, installing required dependencies - BEGIN"
apt-get update
if [[ -z "${BUILD_MODE^^}" ]] || [[ "${BUILD_MODE^^}" == "FULL" ]] || [[ "${BUILD_MODE^^}" == "ALSA" ]]; then
if [[ -z "${BINARY_MODE^^}" ]] || [[ "${BINARY_MODE^^}" == "FULL" ]] || [[ "${BINARY_MODE^^}" == "ALSA" ]]; then
echo "Installing support for Alsa ..."
apt-get install --no-install-recommends -y libasound2
echo "Support for Alsa installed."
fi
if [[ -z "${BUILD_MODE^^}" ]] || [[ "${BUILD_MODE^^}" == "FULL" ]] || [[ "${BUILD_MODE^^}" == "PULSE" ]]; then
if [[ -z "${BINARY_MODE^^}" ]] || [[ "${BINARY_MODE^^}" == "FULL" ]] || [[ "${BINARY_MODE^^}" == "PULSE" ]]; then
echo "Installing support for PulseAudio ..."
apt-get install --no-install-recommends -y \
libavcodec59 \
Expand All @@ -28,4 +28,19 @@ if [[ "$DOWNLOAD_FROM_SOURCEFORGE" == "Y" ]]; then
echo "Support for PulseAudio installed."
fi
echo "Using sourceforge binaries, installing required dependencies - END"
fi
elif [[ "$BUILD_MODE" == "std" ]]; then
echo "Using standard packages, no additional dependencies required."
elif [[ "$BUILD_MODE" == "r2" ]]; then
echo "Preparing for Squeezelite R2 (compiling)"
apt-get update
apt-get install -y \
git \
build-essential \
libasound2 \
libasound2-dev \
libflac-dev \
libmad0-dev \
libfaad-dev \
libmpg123-dev \
libvorbis-dev
fi
Loading