diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..dfb90b7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..2477263 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,101 @@ +name: CI + +"on": + merge_group: {} + pull_request: {} + push: + branches-ignore: + # These should always correspond to pull requests, so ignore them for + # the push trigger and let them be triggered by the pull_request + # trigger, avoiding running the workflow twice. This is a minor + # optimization so there's no need to ensure this is comprehensive. + - "dependabot/**" + - "renovate/**" + - "tickets/**" + - "u/**" + tags: + - "*" + +jobs: + lint: + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.7" + + - name: Run pre-commit + uses: pre-commit/action@v3.0.0 + + test: + runs-on: ubuntu-latest + timeout-minutes: 15 + + strategy: + matrix: + python: + - "3.7" + - "3.8" + - "3.9" + - "3.10" + + steps: + - uses: actions/checkout@v3 + + - name: Run tox + uses: lsst-sqre/run-tox@v1 + with: + python-version: ${{ matrix.python }} + tox-envs: "py,coverage-report,typing" + + build: + runs-on: ubuntu-latest + needs: [lint, test] + timeout-minutes: 15 + + # Only do Docker builds of tagged releases and pull requests from ticket + # branches. This will still trigger on pull requests from untrusted + # repositories whose branch names match our tickets/* branch convention, + # but in this case the build will fail with an error since the secret + # won't be set. + if: > + startsWith(github.ref, 'refs/tags/') + || startsWith(github.head_ref, 'tickets/') + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Define the Docker tag + id: vars + run: echo ::set-output name=tag::$(scripts/docker-tag.sh) + + - name: Print the tag + id: print + run: echo ${{ steps.vars.outputs.tag }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + push: true + tags: | + ghcr.io/lsst-sqre/giftless-github-proxy-auth:${{ steps.vars.outputs.tag }} + cache-from: type=gha + cache-to: type=gha,mode=max