name: MoviePilot Builder on: workflow_dispatch: push: branches: - main paths: - version.py jobs: Docker-build: runs-on: ubuntu-latest name: Build Docker Image steps: - name: Checkout uses: actions/checkout@v4 - name: Release version id: release_version run: | app_version=$(cat version.py |sed -ne "s/APP_VERSION\s=\s'v\(.*\)'/\1/gp") echo "app_version=$app_version" >> $GITHUB_ENV - name: Docker Meta id: meta uses: docker/metadata-action@v5 with: images: ${{ secrets.DOCKER_USERNAME }}/moviepilot tags: | type=raw,value=${{ env.app_version }} type=raw,value=latest - name: Set Up QEMU uses: docker/setup-qemu-action@v3 - name: Set Up Buildx uses: docker/setup-buildx-action@v3 - name: Login DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build Image uses: docker/build-push-action@v5 with: context: . file: Dockerfile platforms: | linux/amd64 linux/arm64/v8 push: true build-args: | MOVIEPILOT_VERSION=${{ env.app_version }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha, scope=${{ github.workflow }}-docker cache-to: type=gha, scope=${{ github.workflow }}-docker Windows-build: runs-on: windows-latest name: Build Windows Binary steps: - name: Checkout uses: actions/checkout@v4 - name: Init Python 3.11.4 uses: actions/setup-python@v4 with: python-version: '3.11.4' cache: 'pip' - name: Install Dependent Packages run: | python -m pip install --upgrade pip pip install wheel pyinstaller pip install -r requirements.txt shell: pwsh - name: Prepare Frontend run: | # 下载nginx Invoke-WebRequest -Uri "http://nginx.org/download/nginx-1.25.2.zip" -OutFile "nginx.zip" Expand-Archive -Path "nginx.zip" -DestinationPath "nginx-1.25.2" Move-Item -Path "nginx-1.25.2/nginx-1.25.2" -Destination "nginx" Remove-Item -Path "nginx.zip" Remove-Item -Path "nginx-1.25.2" -Recurse -Force # 下载前端 $FRONTEND_VERSION = (Invoke-WebRequest -Uri "https://api.github.com/repos/jxxghp/MoviePilot-Frontend/releases/latest" | ConvertFrom-Json).tag_name Invoke-WebRequest -Uri "https://github.com/jxxghp/MoviePilot-Frontend/releases/download/$FRONTEND_VERSION/dist.zip" -OutFile "dist.zip" Expand-Archive -Path "dist.zip" -DestinationPath "dist" Move-Item -Path "dist/dist/*" -Destination "nginx/html" -Force Remove-Item -Path "dist.zip" Remove-Item -Path "dist" -Recurse -Force Move-Item -Path "nginx/html/nginx.conf" -Destination "nginx/conf/nginx.conf" -Force New-Item -Path "nginx/temp" -ItemType Directory -Force New-Item -Path "nginx/temp/__keep__.txt" -ItemType File -Force New-Item -Path "nginx/logs" -ItemType Directory -Force New-Item -Path "nginx/logs/__keep__.txt" -ItemType File -Force # 下载插件 jxxghp Invoke-WebRequest -Uri "https://github.com/jxxghp/MoviePilot-Plugins/archive/refs/heads/main.zip" -OutFile "MoviePilot-Plugins-main.zip" Expand-Archive -Path "MoviePilot-Plugins-main.zip" -DestinationPath "MoviePilot-Plugins-main" Move-Item -Path "MoviePilot-Plugins-main/MoviePilot-Plugins-main/plugins/*" -Destination "app/plugins/" -Force -ErrorAction SilentlyContinue Remove-Item -Path "MoviePilot-Plugins-main.zip" Remove-Item -Path "MoviePilot-Plugins-main" -Recurse -Force # 下载插件 thsrite Invoke-WebRequest -Uri "https://github.com/thsrite/MoviePilot-Plugins/archive/refs/heads/main.zip" -OutFile "MoviePilot-Plugins-main.zip" Expand-Archive -Path "MoviePilot-Plugins-main.zip" -DestinationPath "MoviePilot-Plugins-main" Move-Item -Path "MoviePilot-Plugins-main/MoviePilot-Plugins-main/plugins/*" -Destination "app/plugins/" -Force -ErrorAction SilentlyContinue Remove-Item -Path "MoviePilot-Plugins-main.zip" Remove-Item -Path "MoviePilot-Plugins-main" -Recurse -Force # 下载插件 honue Invoke-WebRequest -Uri "https://github.com/honue/MoviePilot-Plugins/archive/refs/heads/main.zip" -OutFile "MoviePilot-Plugins-main.zip" Expand-Archive -Path "MoviePilot-Plugins-main.zip" -DestinationPath "MoviePilot-Plugins-main" Move-Item -Path "MoviePilot-Plugins-main/MoviePilot-Plugins-main/plugins/*" -Destination "app/plugins/" -Force -ErrorAction SilentlyContinue Remove-Item -Path "MoviePilot-Plugins-main.zip" Remove-Item -Path "MoviePilot-Plugins-main" -Recurse -Force # 下载插件 InfinityPacer Invoke-WebRequest -Uri "https://github.com/InfinityPacer/MoviePilot-Plugins/archive/refs/heads/main.zip" -OutFile "MoviePilot-Plugins-main.zip" Expand-Archive -Path "MoviePilot-Plugins-main.zip" -DestinationPath "MoviePilot-Plugins-main" Move-Item -Path "MoviePilot-Plugins-main/MoviePilot-Plugins-main/plugins/*" -Destination "app/plugins/" -Force -ErrorAction SilentlyContinue Remove-Item -Path "MoviePilot-Plugins-main.zip" Remove-Item -Path "MoviePilot-Plugins-main" -Recurse -Force # 下载资源 Invoke-WebRequest -Uri "https://github.com/jxxghp/MoviePilot-Resources/archive/refs/heads/main.zip" -OutFile "MoviePilot-Resources-main.zip" Expand-Archive -Path "MoviePilot-Resources-main.zip" -DestinationPath "MoviePilot-Resources-main" Move-Item -Path "MoviePilot-Resources-main/MoviePilot-Resources-main/resources/*" -Destination "app/helper/" -Force Remove-Item -Path "MoviePilot-Resources-main.zip" Remove-Item -Path "MoviePilot-Resources-main" -Recurse -Force shell: pwsh - name: Pyinstaller run: | pyinstaller frozen.spec shell: pwsh - name: Upload Windows File uses: actions/upload-artifact@v3 with: name: windows path: dist/MoviePilot.exe Linux-build-amd64: runs-on: ubuntu-latest name: Build Linux Amd64 steps: - name: Checkout uses: actions/checkout@v4 - name: Init Python 3.11.4 uses: actions/setup-python@v4 with: python-version: '3.11.4' cache: 'pip' - name: Install Dependent Packages run: | python -m pip install --upgrade pip pip install wheel pyinstaller pip install -r requirements.txt find app/plugins -name requirements.txt -exec pip install -r {} \; - name: Prepare Frontend run: | wget https://github.com/jxxghp/MoviePilot-Plugins/archive/refs/heads/main.zip unzip main.zip mv MoviePilot-Plugins-main/plugins/* app/plugins/ rm main.zip rm -rf MoviePilot-Plugins-main wget https://github.com/jxxghp/MoviePilot-Resources/archive/refs/heads/main.zip unzip main.zip mv MoviePilot-Resources-main/resources/* app/helper/ rm main.zip rm -rf MoviePilot-Resources-main - name: Pyinstaller run: | pyinstaller frozen.spec mv dist/MoviePilot dist/MoviePilot_Amd64 - name: Upload Linux File uses: actions/upload-artifact@v3 with: name: linux-amd64 path: dist/MoviePilot_Amd64 Create-release: permissions: write-all runs-on: ubuntu-latest needs: [ Windows-build, Docker-build, Linux-build-amd64] steps: - uses: actions/checkout@v2 - name: Release Version id: release_version run: | app_version=$(cat version.py |sed -ne "s/APP_VERSION\s=\s'v\(.*\)'/\1/gp") echo "app_version=$app_version" >> $GITHUB_ENV - name: Download Artifact uses: actions/download-artifact@v3 - name: get release_informations shell: bash run: | mkdir releases mv ./windows/MoviePilot.exe ./releases/MoviePilot_Win_v${{ env.app_version }}.exe mv ./linux-amd64/MoviePilot_Amd64 ./releases/MoviePilot_Amd64_v${{ env.app_version }} - name: Create Release id: create_release uses: actions/create-release@latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ env.app_version }} release_name: v${{ env.app_version }} body: ${{ github.event.commits[0].message }} draft: false prerelease: false - name: Upload Release Asset uses: dwenegar/upload-release-assets@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: release_id: ${{ steps.create_release.outputs.id }} assets_path: | ./releases/