--- /dev/null
+name: Build multiarch Docker image
+
+on:
+ release:
+ types: [published, prereleased]
+ workflow_dispatch:
+ inputs:
+ logLevel:
+ description: 'Log level'
+ required: true
+ default: 'warning'
+ tag:
+ description: 'Tag to set on docker image (e.g. 0.0.1'
+ required: true
+
+jobs:
+ buildx:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Prepare
+ id: prep
+ run: |
+ DOCKER_IMAGE=musicassistant/music-assistant-server
+ VERSION=latest
+ SHORTREF=${GITHUB_SHA::8}
+ MANUAL_TAG=${{ github.event.inputs.tag }}
+
+ # If a manual tag was supplied, use that
+ if [[ -n $MANUAL_TAG ]]; then
+ VERSION=${MANUAL_TAG}
+
+ # If this is git tag, use the tag name as a docker tag
+ elif [[ $GITHUB_REF == refs/tags/* ]]; then
+ VERSION=${GITHUB_REF#refs/tags/}
+ fi
+ TAGS="${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${SHORTREF}"
+
+ # If the VERSION looks like a version number, assume that
+ # this is the most recent version of the image and also
+ # tag it 'latest'.
+ if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+ TAGS="$TAGS,${DOCKER_IMAGE}:latest"
+ fi
+
+ # Set output parameters.
+ echo ::set-output name=tags::${TAGS}
+ echo ::set-output name=docker_image::${DOCKER_IMAGE}
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+ with:
+ platforms: all
+
+ - name: Set up Docker Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v1
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Build
+ uses: docker/build-push-action@v2
+ with:
+ builder: ${{ steps.buildx.outputs.name }}
+ context: .
+ file: ./Dockerfile
+ platforms: linux/amd64,linux/arm64,linux/armv7
+ push: true
+ tags: ${{ steps.prep.outputs.tags }}
--- /dev/null
+FROM python:3.11.2-alpine3.16
+
+# Add Home Assistant wheels repository
+ENV WHEELS_LINKS=https://wheels.home-assistant.io/musllinux/
+
+# Install component packages
+RUN \
+ apk add --no-cache \
+ curl \
+ ffmpeg \
+ ffmpeg-libs \
+ git \
+ libjpeg-turbo \
+ mariadb-connector-c
+
+COPY . ./
+
+# Install mass wheel and dependencies
+RUN pip3 install --no-cache-dir --no-index --only-binary=:all: --find-links ${WHEELS_LINKS} \
+ .[server]
+
+
+EXPOSE 8095/tcp
+EXPOSE 9090/tcp
+EXPOSE 3483/tcp
+
+VOLUME [ "/data" ]
+
+ENTRYPOINT ["mass", "--config", "/data"]
--- /dev/null
+version: "3.8"
+services:
+ music-assistant-server:
+ build:
+ context: ./
+ dockerfile: Dockerfile
+ image: music-assistant-server:latest
+ container_name: music-assistant-server
+ restart: unless-stopped
+ # Required for player discovery to work correctly
+ network_mode: host
+ volumes:
+ - ${USERDIR:-$HOME}/docker/music-assistant-server/data:/data/
LOGGER = logging.getLogger(__name__)
+HA_WHEELS = "https://wheels.home-assistant.io/musllinux/"
+
async def install_package(package: str) -> None:
"""Install package with pip, raise when install failed."""
- cmd = f"python3 -m pip install {package}"
+ cmd = f"python3 -m pip install --find-links {HA_WHEELS} {package}"
proc = await asyncio.create_subprocess_shell(
cmd, stderr=asyncio.subprocess.PIPE, stdout=asyncio.subprocess.DEVNULL
)