feat: async torrent downloader. #609
This file contains 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 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: Checkout | |
uses: actions/checkout@v3 | |
- name: If release | |
id: release | |
run: | | |
if [[ '${{ github.event_name }}' == 'pull_request' && '${{ github.event.pull_request.head.ref }}' == *'dev'* ]]; 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' ]; then | |
if [ ${{ github.event.pull_request.merged }} == true ]; then | |
echo "version=${{ github.event.pull_request.title }}" >> $GITHUB_OUTPUT | |
fi | |
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=raw,value=${{ 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: True | |
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 webui | |
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: Download artifact app | |
uses: actions/download-artifact@v3 | |
with: | |
name: dist | |
path: backend/src/dist | |
- 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: Copy requirements.txt | |
working-directory: ./backend | |
run: | |
cp requirements.txt src/requirements.txt | |
- name: Zip app | |
run: | | |
cd backend && zip -r app-v${{ needs.version-info.outputs.version }}.zip src | |
- 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 | |
backend/app-v${{ needs.version-info.outputs.version }}.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 }} |