--- name: Test code; build Docker image; push to Docker Hub, GitHub Container Registry and Gitea. on: push: branches: - master pull_request: workflow_dispatch: schedule: - cron: "@daily" env: SERVE_DOMAIN: https://localhost/ WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} UPLOAD_FOLDER: ./Uploads jobs: test: runs-on: ubuntu-latest steps: # GitHub Container Registry - uses: https://github.com/docker/login-action@v3 if: github.event_name != 'pull_request' with: registry: ghcr.io username: thelovinator1 password: ${{ secrets.PACKAGES_WRITE_GITHUB_TOKEN }} # Gitea Container Registry - uses: https://github.com/docker/login-action@v3 if: github.event_name != 'pull_request' with: registry: git.lovinator.space username: thelovinator password: ${{ secrets.PACKAGES_WRITE_GITEA_TOKEN }} # Docker Hub Registry - uses: https://github.com/docker/login-action@v3 if: github.event_name != 'pull_request' with: registry: docker.io username: thelovinator password: ${{ secrets.DOCKERHUB_TOKEN }} # Download the latest commit from the master branch - uses: https://github.com/actions/checkout@v4 # Set up QEMU - id: qemu uses: https://github.com/docker/setup-qemu-action@v3 with: image: tonistiigi/binfmt:master platforms: linux/amd64,linux/arm64 cache-image: false # Set up Buildx so we can build multi-arch images - uses: https://github.com/docker/setup-buildx-action@v3 # Install ffmpeg - name: Install ffmpeg run: | sudo apt-get update sudo apt-get install -y ffmpeg # Set up uv for Python dependency management - uses: astral-sh/setup-uv@v5 with: version: "latest" # Install dependencies - run: uv sync --all-extras --all-groups # Run tests - run: uv run pytest # Install the latest version of ruff - uses: https://github.com/astral-sh/ruff-action@v3 with: version: "latest" # Lint the Python code using ruff - run: ruff check --exit-non-zero-on-fix --verbose # Check if the Python code needs formatting - run: ruff format --check --verbose # Lint Dockerfile - run: docker build --check . # Extract metadata (tags, labels) from Git reference and GitHub events for Docker - id: meta uses: https://github.com/docker/metadata-action@v5 env: DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index with: images: | ghcr.io/thelovinator1/discord-embed thelovinator/discord-nice-embed-maker-for-my-yoy git.lovinator.space/thelovinator/anewdawn tags: | type=raw,value=latest,enable=${{ gitea.ref == format('refs/heads/{0}', 'master') }} type=raw,value=master,enable=${{ gitea.ref == format('refs/heads/{0}', 'master') }} # Build and push the Docker image - uses: https://github.com/docker/build-push-action@v6 with: context: . platforms: linux/amd64,linux/arm64 push: ${{ gitea.event_name != 'pull_request' }} labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} annotations: ${{ steps.meta.outputs.annotations }}