fix: 修复本地歌曲无法播放的问题 #1059
This file contains hidden or 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: CI Workflow | |
| on: | |
| push: | |
| branches: | |
| - "*" # 所有分支触发 | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| env: | |
| VERSION_TAG: ${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:${{ github.ref_name }} | |
| LATEST_TAG: ${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:latest | |
| STABLE_TAG: ${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:stable | |
| permissions: | |
| contents: write | |
| id-token: write | |
| jobs: | |
| # Job 构建和测试镜像 | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| submodules: true | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build Docker images (multi-platform) | |
| uses: docker/build-push-action@v6 | |
| with: | |
| platforms: linux/amd64,linux/arm64,linux/arm/v7 | |
| context: . | |
| push: false | |
| outputs: type=local,dest=./output | |
| tags: ${{ env.VERSION_TAG }} | |
| cache-from: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:buildcache | |
| cache-to: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:buildcache,mode=max | |
| - name: Package Docker images | |
| run: | | |
| cd output | |
| for platform in linux_amd64 linux_arm64 linux_arm_v7; do | |
| platform_name=$(echo $platform | sed 's/_/-/g') | |
| if [ -d "$platform" ]; then | |
| tar -czf ../xiaomusic-${{ github.ref_name }}-${platform_name#linux-}.tar.gz -C $platform . | |
| fi | |
| done | |
| cd .. | |
| - name: Upload Docker images as artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: docker-images | |
| path: xiaomusic-*.tar.gz | |
| retention-days: 1 | |
| # Job 推送 Docker 镜像 | |
| push-docker: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| if: github.ref_name == 'main' || startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Publish to Docker Hub main | |
| if: github.ref_name == 'main' | |
| uses: docker/build-push-action@v6 | |
| with: | |
| platforms: linux/amd64,linux/arm64,linux/arm/v7 | |
| context: . | |
| push: true | |
| tags: ${{ env.VERSION_TAG }} | |
| cache-from: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:buildcache | |
| - name: Publish to Docker Hub latest and stable | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| uses: docker/build-push-action@v6 | |
| with: | |
| platforms: linux/amd64,linux/arm64,linux/arm/v7 | |
| context: . | |
| push: true | |
| tags: ${{ env.VERSION_TAG }}, ${{ env.LATEST_TAG }}, ${{ env.STABLE_TAG }} | |
| cache-from: type=registry,ref=${{ secrets.DOCKERHUB_USERNAME }}/xiaomusic:buildcache | |
| # Job 发布 Release | |
| publish-release: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| if: github.ref_name == 'main' || startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: docker-images | |
| - name: Install GitHub CLI | |
| run: | | |
| sudo apt update | |
| sudo apt install -y gh | |
| - name: Create or update Release tag | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| RELEASE_NAME=${{ github.ref_name }} | |
| RELEASE_BODY="This release is automatically updated from the ${RELEASE_NAME} branch." | |
| EXISTING_RELEASE=$(gh release view "${RELEASE_NAME}" --json id --jq .id || echo "") | |
| if [[ -n "${EXISTING_RELEASE}" ]]; then | |
| echo "release exist" | |
| else | |
| gh release create "${RELEASE_NAME}" \ | |
| --prerelease=false \ | |
| --title "${RELEASE_NAME}" \ | |
| --notes "${RELEASE_BODY}" | |
| fi | |
| - name: Upload assets to Release tag | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| RELEASE_NAME=${{ github.ref_name }} | |
| FILES=$(find . -type f -name "xiaomusic-*.tar.gz") | |
| for FILE in ${FILES}; do | |
| echo "type upload ${FILE}" | |
| gh release upload "${RELEASE_NAME}" "${FILE}" --clobber | |
| done | |
| # Job 发布 PyPI 版本 | |
| publish-pypi: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| submodules: true | |
| - uses: actions/setup-node@v4 | |
| with: | |
| registry-url: https://registry.npmjs.org/ | |
| node-version: lts/* | |
| - name: Generate changelog | |
| run: npx changelogithub | |
| continue-on-error: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - uses: pdm-project/setup-pdm@v3 | |
| - name: Publish package distributions to PyPI | |
| run: pdm publish | |
| continue-on-error: true |