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 }} cache-to: type=gha, scope=${{ github.workflow }} 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' - 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: | 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 Rename-Item -Path "nginx/nginx.exe" -NewName "nginx/nginx_mp.exe" -Force shell: pwsh - name: Pyinstaller run: | pyinstaller windows.spec shell: pwsh - name: Upload Windows File uses: actions/upload-artifact@v3 with: name: windows path: dist/MoviePilot.exe Create-release: permissions: write-all runs-on: ubuntu-latest needs: [ Windows-build, Docker-build ] 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_v${{ env.app_version }}.exe - 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/