feat: Add systemd service and production deployment (#545)

* feat: Add systemd service and production deployment

This modifies CI to use a dpkg produced from release to update and
run Coder on a tiny VM in GCP.

It's intentionally kept simple, because customers should
be able to get this same easy install experience.

* Update globalSetup.ts

* Update globalSetup.ts

* Update globalSetup.ts

* Update coder.yaml

* Use pinned version of Go
This commit is contained in:
Kyle Carberry
2022-03-24 15:07:33 +00:00
committed by GitHub
parent 99ece25bb3
commit ddd86ab547
16 changed files with 369 additions and 172 deletions
+46 -25
View File
@@ -40,7 +40,7 @@ jobs:
- uses: actions/checkout@v3
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- name: golangci-lint
uses: golangci/golangci-lint-action@v3.1.0
with:
@@ -82,7 +82,7 @@ jobs:
version: "3.19.4"
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- run: curl -sSL
https://github.com/kyleconroy/sqlc/releases/download/v1.11.0/sqlc_1.11.0_linux_amd64.tar.gz
| sudo tar -C /usr/bin -xz sqlc
@@ -133,7 +133,7 @@ jobs:
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- name: Echo Go Cache Paths
id: go-cache-paths
@@ -201,7 +201,7 @@ jobs:
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- name: Echo Go Cache Paths
id: go-cache-paths
@@ -281,7 +281,7 @@ jobs:
deploy:
name: "deploy"
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
if: github.ref == 'refs/heads/main'
permissions:
contents: read
id-token: write
@@ -291,36 +291,55 @@ jobs:
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v0
with:
workload_identity_provider: projects/477254869654/locations/global/workloadIdentityPools/github/providers/github
service_account: github-coder@coder-ci.iam.gserviceaccount.com
workload_identity_provider: projects/573722524737/locations/global/workloadIdentityPools/github/providers/github
service_account: coder-ci@coder-dogfood.iam.gserviceaccount.com
- name: Set up Google Cloud SDK
uses: google-github-actions/setup-gcloud@v0
- name: Configure Docker for Google Artifact Registry
run: gcloud auth configure-docker us-docker.pkg.dev
- uses: actions/setup-node@v3
with:
node-version: "14"
- name: Install node_modules
run: ./scripts/yarn_install.sh
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- name: Echo Go Cache Paths
id: go-cache-paths
run: |
echo "::set-output name=go-build::$(go env GOCACHE)"
echo "::set-output name=go-mod::$(go env GOMODCACHE)"
- name: Go Build Cache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-build }}
key: ${{ runner.os }}-release-go-build-${{ hashFiles('**/go.sum') }}
- name: Go Mod Cache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-mod }}
key: ${{ runner.os }}-release-go-mod-${{ hashFiles('**/go.sum') }}
- uses: goreleaser/goreleaser-action@v2
with:
install-only: true
- run: make docker/image/coder
- name: Build Release
run: make release
- run: docker push us-docker.pkg.dev/coder-blacktriangle-dev/ci/coder:latest
- uses: actions/upload-artifact@v3
with:
name: coder_linux_amd64.deb
path: ./dist/coder_*_linux_amd64.deb
- name: Update coder service
run: gcloud run services update coder --image us-docker.pkg.dev/coder-blacktriangle-dev/ci/coder:latest --project coder-blacktriangle-dev --tag "git-$(git rev-parse --short HEAD)" --region us-central1
- name: Install Release
run: |
gcloud config set project coder-dogfood
gcloud config set compute/zone us-central1-a
gcloud compute scp ./dist/coder_*_linux_amd64.deb coder:/tmp/coder.deb
gcloud compute ssh coder -- sudo dpkg -i /tmp/coder.deb
- name: Start
run: gcloud compute ssh coder -- sudo service coder restart
test-js:
name: "test/js"
@@ -342,7 +361,7 @@ jobs:
# Go is required for uploading the test results to datadog
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- uses: actions/setup-node@v3
with:
@@ -406,7 +425,7 @@ jobs:
# Go is required for uploading the test results to datadog
- uses: actions/setup-go@v2
with:
go-version: "^1.17"
go-version: "~1.17"
- uses: hashicorp/setup-terraform@v1
with:
@@ -439,7 +458,9 @@ jobs:
path: ${{ steps.go-cache-paths.outputs.go-mod }}
key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }}
- run: make build
- name: Build
run: |
make site/out
- run: yarn playwright:install
working-directory: site