Build Latest #251
  
    
      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: Build Latest | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| doRelease: | |
| description: 'Publish new release' | |
| type: boolean | |
| default: false | |
| required: false | |
| tag: | |
| type: string | |
| description: 'Release version tag (e.g. v0.2.1-beta)' | |
| required: true | |
| ref: | |
| type: string | |
| description: 'Git ref from which to release' | |
| required: true | |
| default: 'main' | |
| env: | |
| DOTNET_SDK_VERSION: "9.0.306" | |
| ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true | |
| jobs: | |
| set-date: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| date: ${{ steps.get_date.outputs.date }} | |
| tag: ${{ steps.format_tag.outputs.tag }} | |
| steps: | |
| - name: Get Date in UTC+8 | |
| id: get_date | |
| run: | | |
| DATE=$(date -u -d '8 hours' +'%Y%m%d') | |
| echo "date=${DATE}" >> "$GITHUB_OUTPUT" | |
| - name: Determine Tag | |
| id: format_tag | |
| run: | | |
| if [ "${{ github.event.inputs.doRelease }}" == "true" ]; then | |
| TAG="${{ github.event.inputs.tag }}" | |
| else | |
| TAG="actions-$GITHUB_RUN_ID" | |
| fi | |
| echo "tag=${TAG}" >> "$GITHUB_OUTPUT" | |
| build-win-nt6_0-x86: | |
| runs-on: windows-latest | |
| needs: set-date | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Install zip | |
| run: choco install zip --no-progress --yes | |
| - name: Set up dotnet | |
| uses: actions/setup-dotnet@v3 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_SDK_VERSION }} | |
| - run: powershell -Command "(Get-Content src/N_m3u8DL-RE/N_m3u8DL-RE.csproj) -replace '<TargetFramework>.*</TargetFramework>', '<TargetFramework>net9.0-windows</TargetFramework>' | Set-Content src/N_m3u8DL-RE/N_m3u8DL-RE.csproj" | |
| - run: dotnet add src/N_m3u8DL-RE/N_m3u8DL-RE.csproj package YY-Thunks --version 1.1.4 | |
| - run: dotnet add src/N_m3u8DL-RE/N_m3u8DL-RE.csproj package VC-LTL --version 5.1.1 | |
| - run: dotnet publish src/N_m3u8DL-RE -p:TargetPlatformMinVersion=6.0 -r win-x86 -c Release -o artifact-x86 | |
| - name: Package [win-x86] | |
| run: | | |
| cd artifact-x86 | |
| zip ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-NT6.0-x86_${{ needs.set-date.outputs.date }}.zip N_m3u8DL-RE.exe | |
| - name: Upload Artifact[win-x86] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: win-NT6.0-x86 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-NT6.0-x86_${{ needs.set-date.outputs.date }}.zip | |
| build-win-x64-arm64: | |
| runs-on: windows-latest | |
| needs: set-date | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Install zip | |
| run: choco install zip --no-progress --yes | |
| - name: Set up dotnet | |
| uses: actions/setup-dotnet@v3 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_SDK_VERSION }} | |
| - run: dotnet publish src/N_m3u8DL-RE -r win-x64 -c Release -o artifact-x64 | |
| - run: dotnet publish src/N_m3u8DL-RE -r win-arm64 -c Release -o artifact-arm64 | |
| - name: Package [win] | |
| run: | | |
| cd artifact-x64 | |
| zip ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-x64_${{ needs.set-date.outputs.date }}.zip N_m3u8DL-RE.exe | |
| cd ../artifact-arm64 | |
| zip ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-arm64_${{ needs.set-date.outputs.date }}.zip N_m3u8DL-RE.exe | |
| - name: Upload Artifact [win-x64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: win-x64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-x64_${{ needs.set-date.outputs.date }}.zip | |
| - name: Upload Artifact [win-arm64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: win-arm64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_win-arm64_${{ needs.set-date.outputs.date }}.zip | |
| build-linux-x64-arm64: | |
| runs-on: ubuntu-latest | |
| needs: set-date | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Build x64 in Ubuntu 18.04 container (for glibc 2.27 compatibility) | |
| run: | | |
| # 在 Ubuntu 18.04 容器中执行完整构建流程 | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -w /workspace \ | |
| ubuntu:18.04 \ | |
| bash -c " | |
| set -e | |
| # 安装编译和运行依赖 | |
| apt-get update | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y wget build-essential clang libicu-dev zlib1g libcurl4-openssl-dev libkrb5-dev | |
| # 下载并安装 .NET SDK | |
| DOTNET_SDK_VERSION='${{ env.DOTNET_SDK_VERSION }}' | |
| DOTNET_SDK_URL=\"https://builds.dotnet.microsoft.com/dotnet/Sdk/\${DOTNET_SDK_VERSION}/dotnet-sdk-\${DOTNET_SDK_VERSION}-linux-x64.tar.gz\" | |
| wget -nv \"\$DOTNET_SDK_URL\" -O dotnet-sdk.tar.gz | |
| mkdir -p /opt/dotnet | |
| tar -xzf dotnet-sdk.tar.gz -C /opt/dotnet | |
| export PATH=\"/opt/dotnet:\$PATH\" | |
| # 编译 Native AOT 输出到挂载的 artifact 目录 | |
| dotnet publish src/N_m3u8DL-RE -r linux-x64 -c Release -o /workspace/artifact | |
| " | |
| - name: Build arm64 in Ubuntu 18.04 container (for glibc 2.27 compatibility) | |
| run: | | |
| # 在 Ubuntu 18.04 容器中执行完整构建流程 | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -w /workspace \ | |
| mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-cross-arm64-20220312201346-b2c2436 \ | |
| bash -c " | |
| set -e | |
| # 下载并安装 .NET SDK | |
| DOTNET_SDK_VERSION='${{ env.DOTNET_SDK_VERSION }}' | |
| DOTNET_SDK_URL=\"https://builds.dotnet.microsoft.com/dotnet/Sdk/\${DOTNET_SDK_VERSION}/dotnet-sdk-\${DOTNET_SDK_VERSION}-linux-x64.tar.gz\" | |
| wget -nv \"\$DOTNET_SDK_URL\" -O dotnet-sdk.tar.gz | |
| mkdir -p /opt/dotnet | |
| tar -xzf dotnet-sdk.tar.gz -C /opt/dotnet | |
| export PATH=\"/opt/dotnet:\$PATH\" | |
| # 编译 Native AOT 输出到挂载的 artifact 目录 | |
| dotnet publish src/N_m3u8DL-RE -r linux-arm64 -c Release -p:StripSymbols=true -p:CppCompilerAndLinker=clang-9 -p:SysRoot=/crossrootfs/arm64 -o /workspace/artifact-arm64 | |
| " | |
| - name: Package [linux] | |
| run: | | |
| cd artifact | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-x64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| cd ../artifact-arm64 | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-arm64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| - name: Upload Artifact [linux-x64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-x64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-x64_${{ needs.set-date.outputs.date }}.tar.gz | |
| - name: Upload Artifact[linux-arm64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-arm64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-arm64_${{ needs.set-date.outputs.date }}.tar.gz | |
| build-android-bionic-x64-arm64: | |
| runs-on: windows-latest | |
| needs: set-date | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Set up NDK | |
| shell: pwsh | |
| run: | | |
| Invoke-WebRequest -Uri "https://dl.google.com/android/repository/android-ndk-r27c-windows.zip" -OutFile "android-ndk.zip" | |
| Expand-Archive -Path "android-ndk.zip" -DestinationPath "./android-ndk" | |
| Get-ChildItem -Path "./android-ndk" | |
| $ndkRoot = "${{ github.workspace }}\android-ndk\android-ndk-r27c" | |
| echo "NDK_ROOT=$ndkRoot" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 | |
| $ndkBinPath = "$ndkRoot\toolchains\llvm\prebuilt\windows-x86_64\bin" | |
| echo $ndkBinPath | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 | |
| - name: Set up dotnet | |
| uses: actions/setup-dotnet@v3 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_SDK_VERSION }} | |
| - run: dotnet publish src/N_m3u8DL-RE -r linux-bionic-x64 -p:DisableUnsupportedError=true -p:PublishAotUsingRuntimePack=true -o artifact | |
| - run: dotnet publish src/N_m3u8DL-RE -r linux-bionic-arm64 -p:DisableUnsupportedError=true -p:PublishAotUsingRuntimePack=true -o artifact-arm64 | |
| - name: Package [linux-bionic] | |
| run: | | |
| cd artifact | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_android-bionic-x64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| cd ../artifact-arm64 | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_android-bionic-arm64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| - name: Upload Artifact [linux-bionic-x64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-bionic-x64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_android-bionic-x64_${{ needs.set-date.outputs.date }}.tar.gz | |
| - name: Upload Artifact[linux-bionic-arm64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-bionic-arm64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_android-bionic-arm64_${{ needs.set-date.outputs.date }}.tar.gz | |
| build-linux-musl-x64: | |
| runs-on: ubuntu-latest | |
| needs: set-date | |
| container: mcr.microsoft.com/dotnet/sdk:9.0-alpine-amd64 | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - run: apk add clang build-base zlib-dev | |
| - run: dotnet publish src/N_m3u8DL-RE -r linux-musl-x64 -c Release -o artifact -p:InvariantGlobalization=true | |
| - name: Package [linux-musl-x64] | |
| run: | | |
| cd artifact | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-musl-x64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| - name: Upload Artifact [linux-musl-x64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-musl-x64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-musl-x64_${{ needs.set-date.outputs.date }}.tar.gz | |
| build-linux-musl-arm64: | |
| runs-on: ubuntu-latest | |
| needs: set-date | |
| container: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-cross-arm64-alpine | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Set up dotnet | |
| uses: actions/setup-dotnet@v3 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_SDK_VERSION }} | |
| - run: apt-get update | |
| - run: apt-get install -y build-essential clang binutils-aarch64-linux-gnu | |
| - run: dotnet publish src/N_m3u8DL-RE -r linux-musl-arm64 -c Release -o artifact -p:CppCompilerAndLinker=clang -p:SysRoot=/crossrootfs/arm64 -p:InvariantGlobalization=true | |
| - name: Package [linux-musl-arm64] | |
| run: | | |
| cd artifact | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-musl-arm64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| - name: Upload Artifact [linux-musl-arm64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-musl-arm64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_linux-musl-arm64_${{ needs.set-date.outputs.date }}.tar.gz | |
| build-mac-x64-arm64: | |
| runs-on: macos-latest | |
| needs: set-date | |
| steps: | |
| - uses: actions/checkout@v1 | |
| with: | |
| ref: ${{ github.event.inputs.ref }} | |
| - name: Set up dotnet | |
| uses: actions/setup-dotnet@v3 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_SDK_VERSION }} | |
| - run: dotnet publish src/N_m3u8DL-RE -r osx-arm64 -c Release -o artifact-arm64 | |
| - run: dotnet publish src/N_m3u8DL-RE -r osx-x64 -c Release -o artifact-x64 | |
| - name: Package [osx] | |
| run: | | |
| cd artifact-x64 | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_osx-x64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| cd ../artifact-arm64 | |
| tar -czvf ../N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_osx-arm64_${{ needs.set-date.outputs.date }}.tar.gz N_m3u8DL-RE | |
| - name: Upload Artifact [osx-x64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: osx-x64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_osx-x64_${{ needs.set-date.outputs.date }}.tar.gz | |
| - name: Upload Artifact[osx-arm64] | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: osx-arm64 | |
| path: N_m3u8DL-RE_${{ needs.set-date.outputs.tag }}_osx-arm64_${{ needs.set-date.outputs.date }}.tar.gz | |
| create_release: | |
| name: Create release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| if: ${{ github.event.inputs.doRelease == 'true' }} | |
| needs: [set-date,build-win-nt6_0-x86,build-win-x64-arm64,build-linux-x64-arm64,build-android-bionic-x64-arm64,build-linux-musl-x64,build-linux-musl-arm64,build-mac-x64-arm64] | |
| steps: | |
| - name: Fetch artifacts | |
| uses: actions/download-artifact@v4 | |
| - name: Create GitHub Release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: ${{ github.event.inputs.tag }} | |
| name: N_m3u8DL-RE_${{ github.event.inputs.tag }} | |
| artifacts: "android-bionic-x64/*,android-bionic-arm64/*,linux-x64/*,linux-arm64/*,linux-musl-x64/*,linux-musl-arm64/*,osx-x64/*,osx-arm64/*,win-x64/*,win-arm64/*,win-NT6.0-x86/*" | |
| draft: false | |
| allowUpdates: true | |
| generateReleaseNotes: true | |
| discussionCategory: 'Announcements' |