Merge pull request #1550 from charlesomer/master
Docker build changes, github action updates.
This commit is contained in:
@@ -1,83 +0,0 @@
|
||||
# Builds & pushes a docker image when a "formal" release tag of the format X, X.Y or X.Y.Z occurs, where X, Y and Z are all numbers.
|
||||
# It seems this yaml has to exist on the branch the tag refers to.
|
||||
|
||||
# Thanks to Charles Omer for the workfow upon which this is based.
|
||||
|
||||
# The following docker tags are created & pushed:
|
||||
# trial, trial-classic
|
||||
# not building 'latest' yet...
|
||||
|
||||
name: Formal (X, X.Y or X.Y.Z) release tags -- docker build and push.
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+' # e.g. 8.9.0
|
||||
- '[0-9]+\.[0-9]+' # e.g. 8.9
|
||||
- '[0-9]+' # e.g. 8
|
||||
- '[0-9]+\.[0-9]+rc[0-9]+' # e.g. 4.1rc0
|
||||
|
||||
env:
|
||||
DOCKER_PLATFORMS: linux/386,linux/amd64,linux/arm/v6,linux/arm64,linux/arm/v7
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set SHAIRPORT_SYNC_BRANCH env.
|
||||
run: |
|
||||
raw=$(git branch -r --contains ${{ github.ref }})
|
||||
branch=${raw##*/}
|
||||
echo "SHAIRPORT_SYNC_BRANCH=${branch}" >> $GITHUB_ENV
|
||||
|
||||
- name: Set tag env
|
||||
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 1).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'development' }}
|
||||
run: echo "NQPTP_BRANCH=development" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 2).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH != 'development' }}
|
||||
run: echo "NQPTP_BRANCH=main" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Login to Docker Registry
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ${{ secrets.DOCKER_REGISTRY }}
|
||||
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./
|
||||
file: ./docker/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
tags: trial
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
NQPTP_BRANCH=${{ env.NQPTP_BRANCH }}
|
||||
|
||||
- name: Build and push (Classic)
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./
|
||||
file: ./docker/classic/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
tags: trial-classic
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
@@ -1,14 +1,19 @@
|
||||
# Builds & pushes a docker image when a commit is made to one of the branches specified below.
|
||||
# Tag pattern: 'unstable-[BRANCH NAME]' & 'unstable-[BRANCH NAME]-classic'
|
||||
# Builds a docker image when a commit is made. Also pushes the build if the branch is 'master' or 'development'.
|
||||
|
||||
name: Build and push docker image based on commit to specified branches.
|
||||
# Tag pattern
|
||||
# 'master' - latest, latest-classic
|
||||
# 'development' - development, development-classic
|
||||
|
||||
name: Build and push docker (commit)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ development ]
|
||||
branches:
|
||||
- '**'
|
||||
|
||||
env:
|
||||
DOCKER_PLATFORMS: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
|
||||
NQPTP_BRANCH: main
|
||||
|
||||
jobs:
|
||||
main:
|
||||
@@ -22,13 +27,16 @@ jobs:
|
||||
- name: Set SHAIRPORT_SYNC_BRANCH env.
|
||||
run: echo "SHAIRPORT_SYNC_BRANCH=${GITHUB_REF##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 1).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'development' }}
|
||||
run: echo "NQPTP_BRANCH=development" >> $GITHUB_ENV
|
||||
- name: Is branch "master"?
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'master' }}
|
||||
run: |
|
||||
echo "IMAGE_TAG_BASE=latest" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 2).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH != 'development' }}
|
||||
run: echo "NQPTP_BRANCH=main" >> $GITHUB_ENV
|
||||
- name: Is branch "development"?
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'development' }}
|
||||
run: |
|
||||
echo "NQPTP_BRANCH=development" >> $GITHUB_ENV
|
||||
echo "IMAGE_TAG_BASE=development" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
@@ -43,33 +51,25 @@ jobs:
|
||||
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
|
||||
- name: Set tag start (part 1).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'master' }}
|
||||
run: echo "IMAGE_TAG_BASE=unstable" >> $GITHUB_ENV
|
||||
|
||||
- name: Set tag start (part 2).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH != 'master' }}
|
||||
run: echo "IMAGE_TAG_BASE=unstable-${{ env.SHAIRPORT_SYNC_BRANCH }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./
|
||||
file: ./docker/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
push: ${{ env.IMAGE_TAG_BASE != '' }}
|
||||
tags: ${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.IMAGE_TAG_BASE }}
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
NQPTP_BRANCH=${{ env.NQPTP_BRANCH }}
|
||||
|
||||
- name: Build and push (AirPlay 1)
|
||||
- name: Build and push (classic)
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./
|
||||
file: ./docker/classic/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
push: ${{ env.IMAGE_TAG_BASE != '' }}
|
||||
tags: ${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.IMAGE_TAG_BASE }}-classic
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
@@ -1,18 +1,22 @@
|
||||
# Builds & pushes a docker image when a tag occurs.
|
||||
# It seems this yaml has to exist on the branch the tag refers to.
|
||||
# Builds & pushes a docker image when a tag is created.
|
||||
# Tag pattern: '[tag]' & '[tag]-classic'
|
||||
# 'stable' & 'stable-classic' also, when master tagged.
|
||||
|
||||
# The following docker tags are created & pushed:
|
||||
# [RELEASE TAG], [RELEASE TAG]-classic,
|
||||
# Only pushes the tag when it matches one of the following patterns:
|
||||
# X, X.Y or X.Y.Z
|
||||
|
||||
name: Build and push docker images on releases.
|
||||
name: Build and push docker (tag)
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*' # Push events to every tag (not containing '/')
|
||||
- '[0-9]+' # X
|
||||
- '[0-9]+\.[0-9]+' # X.Y
|
||||
- '[0-9]+\.[0-9]+\.[0-9]+' # X.Y.Z
|
||||
|
||||
env:
|
||||
DOCKER_PLATFORMS: linux/386,linux/amd64,linux/arm/v6,linux/arm64,linux/arm/v7
|
||||
NQPTP_BRANCH: main
|
||||
|
||||
jobs:
|
||||
main:
|
||||
@@ -32,22 +36,23 @@ jobs:
|
||||
- name: Set tag env
|
||||
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 1).
|
||||
- name: Is branch "master"?
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'master' }}
|
||||
run: echo "STABLE_TAG=true" >> $GITHUB_ENV
|
||||
|
||||
- name: Is branch "development"?
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH == 'development' }}
|
||||
run: echo "NQPTP_BRANCH=development" >> $GITHUB_ENV
|
||||
|
||||
- name: Determine NQPTP env (part 2).
|
||||
if: ${{ env.SHAIRPORT_SYNC_BRANCH != 'development' }}
|
||||
run: echo "NQPTP_BRANCH=main" >> $GITHUB_ENV
|
||||
run: |
|
||||
echo "NQPTP_BRANCH=development" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Login to Docker Registry
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ${{ secrets.DOCKER_REGISTRY }}
|
||||
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
||||
@@ -60,18 +65,22 @@ jobs:
|
||||
file: ./docker/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
tags: ${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.GIT_TAG }}
|
||||
tags: |
|
||||
${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.GIT_TAG }}
|
||||
${{ env.STABLE_TAG == 'true' && format('{0}:stable', secrets.DOCKER_IMAGE_NAME) || '' }}
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
NQPTP_BRANCH=${{ env.NQPTP_BRANCH }}
|
||||
|
||||
- name: Build and push (Classic)
|
||||
- name: Build and push (classic)
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: ./
|
||||
file: ./docker/classic/Dockerfile
|
||||
platforms: ${{ env.DOCKER_PLATFORMS }}
|
||||
push: true
|
||||
tags: ${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.GIT_TAG }}-classic
|
||||
tags: |
|
||||
${{ secrets.DOCKER_IMAGE_NAME }}:${{ env.GIT_TAG }}-classic
|
||||
${{ env.STABLE_TAG == 'true' && format('{0}:stable-classic', secrets.DOCKER_IMAGE_NAME) || '' }}
|
||||
build-args: |
|
||||
SHAIRPORT_SYNC_BRANCH=${{ env.SHAIRPORT_SYNC_BRANCH }}
|
||||
+19
-8
@@ -2,21 +2,32 @@
|
||||
|
||||
Available at: https://hub.docker.com/r/mikebrady/shairport-sync
|
||||
|
||||
Please note if you want the development version of the image including Airplay 2 support, please pull the image with the ```unstable development``` tag using the following command:
|
||||
```
|
||||
docker pull mikebrady/shairport-sync:unstable-development
|
||||
The following docker tags are available:
|
||||
```
|
||||
[tag]
|
||||
[tag]-classic
|
||||
|
||||
When using the below commands, you should replace mikebrady/shairport-sync with mikbrady/shairport-sync:unstable-development.
|
||||
(build from newest tag)
|
||||
stable
|
||||
stable-classic
|
||||
|
||||
(latest build from master)
|
||||
latest
|
||||
latest-classic
|
||||
|
||||
(latest build from development)
|
||||
development
|
||||
development-classic
|
||||
```
|
||||
|
||||
## Example Docker Compose File
|
||||
See the `docker-compose.yaml` file in this folder for an example.
|
||||
|
||||
## Docker Run
|
||||
## Example Docker Run
|
||||
|
||||
```
|
||||
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
|
||||
mikebrady/shairport-sync
|
||||
mikebrady/shairport-sync:<tag>
|
||||
```
|
||||
|
||||
### Options
|
||||
@@ -24,7 +35,7 @@ $ docker run -d --restart unless-stopped --net host --device /dev/snd \
|
||||
You can change the default commands passed to Shairport Sync. Here is an example:
|
||||
```
|
||||
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
|
||||
mikebrady/shairport-sync:unstable-development shairport-sync -v \
|
||||
mikebrady/shairport-sync:<tag> shairport-sync -v \
|
||||
--statistics -a DenSystem -d hw:0 -c PCM
|
||||
```
|
||||
This will sent audio to alsa hardware device `hw:0` and make use of the that device's mixer control called `PCM`. The service will be visible as `DenSystem` on the network.
|
||||
@@ -53,4 +64,4 @@ Requires the following secrets to be set in the repo:
|
||||
- `DOCKER_REGISTRY` - docker.io if using Docker Hub, else set to your registry URL.
|
||||
- `DOCKER_REGISTRY_TOKEN` - Access token for your registry.
|
||||
- `DOCKER_REGISTRY_USER` - Login user for your registry.
|
||||
- `DOCKER_IMAGE_NAME` - The name of the image, for example `your-registry.com/shairport-sync` or just `your-username/shairport-sync` if using Docker Hub.
|
||||
- `DOCKER_IMAGE_NAME` - The name of the image, for example `your-registry.com/shairport-sync` or just `your-username/shairport-sync` if using Docker Hub.
|
||||
@@ -1,103 +0,0 @@
|
||||
FROM alpine:3.12 AS builder-base
|
||||
# General Build System:
|
||||
RUN apk -U add \
|
||||
git \
|
||||
build-base \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
dbus \
|
||||
su-exec \
|
||||
alsa-lib-dev \
|
||||
libdaemon-dev \
|
||||
popt-dev \
|
||||
mbedtls-dev \
|
||||
soxr-dev \
|
||||
avahi-dev \
|
||||
libconfig-dev \
|
||||
libsndfile-dev \
|
||||
mosquitto-dev \
|
||||
xmltoman
|
||||
|
||||
# ALAC Build System:
|
||||
FROM builder-base AS builder-alac
|
||||
|
||||
RUN git clone https://github.com/mikebrady/alac
|
||||
WORKDIR alac
|
||||
RUN autoreconf -fi
|
||||
RUN ./configure
|
||||
RUN make
|
||||
RUN make install
|
||||
|
||||
# Shairport Sync Build System:
|
||||
FROM builder-base AS builder-sps
|
||||
|
||||
# This will be modified by the Github Action Workflow and is required
|
||||
# to ensure the correct branch is being used.
|
||||
ARG SHAIRPORT_SYNC_BRANCH
|
||||
RUN test -n "$SHAIRPORT_SYNC_BRANCH"
|
||||
|
||||
COPY --from=builder-alac /usr/local/lib/libalac.* /usr/local/lib/
|
||||
COPY --from=builder-alac /usr/local/lib/pkgconfig/alac.pc /usr/local/lib/pkgconfig/alac.pc
|
||||
COPY --from=builder-alac /usr/local/include /usr/local/include
|
||||
|
||||
WORKDIR shairport-sync
|
||||
COPY . .
|
||||
RUN git checkout "$SHAIRPORT_SYNC_BRANCH"
|
||||
RUN autoreconf -fi
|
||||
RUN ./configure \
|
||||
--with-alsa \
|
||||
--with-dummy \
|
||||
--with-pipe \
|
||||
--with-stdout \
|
||||
--with-avahi \
|
||||
--with-ssl=mbedtls \
|
||||
--with-soxr \
|
||||
--sysconfdir=/etc \
|
||||
--with-dbus-interface \
|
||||
--with-mpris-interface \
|
||||
--with-mqtt-client \
|
||||
--with-apple-alac \
|
||||
--with-convolution
|
||||
RUN make -j $(nproc)
|
||||
RUN make install
|
||||
|
||||
# Shairport Sync Runtime System:
|
||||
FROM alpine:3.12
|
||||
|
||||
RUN apk -U add \
|
||||
alsa-lib \
|
||||
dbus \
|
||||
popt \
|
||||
glib \
|
||||
mbedtls \
|
||||
soxr \
|
||||
avahi \
|
||||
libconfig \
|
||||
libsndfile \
|
||||
mosquitto-libs \
|
||||
su-exec \
|
||||
libgcc \
|
||||
libgc++
|
||||
|
||||
RUN rm -rf /lib/apk/db/*
|
||||
|
||||
COPY --from=builder-alac /usr/local/lib/libalac.* /usr/local/lib/
|
||||
COPY --from=builder-sps /etc/shairport-sync* /etc/
|
||||
COPY --from=builder-sps /etc/dbus-1/system.d/shairport-sync-dbus.conf /etc/dbus-1/system.d/
|
||||
COPY --from=builder-sps /etc/dbus-1/system.d/shairport-sync-mpris.conf /etc/dbus-1/system.d/
|
||||
COPY --from=builder-sps /usr/local/bin/shairport-sync /usr/local/bin/shairport-sync
|
||||
|
||||
# Create non-root user for running the container -- running as the user 'shairport-sync' also allows
|
||||
# Shairport Sync to provide the D-Bus and MPRIS interfaces within the container
|
||||
|
||||
RUN addgroup shairport-sync
|
||||
RUN adduser -D shairport-sync -G shairport-sync
|
||||
|
||||
# Add the shairport-sync user to the pre-existing audio group, which has ID 29, for access to the ALSA stuff
|
||||
RUN addgroup -g 29 docker_audio && addgroup shairport-sync docker_audio
|
||||
|
||||
COPY ./docker/airplay1/start.sh /
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
ENTRYPOINT [ "/start.sh" ]
|
||||
@@ -1,22 +0,0 @@
|
||||
# Original AirPlay 1 Only Docker Image
|
||||
|
||||
## Basic Usage
|
||||
|
||||
```
|
||||
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
|
||||
mikebrady/shairport-sync
|
||||
```
|
||||
The above command will run Shairport Sync as a daemon in a Docker container, accessing the computer's ALSA audio infrastructure. It will send audio to the default output device and make no use of any hardware mixers the default device might have. The AirPlay service name will be the host's `hostname` with the first letter capitalised, e.g. `Ubuntu`.
|
||||
|
||||
## Options
|
||||
|
||||
Any options you add to the command above will be passed to Shairport Sync. Here is an example:
|
||||
```
|
||||
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
|
||||
mikebrady/shairport-sync -a DenSystem -- -d hw:0 -c PCM
|
||||
```
|
||||
This will sent audio to alsa hardware device `hw:0` and make use of the that device's mixer control called `PCM`. The service will be visible as `DenSystem` on the network.
|
||||
|
||||
## Configuration File
|
||||
|
||||
Edit the configuration file `/etc/shairport-sync.conf` in the container (or use the `-v` option to mirror an external copy of `shairport-sync.conf` in to `/etc/shairport-sync.conf`) to get access to the full range of configuration options.
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
rm -rf /var/run/dbus.pid
|
||||
#mkdir -p /var/run/dbus
|
||||
|
||||
dbus-uuidgen --ensure
|
||||
dbus-daemon --system
|
||||
|
||||
avahi-daemon --daemonize --no-chroot
|
||||
|
||||
su-exec shairport-sync shairport-sync "$@"
|
||||
@@ -1,3 +1,3 @@
|
||||
# Classic (AirPlay 1 Only) Docker Image
|
||||
|
||||
See the [Shairport Sync Docker Hub Repo](https://hub.docker.com/r/mikebrady/shairport-sync) for available tags.
|
||||
See the [Shairport Sync Docker Hub Repo](https://hub.docker.com/r/mikebrady/shairport-sync) for available tags.
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
services:
|
||||
shairport-sync:
|
||||
image: mikebrady/shairport-sync
|
||||
image: mikebrady/shairport-sync:<tag>
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
devices:
|
||||
|
||||
Reference in New Issue
Block a user