mirror of
https://github.com/PokeAPI/pokeapi
synced 2024-11-25 12:50:18 +00:00
Merge pull request #1028 from PokeAPI/kustomize
Use local image when testing k8s
This commit is contained in:
commit
cccbcdd9d0
12 changed files with 128 additions and 102 deletions
42
.github/workflows/docker-build.yml
vendored
42
.github/workflows/docker-build.yml
vendored
|
@ -1,42 +0,0 @@
|
|||
name: Build Docker image
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: pokeapi/pokeapi
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Inspect builder
|
||||
run: |
|
||||
echo "Name: ${{ steps.buildx.outputs.name }}"
|
||||
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
|
||||
echo "Status: ${{ steps.buildx.outputs.status }}"
|
||||
echo "Flags: ${{ steps.buildx.outputs.flags }}"
|
||||
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
||||
- name: Build
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ./Resources/docker/app/Dockerfile
|
||||
push: false
|
||||
platforms: local,linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
101
.github/workflows/docker-k8s.yml
vendored
Normal file
101
.github/workflows/docker-k8s.yml
vendored
Normal file
|
@ -0,0 +1,101 @@
|
|||
name: Build Docker image and create k8s with it
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: pokeapi/pokeapi
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ./Resources/docker/app/Dockerfile
|
||||
push: false
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||
tags: pokeapi/pokeapi:local
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
k8s:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: pokeapi/pokeapi
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Build
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ./Resources/docker/app/Dockerfile
|
||||
push: false
|
||||
load: true
|
||||
platforms: local
|
||||
tags: pokeapi/pokeapi:local
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||
- name: Lint k8s
|
||||
run: (cd Resources/k8s/kustomize && yamllint .)
|
||||
- name: Create k8s Kind Cluster
|
||||
uses: helm/kind-action@v1.10.0
|
||||
with:
|
||||
cluster_name: pokeapi
|
||||
version: v0.21.0
|
||||
- name: Create deployment configuration
|
||||
run: |
|
||||
cp Resources/k8s/kustomize/base/secrets/postgres.env.sample Resources/k8s/kustomize/base/secrets/postgres.env
|
||||
cp Resources/k8s/kustomize/base/secrets/graphql.env.sample Resources/k8s/kustomize/base/secrets/graphql.env
|
||||
cp Resources/k8s/kustomize/base/config/pokeapi.env.sample Resources/k8s/kustomize/base/config/pokeapi.env
|
||||
- name: Load local image to Kind
|
||||
run: kind load docker-image pokeapi/pokeapi:local --name pokeapi
|
||||
- name: K8s Apply
|
||||
run: |
|
||||
make kustomize-local-apply
|
||||
kubectl proxy &
|
||||
sleep 1
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/
|
||||
- name: Set default namespace and print info
|
||||
run: |
|
||||
kubectl config set-context --current --namespace pokeapi
|
||||
kubectl describe deployment
|
||||
- name: Migrate and build data
|
||||
run: |
|
||||
make k8s-migrate
|
||||
make k8s-build-db
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/pal-park-area/5/
|
||||
- name: K8s wait for job
|
||||
run: |
|
||||
kubectl wait --timeout=600s --for=condition=complete job/load-graphql
|
||||
last_command=$(kubectl get job -o jsonpath='{.status.succeeded}' load-graphql)
|
||||
test "$last_command" -eq 1
|
||||
- name: Get GQL output
|
||||
run: kubectl logs jobs/load-graphql
|
50
.github/workflows/kustomize.yml
vendored
50
.github/workflows/kustomize.yml
vendored
|
@ -1,50 +0,0 @@
|
|||
name: Deploy Kustomize k8s cluster
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Build and Push Docker image"]
|
||||
branches: [master, staging]
|
||||
types:
|
||||
- completed
|
||||
schedule:
|
||||
- cron: '0 0 1 * *'
|
||||
|
||||
jobs:
|
||||
create-kustomize-cluster:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Lint
|
||||
run: (cd Resources/k8s/kustomize && yamllint .)
|
||||
- name: Create k8s Kind Cluster
|
||||
uses: helm/kind-action@v1.1.0
|
||||
with:
|
||||
version: v0.11.1
|
||||
- name: Create deployment configuration
|
||||
run: |
|
||||
cp Resources/k8s/kustomize/base/secrets/postgres.env.sample Resources/k8s/kustomize/base/secrets/postgres.env
|
||||
cp Resources/k8s/kustomize/base/secrets/graphql.env.sample Resources/k8s/kustomize/base/secrets/graphql.env
|
||||
cp Resources/k8s/kustomize/base/config/pokeapi.env.sample Resources/k8s/kustomize/base/config/pokeapi.env
|
||||
- name: K8s Apply
|
||||
run: |
|
||||
if [ ${GITHUB_REF#refs/heads/} = 'master' ]; then make kustomize-apply; else make kustomize-staging-apply; fi
|
||||
kubectl proxy &
|
||||
kubectl describe deployment
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/
|
||||
- name: Set default namespace
|
||||
run: |
|
||||
kubectl config set-context --current --namespace pokeapi
|
||||
- name: Migrate and build data
|
||||
run: |
|
||||
make k8s-migrate
|
||||
make k8s-build-db
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/pal-park-area/5/
|
||||
- name: K8s Apply
|
||||
run: |
|
||||
kubectl wait --timeout=120s --for=condition=complete job/load-graphql
|
||||
last_command=$(kubectl get job -o jsonpath='{.status.succeeded}' load-graphql)
|
||||
test "$last_command" -eq 1
|
5
Makefile
5
Makefile
|
@ -116,9 +116,12 @@ hasura-get-anon-schema: # Dumps GraphQL schema
|
|||
kustomize-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster
|
||||
kubectl apply -k Resources/k8s/kustomize/base/
|
||||
|
||||
kustomize-staging-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster
|
||||
kustomize-staging-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster using pokeapi/pokeapi:staging
|
||||
kubectl apply -k Resources/k8s/kustomize/staging/
|
||||
|
||||
kustomize-local-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster using the locally available pokeapi/pokeapi:local
|
||||
kubectl apply -k Resources/k8s/kustomize/local/
|
||||
|
||||
k8s-migrate: # (k8s) Run any pending migrations
|
||||
kubectl exec --namespace pokeapi deployment/pokeapi -- python manage.py migrate ${docker_config}
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
ADMINS=PokeAPI,change.me@pokeapi.co
|
||||
BASE_URL=http://localhost/
|
||||
POKEAPI_CHECKOUT_REF=master
|
|
@ -25,7 +25,7 @@ spec:
|
|||
done;
|
||||
containers:
|
||||
- name: graphql-engine
|
||||
image: hasura/graphql-engine:v2.16.1
|
||||
image: hasura/graphql-engine:v2.36.4
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
env:
|
||||
|
|
|
@ -26,7 +26,7 @@ spec:
|
|||
containers:
|
||||
- name: pokeapi
|
||||
image: pokeapi/pokeapi:master
|
||||
imagePullPolicy: Always
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
securityContext: # CI: Github Actions kills this container if not run with root. Otherwise, it's safe to use the default pokeapi/pokeapi user and remove these lines.
|
||||
|
|
|
@ -25,13 +25,17 @@ spec:
|
|||
secretKeyRef:
|
||||
name: graphql-env-secret
|
||||
key: HASURA_GRAPHQL_ADMIN_SECRET
|
||||
- name: POKEAPI_CHECKOUT_REF
|
||||
valueFrom:
|
||||
configMapKeyRef:
|
||||
name: pokeapi-configmap
|
||||
key: POKEAPI_CHECKOUT_REF
|
||||
command: ["sh", "-c"]
|
||||
args:
|
||||
- apt-get update &&
|
||||
apt-get install -y git curl &&
|
||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash &&
|
||||
hasura update-cli --version v2.0.8 &&
|
||||
- apt-get update && apt-get install -y curl git &&
|
||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | VERSION=v2.36.4 bash &&
|
||||
cd /tmp &&
|
||||
git clone https://github.com/PokeAPI/pokeapi.git &&
|
||||
cd pokeapi &&
|
||||
git checkout staging &&
|
||||
(git checkout $(POKEAPI_CHECKOUT_REF) || git checkout master) &&
|
||||
hasura md apply --endpoint http://graphql:8080 --project graphql --admin-secret $(HASURA_GRAPHQL_ADMIN_SECRET)
|
||||
|
|
|
@ -5,7 +5,7 @@ namespace: pokeapi
|
|||
|
||||
configMapGenerator:
|
||||
- name: pokeapi-configmap
|
||||
files:
|
||||
envs:
|
||||
- config/pokeapi.env
|
||||
|
||||
secretGenerator:
|
||||
|
|
9
Resources/k8s/kustomize/local/kustomization.yaml
Normal file
9
Resources/k8s/kustomize/local/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
bases:
|
||||
- ../base
|
||||
|
||||
images:
|
||||
- name: pokeapi/pokeapi
|
||||
newTag: local
|
|
@ -44,7 +44,7 @@ services:
|
|||
- ./Resources/nginx/ssl:/ssl:ro
|
||||
- graphql_cache:/tmp/cache
|
||||
graphql-engine:
|
||||
image: hasura/graphql-engine:v2.36.1-ce
|
||||
image: hasura/graphql-engine:v2.36.4
|
||||
ports:
|
||||
- "8080:8080"
|
||||
depends_on:
|
||||
|
|
Loading…
Reference in a new issue