aboutsummaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-11-26 18:56:56 +0000
committerGravatar GitHub <[email protected]>2020-11-26 18:56:56 +0000
commit182da79739a134b8d574bf995601bc33b2f9a8c8 (patch)
tree26c57af0d6b4fa7a6d4f7d2b578b741662c01bfc /.github
parentlinebreak in SCHEMA.md (diff)
parentAdd secretRef key to deployment.yaml (diff)
Merge pull request #1 from python-discord/docker-ci-deployment
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/forms-backend.yml115
1 files changed, 115 insertions, 0 deletions
diff --git a/.github/workflows/forms-backend.yml b/.github/workflows/forms-backend.yml
new file mode 100644
index 0000000..9638728
--- /dev/null
+++ b/.github/workflows/forms-backend.yml
@@ -0,0 +1,115 @@
+name: Forms Backend
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ lint:
+ name: Linting
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Setup Python
+ id: python
+ uses: actions/setup-python@v2
+ with:
+ python-version: '3.9'
+
+ - name: Setup Poetry
+ uses: snok/[email protected]
+ with:
+ virtualenvs-create: true
+ virtualenvs-in-project: true
+
+ # When same context exists in cache already, restore this environment.
+ - name: Poetry Environment Caching
+ uses: actions/cache@v2
+ id: python_cache
+ with:
+ path: .venv
+ key: "venv-${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}"
+
+ # Only install dependencies when cache didn't hit.
+ - name: Install dependencies
+ if: steps.python_cache.outputs.cache-hit != 'true'
+ run: |
+ poetry install
+
+ # Use this formatting to show them as GH Actions annotations.
+ - name: Run flake8
+ run: "poetry run flake8 --format='::error file=%(path)s,line=%(row)d,col=%(col)d::[flake8] %(code)s: %(text)s'"
+
+ build:
+ name: Build & Push
+ runs-on: ubuntu-latest
+
+ needs: [lint]
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
+
+ steps:
+ - name: Create SHA Container Tag
+ id: sha_tag
+ run: |
+ tag=$(cut -c 1-7 <<< $GITHUB_SHA)
+ echo "::set-output name=tag::$tag"
+
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Setup Docker BuildX
+ uses: docker/setup-buildx-action@v1
+
+ - name: Login to Github Container Registry
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: ${{ secrets.GHCR_USER }}
+ password: ${{ secrets.GHCR_TOKEN }}
+
+ - name: Build and push
+ uses: docker/build-push-action@v2
+ with:
+ context: .
+ file: ./Dockerfile
+ push: true
+ cache-from: type=registry,ref=ghcr.io/python-discord/forms-backend:latest
+ cache-to: type=inline
+ tags: |
+ ghcr.io/python-discord/forms-backend:latest
+ ghcr.io/python-discord/forms-backend:${{ steps.sha_tag.outputs.tag }}
+
+ deploy:
+ name: Deployment
+ runs-on: ubuntu-latest
+
+ needs: [build]
+
+ steps:
+ - name: Create SHA Container Tag
+ id: sha_tag
+ run: |
+ tag=$(cut -c 1-7 <<< $GITHUB_SHA)
+ echo "::set-output name=tag::$tag"
+
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Authenticate with Kubernetes
+ uses: azure/k8s-set-context@v1
+ with:
+ method: kubeconfig
+ kubeconfig: ${{ secrets.KUBECONFIG }}
+
+ - name: Deploy to Kubernetes
+ uses: Azure/k8s-deploy@v1
+ with:
+ manifest: |
+ deployment.yaml
+ images: 'ghcr.io/python-discord/forms-backend:${{ steps.sha_tag.outputs.tag }}'
+ kubectl-version: 'latest'