diff --git a/go/Taskfile.yml b/go/Taskfile.yml new file mode 100644 index 0000000..08fc5e6 --- /dev/null +++ b/go/Taskfile.yml @@ -0,0 +1,94 @@ +version: '3' + +vars: + DEV_REPO: us-west2-docker.pkg.dev/flowy-dev-440017/deployments + PROD_REPO: us-west2-docker.pkg.dev/flowy-prod-440017/deployments + +tasks: + generate: + desc: Generate protobuf code and run go generate + cmds: + - task: genproto + - go generate ./... + + genproto: + desc: Generate Go code from .proto files via docker + vars: + PROTO_DIR: '{{.PROTO_DIR | default "./protocol"}}' + OUT_DIR: '{{.OUT_DIR | default "./genproto"}}' + cmds: + - 'echo "Proto directory: {{.PROTO_DIR}}"' + - 'echo "Output directory: {{.OUT_DIR}}"' + - rm -rf {{.OUT_DIR}} + - mkdir -p {{.OUT_DIR}} + - | + docker run --rm \ + -v "{{.PROTO_DIR}}/":/protocol \ + -v "{{.OUT_DIR}}":/genproto \ + --workdir / \ + talksik/golang-protoc:latest \ + sh -c 'protoc --proto_path=./protocol \ + --go_out=./genproto \ + --go_opt=paths=source_relative \ + --go-grpc_out=./genproto \ + --go-grpc_opt=paths=source_relative \ + $(find ./protocol -name "*.proto")' + + test: + desc: Run tests with pretty output via gotestfmt + cmds: + - go test -json ./... | docker run -i ghcr.io/gotesttools/gotestfmt:latest + + create-migration: + desc: 'Create new migration (usage: task create-migration ARG=create_users_table)' + cmds: + - 'echo "Creating migration with name {{.ARG}}"' + - docker run -v ./migrations:/migrations --network host migrate/migrate create -ext sql -seq -dir /migrations {{.ARG}} + + dev-database: + desc: Open psql shell against the dev database + interactive: true + cmds: + - | + kubectl run postgres-client \ + --rm -it --image=postgres:latest \ + --env="LLINK_POSTGRES_CONNECTION_URL=$(kubectl get secret shared-secrets -o jsonpath='{.data.LLINK_POSTGRES_CONNECTION_URL}' --context dev | base64 --decode)" \ + --context dev \ + --command -- /bin/bash -c "psql \$LLINK_POSTGRES_CONNECTION_URL" + + prod-database: + desc: Open psql shell against the prod database + interactive: true + cmds: + - | + kubectl run postgres-client \ + --rm -it --image=postgres:latest \ + --env="LLINK_POSTGRES_CONNECTION_URL=$(kubectl get secret shared-secrets -o jsonpath='{.data.LLINK_POSTGRES_CONNECTION_URL}' --context prod | base64 --decode)" \ + --context prod \ + --command -- /bin/bash -c "psql \$LLINK_POSTGRES_CONNECTION_URL" + + migrate-dev: + desc: Run migrations against dev cluster + cmds: + - kubectl delete job migrations --ignore-not-found --context=dev + - SKAFFOLD_DEFAULT_REPO={{.DEV_REPO}} skaffold run -p migrations --kube-context dev --tail + + migrate-prod: + desc: Run migrations against prod cluster + cmds: + - kubectl delete job migrations --ignore-not-found --context=prod + - SKAFFOLD_DEFAULT_REPO={{.PROD_REPO}} skaffold run -p migrations --kube-context prod --tail + + deploy-dev: + desc: 'Deploy to dev (optionally MODULE=orion to deploy a single service)' + cmds: + - task: generate + - task: test + - SKAFFOLD_DEFAULT_REPO={{.DEV_REPO}} skaffold run -p dev {{if .MODULE}}-m {{.MODULE}}{{end}} --kube-context dev --port-forward --tail + + deploy-prod: + desc: 'Deploy to prod (optionally MODULE=orion to deploy a single service)' + cmds: + - task: generate + - task: test + - SKAFFOLD_DEFAULT_REPO={{.PROD_REPO}} skaffold run -p prod {{if .MODULE}}-m {{.MODULE}}{{end}} --kube-context prod --port-forward --tail