Skip to content

Commit

Permalink
chore: cleanup test schemas periodically
Browse files Browse the repository at this point in the history
  • Loading branch information
atzoum committed Aug 26, 2024
1 parent c21af4a commit f9e9241
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/cleanup-test-schemas.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: cleanup test schemas
on:
workflow_dispatch:
schedule:
- cron: '15 3 * * 6'

permissions:
id-token: write # allows the JWT to be requested from GitHub's OIDC provider
contents: read # This is required for actions/checkout

jobs:
cleanup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
check-latest: true
- run: go version
- run: go mod download
- name: cleanup
env:
REDSHIFT_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.REDSHIFT_TEST_ENVIRONMENT_CREDENTIALS }}
REDSHIFT_DATA_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.REDSHIFT_DATA_TEST_ENVIRONMENT_CREDENTIALS }}
REDSHIFT_DATA_TEST_ENVIRONMENT_ROLE_ARN_CREDENTIALS: ${{ secrets.REDSHIFT_DATA_TEST_ENVIRONMENT_ROLE_ARN_CREDENTIALS }}
SNOWFLAKE_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.SNOWFLAKE_TEST_ENVIRONMENT_CREDENTIALS }}
BIGQUERY_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.BIGQUERY_TEST_ENVIRONMENT_CREDENTIALS }}
DATABRICKS_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.DATABRICKS_TEST_ENVIRONMENT_CREDENTIALS }}
TRINO_TEST_ENVIRONMENT_CREDENTIALS: ${{ secrets.TRINO_TEST_ENVIRONMENT_CREDENTIALS }}
SNOWFLAKE_TEST_AUTH_KEYPAIR_ENCRYPTED_CREDENTIALS: ${{ secrets.SNOWFLAKE_TEST_AUTH_KEYPAIR_ENCRYPTED_CREDENTIALS }}
SNOWFLAKE_TEST_AUTH_KEYPAIR_UNENCRYPTED_CREDENTIALS: ${{ secrets.SNOWFLAKE_TEST_AUTH_KEYPAIR_UNENCRYPTED_CREDENTIALS }}
run: |
go run sqlconnect/cmd/cleanup/cleanup.go
69 changes: 69 additions & 0 deletions sqlconnect/cmd/cleanup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package main

import (
"context"
"log"
"os"
"strings"

"github.com/tidwall/sjson"

"github.com/rudderlabs/sqlconnect-go/sqlconnect"
"github.com/rudderlabs/sqlconnect-go/sqlconnect/internal/bigquery"
"github.com/rudderlabs/sqlconnect-go/sqlconnect/internal/databricks"
"github.com/rudderlabs/sqlconnect-go/sqlconnect/internal/redshift"
"github.com/rudderlabs/sqlconnect-go/sqlconnect/internal/snowflake"
"github.com/rudderlabs/sqlconnect-go/sqlconnect/internal/trino"
)

func main() {
cleanupConfigs := []cleanupConfig{
{Env: "BIGQUERY_TEST_ENVIRONMENT_CREDENTIALS", Type: bigquery.DatabaseType},
{Env: "DATABRICKS_TEST_ENVIRONMENT_CREDENTIALS", Type: databricks.DatabaseType, Fn: func(s string) string {
s, _ = sjson.Set(s, "catalog", "hive_metastore")
return s
}},
{Env: "DATABRICKS_TEST_ENVIRONMENT_CREDENTIALS", Type: databricks.DatabaseType, Fn: func(s string) string {
s, _ = sjson.Set(s, "catalog", "sqlconnect")
return s
}},

Check warning on line 29 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L19-L29

Added lines #L19 - L29 were not covered by tests
{Env: "REDSHIFT_DATA_TEST_ENVIRONMENT_CREDENTIALS", Type: redshift.DatabaseType},
{Env: "REDSHIFT_TEST_ENVIRONMENT_CREDENTIALS", Type: redshift.DatabaseType},
{Env: "SNOWFLAKE_TEST_ENVIRONMENT_CREDENTIALS", Type: snowflake.DatabaseType},
{Env: "TRINO_TEST_ENVIRONMENT_CREDENTIALS", Type: trino.DatabaseType},
}

for _, c := range cleanupConfigs {
configJSON, ok := os.LookupEnv(c.Env)
if !ok {
log.Fatalf("%s environment variable not set", c.Env)

Check warning on line 39 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L36-L39

Added lines #L36 - L39 were not covered by tests
}
if c.Fn != nil {
configJSON = c.Fn(configJSON)

Check warning on line 42 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L41-L42

Added lines #L41 - L42 were not covered by tests
}
db, err := sqlconnect.NewDB(c.Type, []byte(configJSON))
if err != nil {
log.Fatalf("[%s] failed to create db: %v", c.Type, err)

Check warning on line 46 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L44-L46

Added lines #L44 - L46 were not covered by tests
}
schemas, err := db.ListSchemas(context.Background())
if err != nil {
log.Fatalf("[%s] failed to list schemas: %v", c.Type, err)

Check warning on line 50 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L48-L50

Added lines #L48 - L50 were not covered by tests
}
for _, schema := range schemas {
if strings.Contains(strings.ToLower(schema.Name), "tsqlcon_") {
err := db.DropSchema(context.Background(), schema)
if err != nil {
log.Printf("[%s] failed to drop schema: %v", c.Type, err)
} else {
log.Printf("[%s] dropped schema %s", c.Type, schema)

Check warning on line 58 in sqlconnect/cmd/cleanup.go

View check run for this annotation

Codecov / codecov/patch

sqlconnect/cmd/cleanup.go#L52-L58

Added lines #L52 - L58 were not covered by tests
}
}
}
}
}

type cleanupConfig struct {
Type string
Env string
Fn func(string) string
}

0 comments on commit f9e9241

Please sign in to comment.