name: Build Docker on: pull_request: types: - closed branches: - main push: jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.11 uses: actions/setup-python@v3 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip if [ -f backend/requirements.txt ]; then pip install -r backend/requirements.txt; fi pip install pytest - name: Test working-directory: ./backend/src run: | mkdir -p config pytest version-info: runs-on: ubuntu-latest steps: - name: If release id: release run: | if [ '${{ github.event_name }}' == 'pull_request' ]; then if [ ${{ github.event.pull_request.merged }} == true ]; then echo "release=1" >> $GITHUB_OUTPUT else echo "release=0" >> $GITHUB_OUTPUT fi elif [[ '${{ github.event_name }}' == 'push' && (${{ github.ref }} == *'alpha'* || ${{ github.ref }} == *'beta'*) ]]; then echo "release=1" >> $GITHUB_OUTPUT else echo "release=0" >> $GITHUB_OUTPUT fi - name: If dev id: dev run: | if [[ '${{ github.event_name }}' == 'push' && (${{ github.ref }} == *'alpha'* || ${{ github.ref }} == *'beta'*) ]]; then echo "dev=1" >> $GITHUB_OUTPUT else echo "dev=0" >> $GITHUB_OUTPUT fi - name: Check version id: version run: | if [ '${{ github.event_name }}' == 'pull_request' && ${{ github.event.pull_request.merged }} == true ]; then echo "version=${{ github.event.pull_request.title }}" >> $GITHUB_OUTPUT git config --local user.email git config --local user.name "github-actions" git tag ${{ github.event.pull_request.title }} git push origin ${{ github.event.pull_request.title }} elif [[ ${{ github.event_name }} == 'push' && (${{ github.ref }} == *'alpha'* || ${{ github.ref }} == *'beta'*) ]]; then echo "version=${{ github.ref_name }}" >> $GITHUB_OUTPUT else echo "version=Test" >> $GITHUB_OUTPUT fi - name: Check result run: | echo "release: ${{ steps.release.outputs.release }}" echo "dev: ${{ steps.dev.outputs.dev }}" echo "version: ${{ steps.version.outputs.version }}" outputs: release: ${{ steps.release.outputs.release }} dev: ${{ steps.dev.outputs.dev }} version: ${{ steps.version.outputs.version }} build-webui: runs-on: ubuntu-latest needs: [ test, version-info ] if: ${{ needs.version-info.outputs.release == 1 || needs.version-info.outputs.dev == 1 }} strategy: matrix: node-version: [ 18 ] steps: - name: Checkout uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 with: version: 8 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' cache-dependency-path: webui/pnpm-lock.yaml - name: Install dependencies run: cd webui && pnpm install - name: Build run: | cd webui && pnpm build - name: Upload artifact uses: actions/upload-artifact@v3 with: name: dist path: webui/dist build-docker: runs-on: ubuntu-latest needs: [ build-webui, version-info ] steps: - name: Checkout uses: actions/checkout@v3 - name: Create Version info via tag working-directory: ./backend/src run: | echo ${{ needs.version-info.outputs.version }} echo "VERSION='${{ needs.version-info.outputs.version }}'" >> module/__version__.py - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v2 - name: Docker metadata main if: ${{ needs.version-info.outputs.release == 1 && needs.version-info.outputs.dev != 1 }} id: meta uses: docker/metadata-action@v4 with: images: | estrellaxd/auto_bangumi ghcr.io/${{ github.repository }} tags: | type=semver,pattern=${{ needs.version-info.outputs.version }} type=raw,value=latest - name: Docker metadata dev if: ${{ needs.version-info.outputs.dev == 1 }} id: meta-dev uses: docker/metadata-action@v4 with: images: | estrellaxd/auto_bangumi ghcr.io/${{ github.repository }} tags: | type=raw,value=${{ needs.version-info.outputs.version }} type=raw,value=dev-latest - name: Login to DockerHub if: ${{ needs.version-info.outputs.release == 1 }} uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Login to ghcr.io if: ${{ needs.version-info.outputs.release == 1 }} uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.ACCESS_TOKEN }} - name: Download artifact uses: actions/download-artifact@v3 with: name: dist path: backend/src/dist - name: Build and push if: ${{ needs.version-info.outputs.release == 1 && needs.version-info.outputs.dev != 1 }} uses: docker/build-push-action@v4 with: context: . builder: ${{ steps.buildx.output.name }} platforms: linux/amd64,linux/arm64,linux/arm/v7 push: ${{ github.event_name == 'push' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha, scope=${{ github.workflow }} cache-to: type=gha, scope=${{ github.workflow }} - name: Build and push dev if: ${{ needs.version-info.outputs.dev == 1 }} uses: docker/build-push-action@v4 with: context: . builder: ${{ steps.buildx.output.name }} platforms: linux/amd64,linux/arm64,linux/arm/v7 push: ${{ github.event_name == 'push' }} tags: ${{ steps.meta-dev.outputs.tags }} labels: ${{ steps.meta-dev.outputs.labels }} cache-from: type=gha, scope=${{ github.workflow }} cache-to: type=gha, scope=${{ github.workflow }} - name: Build test if: ${{ needs.version-info.outputs.release == 0 }} uses: docker/build-push-action@v4 with: context: . builder: ${{ steps.buildx.output.name }} platforms: linux/amd64,linux/arm64,linux/arm/v7 push: false tags: estrellaxd/auto_bangumi:test cache-from: type=gha, scope=${{ github.workflow }} cache-to: type=gha, scope=${{ github.workflow }} release: runs-on: ubuntu-latest needs: [ build-docker, version-info ] if: ${{ needs.version-info.outputs.release == 1 }} outputs: url: ${{ steps.release.outputs.url }} version: ${{ needs.version-info.outputs.version }} steps: - name: Checkout code uses: actions/checkout@v3 - name: Download artifact uses: actions/download-artifact@v3 with: name: dist path: webui/dist - name: Zip webui run: | cd webui && ls -al && tree && zip -r dist.zip dist - name: Generate Release info id: release-info run: | if ${{ needs.version-info.outputs.dev == 1 }}; then echo "version=🌙${{ needs.version-info.outputs.version }}" >> $GITHUB_OUTPUT echo "pre_release=true" >> $GITHUB_OUTPUT else echo "version=🌟${{ needs.version-info.outputs.version }}" >> $GITHUB_OUTPUT echo "pre_release=false" >> $GITHUB_OUTPUT fi - name: Release id: release uses: softprops/action-gh-release@v1 with: tag_name: ${{ needs.version-info.outputs.version }} name: ${{ steps.release-info.outputs.version }} body: ${{ github.event.pull_request.body }} draft: false prerelease: ${{ steps.release-info.outputs.pre_release == 'true' }} files: | webui/dist.zip env: GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} telegram: runs-on: ubuntu-latest needs: [ release ] steps: - name: send telegram message on push uses: appleboy/telegram-action@master with: to: ${{ secrets.TELEGRAM_TO }} token: ${{ secrets.TELEGRAM_TOKEN }} message: | New release: ${{ needs.release.outputs.version }} Link: ${{ needs.release.outputs.url }}