-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #11 from tablelandnetwork/bcalza/k8s
Adds k8s files and CD workflow
- Loading branch information
Showing
16 changed files
with
8,263 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
name: Deploy | ||
|
||
concurrency: | ||
group: deploy-${{github.ref}} | ||
cancel-in-progress: true | ||
|
||
on: | ||
push: | ||
branches: | ||
- "**" | ||
release: | ||
types: | ||
- created | ||
|
||
env: | ||
GKE_REGION: us-east1 | ||
GKE_CLUSTER: basin | ||
CONTAINER_REGISTRY: us-west1-docker.pkg.dev | ||
|
||
jobs: | ||
deploy: | ||
if: github.event_name == 'release' || github.ref == 'refs/heads/main' || contains(github.event.head_commit.message, '[staging]') | ||
name: Deploy | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Dump GitHub context | ||
env: | ||
GITHUB_CONTEXT: ${{ toJSON(github) }} | ||
run: echo "$GITHUB_CONTEXT" | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Prepare | ||
id: prep | ||
run: | | ||
if [[ ${{ github.event_name }} == 'release' ]]; then | ||
echo "DEPLOYMENT=staging" >> "$GITHUB_ENV" | ||
else | ||
echo "DEPLOYMENT=staging" >> "$GITHUB_ENV" | ||
fi | ||
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV" | ||
- name: Set up Docker Buildx | ||
id: buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Cache Docker layers | ||
uses: actions/cache@v3 | ||
with: | ||
path: /tmp/.buildx-cache | ||
key: ${{ runner.os }}-buildx-${{ github.sha }} | ||
restore-keys: | | ||
${{ runner.os }}-buildx- | ||
- name: Set up cargo cache | ||
uses: actions/cache@v3 | ||
continue-on-error: false | ||
with: | ||
path: | | ||
~/.cargo/bin/ | ||
~/.cargo/registry/index/ | ||
~/.cargo/registry/cache/ | ||
~/.cargo/git/db/ | ||
target/ | ||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | ||
restore-keys: ${{ runner.os }}-cargo- | ||
|
||
- name: Buildx patch | ||
run: | | ||
Dockfiles="$(find $1 -name 'Dockerfile')" | ||
d=$(date +%s) | ||
i=0 | ||
for file in $Dockfiles; do | ||
i=$(( i + 1 )) | ||
echo "patching timestamp for $file" | ||
touch -d @$(( d + i )) "$file" | ||
done | ||
- name: Google Auth | ||
uses: 'google-github-actions/auth@v1' | ||
with: | ||
credentials_json: '${{ secrets.GCP_CREDENTIALS }}' | ||
|
||
- name: Install Cloud SDK | ||
uses: google-github-actions/setup-gcloud@v1 | ||
with: | ||
version: 415.0.0 | ||
project_id: ${{ secrets.GCP_PROJECT }} | ||
|
||
- name: Configure Docker | ||
run: gcloud auth configure-docker $CONTAINER_REGISTRY | ||
|
||
- name: Build and push worker | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: ./ | ||
file: ./Dockerfile | ||
builder: ${{ steps.buildx.outputs.name }} | ||
push: true | ||
tags: ${{ env.CONTAINER_REGISTRY }}/${{ secrets.GCP_PROJECT }}/textile/basin/basin_worker:sha-${{ env.SHA_SHORT}} | ||
cache-from: type=local,src=/tmp/.buildx-cache | ||
cache-to: type=local,dest=/tmp/.buildx-cache | ||
build-args: CRATE=basin_worker | ||
|
||
- name: Build and push exporter | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: ./ | ||
file: ./Dockerfile | ||
builder: ${{ steps.buildx.outputs.name }} | ||
push: true | ||
tags: ${{ env.CONTAINER_REGISTRY }}/${{ secrets.GCP_PROJECT }}/textile/basin/basin_exporter:sha-${{ env.SHA_SHORT }} | ||
cache-from: type=local,src=/tmp/.buildx-cache | ||
cache-to: type=local,dest=/tmp/.buildx-cache | ||
build-args: CRATE=basin_exporter | ||
|
||
- name: Get GKE Credentials | ||
uses: 'google-github-actions/get-gke-credentials@v1' | ||
with: | ||
cluster_name: ${{ env.GKE_CLUSTER }} | ||
location: ${{ env.GKE_REGION }} | ||
|
||
- name: Deploy to GKE | ||
working-directory: ./k8s | ||
run: | | ||
DEPLOYMENT=$DEPLOYMENT IMAGE_BASIN_WORKER=$CONTAINER_REGISTRY/${{ secrets.GCP_PROJECT }}/textile/basin/basin_worker:sha-$SHA_SHORT IMAGE_BASIN_EXPORTER=$CONTAINER_REGISTRY/${{ secrets.GCP_PROJECT }}/textile/basin/basin_exporter:sha-$SHA_SHORT make deploy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
|
||
KUSTOMIZE=go run sigs.k8s.io/kustomize/kustomize/v5@latest | ||
|
||
deploy: | ||
cd ${DEPLOYMENT} && $(KUSTOMIZE) edit set image textile/basin_worker=${IMAGE_BASIN_WORKER} textile/basin_exporter=${IMAGE_BASIN_EXPORTER} | ||
cd ${DEPLOYMENT} && $(KUSTOMIZE) build . | sed -e 's/\x27"3000"\x27/3000/g' | kubectl apply -f - | ||
.PHONY: deploy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: basin-exporter | ||
labels: | ||
app: basin-exporter | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
app: basin-exporter-v1 | ||
template: | ||
metadata: | ||
labels: | ||
app: basin-exporter-v1 | ||
spec: | ||
containers: | ||
- name: basin-exporter | ||
image: textile/basin_exporter | ||
imagePullPolicy: Always | ||
command: ["/bin/app"] | ||
args: [ | ||
"--export-bucket", "$(EXPORT_BUCKET)", | ||
"--database-url", "$(DATABASE_URL)", | ||
"--export-credentials", "$(EXPORT_CREDENTIALS)", | ||
"--bind-health-address", "$(BIND_HEALTH_ADDRESS)", | ||
#"--export-schedule", "$(EXPORT_SCHEDULE)", | ||
"-vvvvv" | ||
] | ||
env: | ||
- name: DATABASE_URL | ||
valueFrom: | ||
secretKeyRef: | ||
name: basin-secret | ||
key: database-url | ||
- name: EXPORT_CREDENTIALS | ||
valueFrom: | ||
secretKeyRef: | ||
name: basin-secret | ||
key: export-credentials | ||
envFrom: | ||
- configMapRef: | ||
name: configmap-basin-exporter | ||
resources: | ||
requests: | ||
cpu: 250m | ||
memory: 512Mi | ||
readinessProbe: | ||
httpGet: | ||
path: /health | ||
port: 3001 | ||
initialDelaySeconds: 5 | ||
periodSeconds: 10 | ||
failureThreshold: 3 | ||
livenessProbe: | ||
httpGet: | ||
path: /health | ||
port: 3001 | ||
initialDelaySeconds: 15 | ||
periodSeconds: 20 | ||
failureThreshold: 3 |
Oops, something went wrong.