docs: update v0.0.6 #15
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: 构建 | |
| on: | |
| push: | |
| branches: [ 'main' ] | |
| paths: [ 'version.txt' ] | |
| workflow_dispatch: {} | |
| permissions: | |
| contents: write | |
| env: | |
| APP_NAME: openlistsync | |
| DOCKER_USER: syscc | |
| DOCKER_NAME: openlistsync | |
| jobs: | |
| get-version: | |
| name: 获取版本号 | |
| runs-on: ubuntu-latest | |
| outputs: | |
| TAG_LIST: ${{ steps.getVersion.outputs.TAG_LIST }} | |
| VERSION: ${{ steps.getVersion.outputs.VERSION }} | |
| steps: | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - id: getVersion | |
| name: 获取版本号 | |
| run: | | |
| versions=$(head -n 1 version.txt) | |
| tagList="" | |
| IFS=',' read -ra versionList <<< "$versions" | |
| cuVersion="${versionList[0]}" | |
| for version in "${versionList[@]}"; do | |
| tagList+="-t $DOCKER_USER/$DOCKER_NAME:$version " | |
| done | |
| echo "TAG_LIST=$tagList" >> "$GITHUB_OUTPUT" | |
| echo "VERSION=$cuVersion" >> "$GITHUB_OUTPUT" | |
| build-frontend: | |
| name: 构建前端 | |
| runs-on: ubuntu-latest | |
| needs: [ get-version ] | |
| env: | |
| VERSION: ${{ needs.get-version.outputs.VERSION }} | |
| steps: | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - name: 安装Node.js 14.x | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "14.x" | |
| - name: 安装依赖并构建前端 | |
| run: | | |
| sed -i "s/__version_placeholder__/$VERSION/g" frontend/src/views/page/setting/index.vue | |
| cd frontend | |
| npm install | |
| npm run build | |
| - name: 上传artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: frontend-dist | |
| path: frontend/dist | |
| retention-days: 1 | |
| build-docker: | |
| name: 构建Docker与linux | |
| runs-on: ubuntu-latest | |
| needs: [ get-version, build-frontend ] | |
| env: | |
| VERSION: ${{ needs.get-version.outputs.VERSION }} | |
| strategy: | |
| matrix: | |
| platform: | |
| - linux/amd64 | |
| - linux/arm64 | |
| - linux/arm/v7 | |
| - linux/386 | |
| - linux/arm/v6 | |
| - linux/s390x | |
| - linux/ppc64le | |
| steps: | |
| - name: 替换平台名称中的斜杠为横杠 | |
| run: | | |
| platform=${{ matrix.platform }} | |
| echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV | |
| - name: 设置QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - name: 设置Docker BuildX | |
| uses: docker/setup-buildx-action@v3 | |
| - name: 登录到DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ env.DOCKER_USER }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - name: 下载前端 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: frontend-dist | |
| path: frontend/dist | |
| - id: build-image | |
| name: 构建docker镜像 | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| platforms: ${{ matrix.platform }} | |
| outputs: | | |
| type=docker | |
| type=image,name=${{ env.DOCKER_USER }}/${{ env.DOCKER_NAME }},push-by-digest=true,name-canonical=true,push=true | |
| - name: 导出digest | |
| run: | | |
| mkdir -p /tmp/digests | |
| digest="${{ steps.build-image.outputs.digest }}" | |
| touch "/tmp/digests/${digest#sha256:}" | |
| - name: 上传digest到artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: digests-${{ env.PLATFORM_PAIR }} | |
| path: /tmp/digests/* | |
| retention-days: 1 | |
| - name: 从镜像中提取可执行文件 | |
| run: | | |
| docker create --name tmp ${{ steps.build-image.outputs.imageid }} /bin/true | |
| docker cp tmp:/app/${{ env.APP_NAME }} ${{ env.APP_NAME }} | |
| tar czf "$APP_NAME-$VERSION-$PLATFORM_PAIR.tar.gz" ${{ env.APP_NAME }} | |
| - name: 上传可执行文件到artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ env.PLATFORM_PAIR }} | |
| path: ${{ env.APP_NAME }}-${{ env.VERSION }}-${{ env.PLATFORM_PAIR }}.tar.gz | |
| retention-days: 1 | |
| merge-docker: | |
| name: 合并Docker镜像 | |
| runs-on: ubuntu-latest | |
| needs: [get-version, build-docker] | |
| env: | |
| TAG_LIST: ${{ needs.get-version.outputs.TAG_LIST }} | |
| steps: | |
| - name: 下载digest | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: /tmp/digests | |
| pattern: digests-* | |
| merge-multiple: true | |
| - name: 设置Docker BuildX | |
| uses: docker/setup-buildx-action@v3 | |
| - name: 登录到DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ env.DOCKER_USER }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: 创建清单并推送 | |
| working-directory: /tmp/digests | |
| run: | | |
| docker buildx imagetools create ${{ env.TAG_LIST }}$(printf '${{ env.DOCKER_USER }}/${{ env.DOCKER_NAME }}@sha256:%s ' *) | |
| build-windows: | |
| name: 构建windows | |
| strategy: | |
| matrix: | |
| os: | |
| - windows-latest | |
| - windows-11-arm | |
| runs-on: ${{ matrix.os }} | |
| needs: [get-version, build-frontend] | |
| env: | |
| VERSION: ${{needs.get-version.outputs.VERSION}} | |
| if: ${{ !contains(needs.get-version.outputs.VERSION, 'dev') }} | |
| steps: | |
| - name: 判断平台 | |
| run: | | |
| $os = "${{ matrix.os }}" | |
| if ($os -eq "windows-latest") { | |
| $PLATFORM = "amd64" | |
| } else { | |
| $PLATFORM = "arm64" | |
| } | |
| "PLATFORM=$PLATFORM" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - name: 下载前端 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: frontend-dist | |
| path: frontend/dist | |
| - name: 设置python环境 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: 安装依赖并构建打包 | |
| run: | | |
| python -m pip install 'pyinstaller>=6,<7' | |
| python -m pip install -r requirements.txt | |
| python -m PyInstaller ${{ env.APP_NAME }}.spec | |
| cd dist | |
| pwsh -Command "Compress-Archive -Path * -DestinationPath '${{ env.APP_NAME }}-${{ env.VERSION }}-windows-${{ env.PLATFORM }}.zip'" | |
| - name: 上传artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-windows-${{ env.PLATFORM }} | |
| path: dist/*.zip | |
| build-darwin: | |
| name: 构建darwin | |
| strategy: | |
| matrix: | |
| os: | |
| - macos-15 | |
| - macos-15-intel | |
| runs-on: ${{ matrix.os }} | |
| needs: [get-version, build-frontend] | |
| env: | |
| VERSION: ${{needs.get-version.outputs.VERSION}} | |
| if: ${{ !contains(needs.get-version.outputs.VERSION, 'dev') }} | |
| steps: | |
| - name: 判断平台 | |
| run: | | |
| os=${{ matrix.os }} | |
| if [ "$os" = "macos-15-intel" ]; then | |
| PLATFORM="amd64" | |
| else | |
| PLATFORM="arm64" | |
| fi | |
| echo "PLATFORM=$PLATFORM" >> $GITHUB_ENV | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - name: 下载前端 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: frontend-dist | |
| path: frontend/dist | |
| - name: 设置python环境 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: 安装依赖并构建打包 | |
| run: | | |
| python -m pip install 'pyinstaller>=6,<7' | |
| python -m pip install -r requirements.txt | |
| python -m PyInstaller "$APP_NAME.spec" | |
| cd dist | |
| tar czf "$APP_NAME-$VERSION-darwin-$PLATFORM.tar.gz" . | |
| - name: 上传artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-darwin-${{ env.PLATFORM }} | |
| path: dist/*.tar.gz | |
| retention-days: 1 | |
| create-release: | |
| name: 发布release | |
| runs-on: ubuntu-latest | |
| needs: [get-version, build-windows, build-darwin, build-docker] | |
| env: | |
| VERSION: ${{needs.get-version.outputs.VERSION}} | |
| if: ${{ !contains(needs.get-version.outputs.VERSION, 'dev') }} | |
| steps: | |
| - name: 检出仓库代码 | |
| uses: actions/checkout@v4 | |
| - name: 下载构建结果 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: dist-* | |
| path: dist | |
| merge-multiple: true | |
| - name: 没有版本日志文件自动创建 | |
| run: | | |
| version_first=$(echo $VERSION | cut -d'-' -f1) | |
| LOG_FILE="doc/changelog/$version_first.md" | |
| if [ ! -f "$LOG_FILE" ]; then | |
| mkdir -p "$(dirname "$LOG_FILE")" | |
| touch "$LOG_FILE" | |
| echo "$VERSION" > "$LOG_FILE" | |
| fi | |
| echo "LOG_FILE=$LOG_FILE" >> "$GITHUB_ENV" | |
| - name: 创建release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ env.VERSION }} | |
| files: dist/* | |
| body_path: ${{ env.LOG_FILE }} | |
| prerelease: ${{ contains(env.VERSION, 'dev') || contains(env.VERSION, 'pre') || contains(env.VERSION, 'beta') }} |