From 5a2726ac78f31370ae893bcebad558122cae4105 Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:40:21 -0600 Subject: [PATCH 1/6] fix token prefix tests Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- internal/graphapi/apitoken_test.go | 2 +- internal/graphapi/personalaccesstoken_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/graphapi/apitoken_test.go b/internal/graphapi/apitoken_test.go index f196e4ac..548c7982 100644 --- a/internal/graphapi/apitoken_test.go +++ b/internal/graphapi/apitoken_test.go @@ -207,7 +207,7 @@ func (suite *GraphTestSuite) TestMutationCreateAPIToken() { assert.NotEqual(t, redacted, resp.CreateAPIToken.APIToken.Token) // ensure the token is prefixed - assert.Contains(t, resp.CreateAPIToken.APIToken.Token, "dtma_") + assert.Contains(t, resp.CreateAPIToken.APIToken.Token, "tola_") }) } } diff --git a/internal/graphapi/personalaccesstoken_test.go b/internal/graphapi/personalaccesstoken_test.go index c83cc2cb..1438fc50 100644 --- a/internal/graphapi/personalaccesstoken_test.go +++ b/internal/graphapi/personalaccesstoken_test.go @@ -235,7 +235,7 @@ func (suite *GraphTestSuite) TestMutationCreatePersonalAccessToken() { assert.NotEqual(t, redacted, resp.CreatePersonalAccessToken.PersonalAccessToken.Token) // ensure the token is prefixed - assert.Contains(t, resp.CreatePersonalAccessToken.PersonalAccessToken.Token, "dtmp_") + assert.Contains(t, resp.CreatePersonalAccessToken.PersonalAccessToken.Token, "tolp_") }) } } From ccb979572c43e9a87c0f82d2ee8b3c5885b0e652 Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:57:16 -0600 Subject: [PATCH 2/6] fix annotation, rerun generate for edge cleanup Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- internal/ent/generated/edge_cleanup.go | 222 +++++++++++++++++++++++ internal/ent/templates/edge_cleanup.tmpl | 4 +- 2 files changed, 224 insertions(+), 2 deletions(-) diff --git a/internal/ent/generated/edge_cleanup.go b/internal/ent/generated/edge_cleanup.go index 0b835a29..c787c3be 100644 --- a/internal/ent/generated/edge_cleanup.go +++ b/internal/ent/generated/edge_cleanup.go @@ -6,6 +6,32 @@ import ( "context" "entgo.io/ent/privacy" + "github.com/theopenlane/core/internal/ent/generated/contact" + "github.com/theopenlane/core/internal/ent/generated/documentdata" + "github.com/theopenlane/core/internal/ent/generated/emailverificationtoken" + "github.com/theopenlane/core/internal/ent/generated/entitlement" + "github.com/theopenlane/core/internal/ent/generated/entitlementplan" + "github.com/theopenlane/core/internal/ent/generated/entitlementplanfeature" + "github.com/theopenlane/core/internal/ent/generated/entity" + "github.com/theopenlane/core/internal/ent/generated/entitytype" + "github.com/theopenlane/core/internal/ent/generated/group" + "github.com/theopenlane/core/internal/ent/generated/groupmembership" + "github.com/theopenlane/core/internal/ent/generated/groupsetting" + "github.com/theopenlane/core/internal/ent/generated/integration" + "github.com/theopenlane/core/internal/ent/generated/invite" + "github.com/theopenlane/core/internal/ent/generated/note" + "github.com/theopenlane/core/internal/ent/generated/organization" + "github.com/theopenlane/core/internal/ent/generated/organizationsetting" + "github.com/theopenlane/core/internal/ent/generated/orgmembership" + "github.com/theopenlane/core/internal/ent/generated/passwordresettoken" + "github.com/theopenlane/core/internal/ent/generated/personalaccesstoken" + "github.com/theopenlane/core/internal/ent/generated/subscriber" + "github.com/theopenlane/core/internal/ent/generated/template" + "github.com/theopenlane/core/internal/ent/generated/tfasetting" + "github.com/theopenlane/core/internal/ent/generated/user" + "github.com/theopenlane/core/internal/ent/generated/usersetting" + "github.com/theopenlane/core/internal/ent/generated/webauthn" + "github.com/theopenlane/core/internal/ent/generated/webhook" ) func APITokenEdgeCleanup(ctx context.Context, id string) error { @@ -166,6 +192,20 @@ func GroupEdgeCleanup(ctx context.Context, id string) error { // If a user has access to delete the object, they have access to delete all edges ctx = privacy.DecisionContext(ctx, privacy.Allowf("cleanup group edge")) + if exists, err := FromContext(ctx).GroupSetting.Query().Where((groupsetting.HasGroupWith(group.ID(id)))).Exist(ctx); err == nil && exists { + if groupsettingCount, err := FromContext(ctx).GroupSetting.Delete().Where(groupsetting.HasGroupWith(group.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting groupsetting", "count", groupsettingCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).GroupMembership.Query().Where((groupmembership.HasGroupWith(group.ID(id)))).Exist(ctx); err == nil && exists { + if groupmembershipCount, err := FromContext(ctx).GroupMembership.Delete().Where(groupmembership.HasGroupWith(group.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting groupmembership", "count", groupmembershipCount, "err", err) + return err + } + } + return nil } @@ -292,6 +332,125 @@ func OrganizationEdgeCleanup(ctx context.Context, id string) error { // If a user has access to delete the object, they have access to delete all edges ctx = privacy.DecisionContext(ctx, privacy.Allowf("cleanup organization edge")) + if exists, err := FromContext(ctx).Organization.Query().Where(organization.HasParentWith(organization.ID(id))).Exist(ctx); err == nil && exists { + if organizationCount, err := FromContext(ctx).Organization.Delete().Where(organization.HasParentWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting child organization", "count", organizationCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Group.Query().Where((group.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if groupCount, err := FromContext(ctx).Group.Delete().Where(group.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting group", "count", groupCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Template.Query().Where((template.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if templateCount, err := FromContext(ctx).Template.Delete().Where(template.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting template", "count", templateCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Integration.Query().Where((integration.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if integrationCount, err := FromContext(ctx).Integration.Delete().Where(integration.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting integration", "count", integrationCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).OrganizationSetting.Query().Where((organizationsetting.HasOrganizationWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if organizationsettingCount, err := FromContext(ctx).OrganizationSetting.Delete().Where(organizationsetting.HasOrganizationWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting organizationsetting", "count", organizationsettingCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).DocumentData.Query().Where((documentdata.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if documentdataCount, err := FromContext(ctx).DocumentData.Delete().Where(documentdata.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting documentdata", "count", documentdataCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Entitlement.Query().Where((entitlement.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if entitlementCount, err := FromContext(ctx).Entitlement.Delete().Where(entitlement.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting entitlement", "count", entitlementCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Invite.Query().Where((invite.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if inviteCount, err := FromContext(ctx).Invite.Delete().Where(invite.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting invite", "count", inviteCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Subscriber.Query().Where((subscriber.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if subscriberCount, err := FromContext(ctx).Subscriber.Delete().Where(subscriber.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting subscriber", "count", subscriberCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Webhook.Query().Where((webhook.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if webhookCount, err := FromContext(ctx).Webhook.Delete().Where(webhook.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting webhook", "count", webhookCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).EntitlementPlan.Query().Where((entitlementplan.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if entitlementplanCount, err := FromContext(ctx).EntitlementPlan.Delete().Where(entitlementplan.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting entitlementplan", "count", entitlementplanCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).EntitlementPlanFeature.Query().Where((entitlementplanfeature.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if entitlementplanfeatureCount, err := FromContext(ctx).EntitlementPlanFeature.Delete().Where(entitlementplanfeature.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting entitlementplanfeature", "count", entitlementplanfeatureCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Entity.Query().Where((entity.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if entityCount, err := FromContext(ctx).Entity.Delete().Where(entity.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting entity", "count", entityCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).EntityType.Query().Where((entitytype.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if entitytypeCount, err := FromContext(ctx).EntityType.Delete().Where(entitytype.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting entitytype", "count", entitytypeCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Contact.Query().Where((contact.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if contactCount, err := FromContext(ctx).Contact.Delete().Where(contact.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting contact", "count", contactCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Note.Query().Where((note.HasOwnerWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if noteCount, err := FromContext(ctx).Note.Delete().Where(note.HasOwnerWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting note", "count", noteCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).OrgMembership.Query().Where((orgmembership.HasOrganizationWith(organization.ID(id)))).Exist(ctx); err == nil && exists { + if orgmembershipCount, err := FromContext(ctx).OrgMembership.Delete().Where(orgmembership.HasOrganizationWith(organization.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting orgmembership", "count", orgmembershipCount, "err", err) + return err + } + } + return nil } @@ -348,6 +507,13 @@ func TemplateEdgeCleanup(ctx context.Context, id string) error { // If a user has access to delete the object, they have access to delete all edges ctx = privacy.DecisionContext(ctx, privacy.Allowf("cleanup template edge")) + if exists, err := FromContext(ctx).DocumentData.Query().Where((documentdata.HasTemplateWith(template.ID(id)))).Exist(ctx); err == nil && exists { + if documentdataCount, err := FromContext(ctx).DocumentData.Delete().Where(documentdata.HasTemplateWith(template.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting documentdata", "count", documentdataCount, "err", err) + return err + } + } + return nil } @@ -362,6 +528,62 @@ func UserEdgeCleanup(ctx context.Context, id string) error { // If a user has access to delete the object, they have access to delete all edges ctx = privacy.DecisionContext(ctx, privacy.Allowf("cleanup user edge")) + if exists, err := FromContext(ctx).PersonalAccessToken.Query().Where((personalaccesstoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if personalaccesstokenCount, err := FromContext(ctx).PersonalAccessToken.Delete().Where(personalaccesstoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting personalaccesstoken", "count", personalaccesstokenCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).TFASetting.Query().Where((tfasetting.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if tfasettingCount, err := FromContext(ctx).TFASetting.Delete().Where(tfasetting.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting tfasetting", "count", tfasettingCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).UserSetting.Query().Where((usersetting.HasUserWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if usersettingCount, err := FromContext(ctx).UserSetting.Delete().Where(usersetting.HasUserWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting usersetting", "count", usersettingCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).EmailVerificationToken.Query().Where((emailverificationtoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if emailverificationtokenCount, err := FromContext(ctx).EmailVerificationToken.Delete().Where(emailverificationtoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting emailverificationtoken", "count", emailverificationtokenCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).PasswordResetToken.Query().Where((passwordresettoken.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if passwordresettokenCount, err := FromContext(ctx).PasswordResetToken.Delete().Where(passwordresettoken.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting passwordresettoken", "count", passwordresettokenCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).Webauthn.Query().Where((webauthn.HasOwnerWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if webauthnCount, err := FromContext(ctx).Webauthn.Delete().Where(webauthn.HasOwnerWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting webauthn", "count", webauthnCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).OrgMembership.Query().Where((orgmembership.HasUserWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if orgmembershipCount, err := FromContext(ctx).OrgMembership.Delete().Where(orgmembership.HasUserWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting orgmembership", "count", orgmembershipCount, "err", err) + return err + } + } + + if exists, err := FromContext(ctx).GroupMembership.Query().Where((groupmembership.HasUserWith(user.ID(id)))).Exist(ctx); err == nil && exists { + if groupmembershipCount, err := FromContext(ctx).GroupMembership.Delete().Where(groupmembership.HasUserWith(user.ID(id))).Exec(ctx); err != nil { + FromContext(ctx).Logger.Debugw("deleting groupmembership", "count", groupmembershipCount, "err", err) + return err + } + } + return nil } diff --git a/internal/ent/templates/edge_cleanup.tmpl b/internal/ent/templates/edge_cleanup.tmpl index 2cb9cce3..ea1a9d9f 100644 --- a/internal/ent/templates/edge_cleanup.tmpl +++ b/internal/ent/templates/edge_cleanup.tmpl @@ -17,7 +17,7 @@ {{/* For each edge */}} {{- range $edge := $node.Edges }} {{/* if the edge has our custom annotation applied */}} - {{- if $annotation := $edge.Annotations.ENT_CASCADE }} + {{- if $annotation := $edge.Annotations.OPENLANE_CASCADE }} {{/* use the client to delete records where the edge schema has a field (provided by the annotation) containing the ID provided by the func */}} {{/* special case for child fields */}} {{- if eq $annotation.Field "Child" }} @@ -37,7 +37,7 @@ {{ end }} {{ end }} {{- end }} - {{- if $annotation := $node.Annotations.ENT_CASCADE_THROUGH }} + {{- if $annotation := $node.Annotations.OPENLANE_CASCADE_THROUGH }} {{- range $schema := $annotation.Schemas }} {{- $field := $schema.Through }} {{/* use the client to delete records where the edge has a field and a through schema (provided by the annotation) containing the ID provided by the func */}} From 7a49c79bb4e1cea6087208cd08810ff18a8096a9 Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:59:42 -0600 Subject: [PATCH 3/6] fix plugin versions Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- .buildkite/pipeline.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index 2b50ad0b..f842c6aa 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -156,7 +156,7 @@ steps: - label: ":postgres: atlas lint" key: "atlas_lint" plugins: - - theopenlane/atlas#v0.0.3: + - theopenlane/atlas#v1.0.0: project: core dev-url: "docker://postgres/16/dev?search_path=public" dir: "file://db/migrations" @@ -165,7 +165,7 @@ steps: if: build.branch == "main" key: "atlas_migrate" plugins: - - theopenlane/atlas#v0.0.3: + - theopenlane/atlas#v1.0.0: project: core dev-url: "docker://postgres/16/dev?search_path=public" dir: "file://db/migrations" @@ -187,7 +187,7 @@ steps: - "${IMAGE_REPO}" extra_tags: - "${IMAGE_TAG}" - - theopenlane/container-build#v1.1.0: + - theopenlane/container-build#v1.0.0: dockerfile: docker/Dockerfile push: false build-args: @@ -214,7 +214,7 @@ steps: - "${IMAGE_REPO}" extra_tags: - "${IMAGE_TAG}" - - theopenlane/container-build#v1.1.0: + - theopenlane/container-build#v1.0.0: dockerfile: docker/Dockerfile push: true build-args: @@ -241,7 +241,7 @@ steps: - "${GCR_REPO}" extra_tags: - "${IMAGE_TAG}" - - theopenlane/container-build#v1.1.0: + - theopenlane/container-build#v1.0.0: dockerfile: docker/all-in-one/Dockerfile.all-in-one push: true build-args: @@ -267,7 +267,7 @@ steps: - "${IMAGE_REPO}" extra_tags: - "${BUILDKITE_TAG}" - - theopenlane/container-build#v1.1.0: + - theopenlane/container-build#v1.0.0: dockerfile: docker/Dockerfile push: true build-args: @@ -294,7 +294,7 @@ steps: - "${GCR_REPO}" extra_tags: - "${BUILDKITE_TAG}" - - theopenlane/container-build#v1.1.0: + - theopenlane/container-build#v1.0.0: dockerfile: docker/all-in-one/Dockerfile.all-in-one push: true build-args: From 5024e854962f36d2bf12171f99cda0ea06219dd9 Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 22:03:35 -0600 Subject: [PATCH 4/6] dockerfile go1.23.0 Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ef06efc7..993ce4f6 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22.6 AS builder +FROM golang:1.23.0 AS builder WORKDIR /go/src/app COPY . . From c539b2d08dfecd28e9419e1dd8ee0fc554ea6841 Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 22:08:11 -0600 Subject: [PATCH 5/6] lint image Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- .buildkite/pipeline.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index f842c6aa..bf726bb0 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -34,7 +34,7 @@ steps: key: "lint" plugins: - docker#v5.11.0: - image: "registry.hub.docker.com/golangci/golangci-lint:v1.59.1" + image: "golangci/golangci-lint:latest-alpine" command: ["golangci-lint", "run", "-v", "--timeout", "10m", "--config", ".golangci.yaml", "--concurrency", "0"] environment: - "GOTOOLCHAIN=auto" From 7b10517a48002ddea4dc7e34133c3b3e1390494f Mon Sep 17 00:00:00 2001 From: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> Date: Tue, 27 Aug 2024 22:09:03 -0600 Subject: [PATCH 6/6] always_pull Signed-off-by: Sarah Funkhouser <147884153+golanglemonade@users.noreply.github.com> --- .buildkite/pipeline.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index bf726bb0..d5ac4e5b 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -36,6 +36,7 @@ steps: - docker#v5.11.0: image: "golangci/golangci-lint:latest-alpine" command: ["golangci-lint", "run", "-v", "--timeout", "10m", "--config", ".golangci.yaml", "--concurrency", "0"] + always_pull: true environment: - "GOTOOLCHAIN=auto" - label: ":golang: go test - libsql"