name: Lint, Test, Tag, Build and Deploy DEV on: push: branches: - dev - master - renovate/** paths-ignore: - "**/.gitignore" - "**/.vscode/**" - "**/README.md" - "**/CHANGELOG.md" - "**/docs/**" workflow_dispatch: pull_request: branches: - dev env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: psf/black@stable with: options: "-l 100 --exclude '/.venv/|alembic/|/__init__.py'" - uses: creyD/autoflake_action@master with: no_commit: True options: --in-place --remove-all-unused-imports -r --exclude **/__init__.py,**/db/models.py, - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: Adjusted files for isort & autopep tag: needs: lint runs-on: ubuntu-latest if: (github.ref_name == 'master' || github.ref_name == 'dev') && github.event_name == 'push' permissions: contents: write # for the tags outputs: version: ${{ steps.git_version.outputs.version }} steps: - uses: actions/checkout@v4 with: fetch-tags: true ref: ${{ github.ref }} fetch-depth: 0 - name: setup git run: | git config --local user.email "15138480+creyD@users.noreply.github.com" git config --local user.name "creyD" - name: set version format id: version_format run: | if [[ ${{ github.ref_name }} == 'master' ]]; then echo "version_format=\${major}.\${minor}.\${patch}" >> $GITHUB_OUTPUT else echo "version_format=\${major}.\${minor}.\${patch}rc\${increment}" >> $GITHUB_OUTPUT fi - name: Git Version uses: PaulHatch/semantic-version@v5.4.0 id: git_version with: tag_prefix: "" major_pattern: "breaking:" minor_pattern: "feat:" enable_prerelease_mode: false version_format: ${{ steps.version_format.outputs.version_format }} - name: Create & Push Tag run: | git tag ${{ steps.git_version.outputs.version }} git push origin ${{ steps.git_version.outputs.version }} build_and_push: runs-on: ubuntu-latest permissions: write-all if: github.event_name == 'push' needs: tag steps: - name: Checkout repository uses: actions/checkout@v4 - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ github.ref_name }} tags: latest - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . file: ./Dockerfile build-args: | VERSION=${{ needs.tag.outputs.version }}-${{ github.ref_name }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}