Skip to content

Commit 9a6e19e

Browse files
mads-hartmannroboquat
authored andcommitted
Implement preivew-env-gc and run on schedule
1 parent 60203d7 commit 9a6e19e

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

.github/workflows/preview-env-gc.yml

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,57 @@
11
name: "Preview environment garbage collection"
22
on:
33
workflow_dispatch:
4+
schedule:
5+
- cron: "0 */4 * * *"
46
jobs:
5-
gc:
6-
name: "Delete unused preview environments"
7+
stale:
8+
name: "Find stale preview environments"
79
runs-on: [self-hosted]
10+
container:
11+
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:mads-leeway-v0.7.3.4
12+
outputs:
13+
names: ${{ steps.set-matrix.outputs.names }}
14+
count: ${{ steps.set-matrix.outputs.count }}
815
steps:
916
- uses: actions/checkout@v3
10-
- name: Garbage collect
17+
with:
18+
fetch-depth: 0
19+
- name: Compute matrix
20+
id: set-matrix
21+
shell: bash
22+
env:
23+
PREVIEW_ENV_DEV_SA_KEY: ${{ secrets.GCP_CREDENTIALS }}
1124
run: |
12-
echo "Not implemented yet 🧹"
25+
set -euo pipefail
26+
27+
export LEEWAY_WORKSPACE_ROOT="$(pwd)"
28+
export HOME="/home/gitpod"
29+
export PREVIEW_ENV_DEV_SA_KEY_PATH="/home/gitpod/.config/gcloud/preview-environment-dev-sa.json"
30+
# Used by 'previewctl list stale'
31+
export GOOGLE_APPLICATION_CREDENTIALS="/home/gitpod/.config/gcloud/preview-environment-dev-sa.json"
32+
33+
echo "${PREVIEW_ENV_DEV_SA_KEY}" > "${PREVIEW_ENV_DEV_SA_KEY_PATH}"
34+
gcloud auth activate-service-account --key-file "${PREVIEW_ENV_DEV_SA_KEY_PATH}"
35+
36+
leeway run dev/preview/previewctl:install
37+
38+
previewctl get-credentials --gcp-service-account "${PREVIEW_ENV_DEV_SA_KEY_PATH}"
39+
previewctl list stale | jq --null-input --raw-input --compact-output '[inputs | select(length>0)]' > /tmp/stale-json
40+
echo "names=$(cat /tmp/stale-json)" >> $GITHUB_OUTPUT
41+
echo "count=$(jq '. | length' /tmp/stale-json)" >> $GITHUB_OUTPUT
42+
43+
delete:
44+
name: "Delete preview environment"
45+
needs: [stale]
46+
runs-on: [self-hosted]
47+
if: ${{ needs.stale.outputs.count > 0 }}
48+
strategy:
49+
matrix:
50+
name: ${{ fromJSON(needs.stale.outputs.names) }}
51+
steps:
52+
- uses: actions/checkout@v3
53+
- name: Delete preview environment ${{ matrix.name }}
54+
uses: ./.github/actions/delete-preview
55+
with:
56+
name: ${{ matrix.name }}
57+
sa_key: ${{ secrets.GCP_CREDENTIALS }}

dev/preview/previewctl/cmd/stale.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,19 @@ func newListStaleCmd(logger *logrus.Logger) *cobra.Command {
6767
}
6868

6969
func (o *listWorkspaceOpts) listWorskpaceStatus(ctx context.Context) ([]preview.Status, error) {
70+
o.logger.Debug("Getting recent branches")
7071
branches, err := preview.GetRecentBranches(time.Now().AddDate(0, 0, -30))
7172
if err != nil {
7273
return nil, err
7374
}
7475

76+
o.logger.Debug("Getting terraform workspaces")
7577
workspaces, err := o.getWorkspaces(ctx)
7678
if err != nil {
7779
return nil, err
7880
}
7981

82+
o.logger.Debug("Finding workspaces without associated branches")
8083
branchlessWorkspaces, err := getBranchlessWorkspaces(workspaces, branches)
8184
if err != nil {
8285
return nil, err

0 commit comments

Comments
 (0)