on:
release:
types: [published]
+ workflow_dispatch:
+ inputs:
+ tags:
+ description: 'Run Dev Build'
+ required: true
+ type: boolean
env:
PYTHON_VERSION: "3.11"
jobs:
- build-and-publish-pypi:
- name: Builds and publishes releases to PyPI
+ build-artifact:
+ name: Builds python artifact uploads to Github Artifact store
runs-on: ubuntu-latest
outputs:
version: ${{ steps.vars.outputs.tag }}
- uses: actions/checkout@v4.1.4
- name: Get tag
id: vars
- run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
- - name: Validate version number
run: >-
- if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then
- if ! [[ "${{ steps.vars.outputs.tag }}" =~ "b" || "${{ steps.vars.outputs.tag }}" =~ "rc" ]]; then
- echo "Pre-release: Tag is missing beta suffix (${{ steps.vars.outputs.tag }})"
- exit 1
- fi
+ if [[ "${{ inputs.tags }}" == "true" ]]; then
+ echo "tag=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_OUTPUT
else
- if [[ "${{ steps.vars.outputs.tag }}" =~ "b" || "${{ steps.vars.outputs.tag }}" =~ "rc" ]]; then
- echo "Release: Tag must not have a beta (or rc) suffix (${{ steps.vars.outputs.tag }})"
- exit 1
+ echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
+ fi
+ - name: Validate version number
+ run: >-
+ if [[ "${{ inputs.tags }}" == "true" ]]; then
+ echo "Skipping version validation for manual trigger"
+ else
+ if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then
+ if ! [[ "${{ steps.vars.outputs.tag }}" =~ "b" || "${{ steps.vars.outputs.tag }}" =~ "rc" ]]; then
+ echo "Pre-release: Tag is missing beta suffix (${{ steps.vars.outputs.tag }})"
+ exit 1
+ fi
+ else
+ if [[ "${{ steps.vars.outputs.tag }}" =~ "b" || "${{ steps.vars.outputs.tag }}" =~ "rc" ]]; then
+ echo "Release: Tag must not have a beta (or rc) suffix (${{ steps.vars.outputs.tag }})"
+ exit 1
+ fi
fi
- fi
+ fi
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5.2.0
with:
- name: Build python package
run: >-
python3 -m build
+ - name: Upload distributions
+ uses: actions/upload-artifact@v4
+ with:
+ name: release-dists
+ path: dist/
+
+ pypi-publish:
+ runs-on: ubuntu-latest
+ if: ${{ ! inputs.tags }}
+ needs:
+ - build-artifact
+ steps:
+ - name: Retrieve release distributions
+ uses: actions/download-artifact@v4
+ with:
+ name: release-dists
+ path: dist/
- name: Publish release to PyPI
uses: pypa/gh-action-pypi-publish@v1.9.0
with:
runs-on: ubuntu-latest
permissions:
packages: write
- needs: build-and-publish-pypi
+ needs: build-artifact
steps:
+ - name: Retrieve release distributions
+ uses: actions/download-artifact@v4
+ with:
+ name: release-dists
+ path: dist/
- uses: actions/checkout@v4.1.4
- name: Download Widevine CDM client files from private repository
shell: bash
echo "major=${patch%.*.*}" >> $GITHUB_OUTPUT
- name: Build and Push release
uses: docker/build-push-action@v6.7.0
- if: github.event.release.prerelease == false
+ if: ${{ ! inputs.tags && github.event.release.prerelease == false }}
with:
context: .
platforms: linux/amd64,linux/arm64
ghcr.io/${{ github.repository_owner }}/server:stable,
ghcr.io/${{ github.repository_owner }}/server:latest
push: true
- build-args: "MASS_VERSION=${{ needs.build-and-publish-pypi.outputs.version }}"
+ build-args: "MASS_VERSION=${{ needs.build-artifact.outputs.version }}"
- name: Build and Push pre-release
uses: docker/build-push-action@v6.7.0
- if: github.event.release.prerelease == true
+ if: ${{ ! inputs.tags && github.event.release.prerelease == true }}
with:
context: .
platforms: linux/amd64,linux/arm64
ghcr.io/${{ github.repository_owner }}/server:${{ steps.tags.outputs.patch }},
ghcr.io/${{ github.repository_owner }}/server:beta
push: true
- build-args: "MASS_VERSION=${{ needs.build-and-publish-pypi.outputs.version }}"
+ build-args: "MASS_VERSION=${{ needs.build-artifact.outputs.version }}"
+ - name: Build and Push dev-release
+ uses: docker/build-push-action@v6.7.0
+ if: inputs.tags
+ with:
+ context: .
+ platforms: linux/amd64,linux/arm64
+ file: Dockerfile
+ tags: |-
+ ghcr.io/${{ github.repository_owner }}/server:${{ needs.build-artifact.outputs.version }},
+ ghcr.io/${{ github.repository_owner }}/server:dev
+ push: true
+ build-args: |
+ MASS_VERSION=${{ needs.build-artifact.outputs.version }}
+ DEV_RELEASE="true"
+ MASS_INSTALL_LOCATION="/tmp/music_assitant-${{ needs.build-artifact.outputs.version }}-py3-none-any.whl"
release-notes-update:
name: Updates the release notes and changelog
- needs: [build-and-publish-pypi, build-and-push-container-image]
+ needs: [build-artifact, pypi-publish, build-and-push-container-image]
runs-on: ubuntu-latest
steps:
- name: Update changelog and release notes including frontend notes
uses: music-assistant/release-notes-merge-action@main
with:
github_token: ${{ secrets.PRIVILEGED_GITHUB_TOKEN }}
- release_tag: ${{ needs.build-and-publish-pypi.outputs.version }}
+ release_tag: ${{ needs.build-artifact.outputs.version }}
pre_release: ${{ github.event.release.prerelease }}
addon-version-update:
name: Updates the Addon repository with the new version
needs:
[
- build-and-publish-pypi,
+ build-artifact,
+ pypi-publish,
build-and-push-container-image,
release-notes-update,
]
uses: music-assistant/addon-update-action@main
with:
github_token: ${{ secrets.PRIVILEGED_GITHUB_TOKEN }}
- new_server_version: ${{ needs.build-and-publish-pypi.outputs.version }}
+ new_server_version: ${{ needs.build-artifact.outputs.version }}
pre_release: ${{ github.event.release.prerelease }}