mirror of
https://github.com/PokeAPI/pokeapi
synced 2024-11-29 06:40:31 +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
|
kustomize-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster
|
||||||
kubectl apply -k Resources/k8s/kustomize/base/
|
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/
|
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
|
k8s-migrate: # (k8s) Run any pending migrations
|
||||||
kubectl exec --namespace pokeapi deployment/pokeapi -- python manage.py migrate ${docker_config}
|
kubectl exec --namespace pokeapi deployment/pokeapi -- python manage.py migrate ${docker_config}
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
ADMINS=PokeAPI,change.me@pokeapi.co
|
ADMINS=PokeAPI,change.me@pokeapi.co
|
||||||
BASE_URL=http://localhost/
|
BASE_URL=http://localhost/
|
||||||
|
POKEAPI_CHECKOUT_REF=master
|
|
@ -25,7 +25,7 @@ spec:
|
||||||
done;
|
done;
|
||||||
containers:
|
containers:
|
||||||
- name: graphql-engine
|
- name: graphql-engine
|
||||||
image: hasura/graphql-engine:v2.16.1
|
image: hasura/graphql-engine:v2.36.4
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8080
|
- containerPort: 8080
|
||||||
env:
|
env:
|
||||||
|
|
|
@ -26,7 +26,7 @@ spec:
|
||||||
containers:
|
containers:
|
||||||
- name: pokeapi
|
- name: pokeapi
|
||||||
image: pokeapi/pokeapi:master
|
image: pokeapi/pokeapi:master
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8080
|
- 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.
|
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:
|
secretKeyRef:
|
||||||
name: graphql-env-secret
|
name: graphql-env-secret
|
||||||
key: HASURA_GRAPHQL_ADMIN_SECRET
|
key: HASURA_GRAPHQL_ADMIN_SECRET
|
||||||
|
- name: POKEAPI_CHECKOUT_REF
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: pokeapi-configmap
|
||||||
|
key: POKEAPI_CHECKOUT_REF
|
||||||
command: ["sh", "-c"]
|
command: ["sh", "-c"]
|
||||||
args:
|
args:
|
||||||
- apt-get update &&
|
- apt-get update && apt-get install -y curl git &&
|
||||||
apt-get install -y git curl &&
|
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | VERSION=v2.36.4 bash &&
|
||||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash &&
|
cd /tmp &&
|
||||||
hasura update-cli --version v2.0.8 &&
|
|
||||||
git clone https://github.com/PokeAPI/pokeapi.git &&
|
git clone https://github.com/PokeAPI/pokeapi.git &&
|
||||||
cd pokeapi &&
|
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)
|
hasura md apply --endpoint http://graphql:8080 --project graphql --admin-secret $(HASURA_GRAPHQL_ADMIN_SECRET)
|
||||||
|
|
|
@ -5,7 +5,7 @@ namespace: pokeapi
|
||||||
|
|
||||||
configMapGenerator:
|
configMapGenerator:
|
||||||
- name: pokeapi-configmap
|
- name: pokeapi-configmap
|
||||||
files:
|
envs:
|
||||||
- config/pokeapi.env
|
- config/pokeapi.env
|
||||||
|
|
||||||
secretGenerator:
|
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
|
- ./Resources/nginx/ssl:/ssl:ro
|
||||||
- graphql_cache:/tmp/cache
|
- graphql_cache:/tmp/cache
|
||||||
graphql-engine:
|
graphql-engine:
|
||||||
image: hasura/graphql-engine:v2.36.1-ce
|
image: hasura/graphql-engine:v2.36.4
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|
Loading…
Reference in a new issue