-
Notifications
You must be signed in to change notification settings - Fork 32
feat(test reports): Object storage integration and test-report key #1294
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
190 commits
Select commit
Hold shift + click to select a range
a2042f3
ground work
8fb48dc
feat: add sender rule for pipelines (#1206)
ecrupper a3b1bff
chore(lint): add struct tag align rule (#1216)
ecrupper 2245376
chore(lint): address existing linter issues (#1218)
ecrupper 5a1f403
enhance(build)!: add fork field for OIDC (#1221)
ecrupper 9a5bf00
enhance(compiler): cache templates per compilation (#1224)
ecrupper 58718a1
ground work
8e9cd8e
working admin endpoints for bucket management
3239b53
working admin endpoints for object operations
8a95775
all endpoints for storage
a4f29d0
some working test
41df509
working tests
86d822d
keys for test report step
83afd15
feat: deployment config for expected params and targets (#1214)
ecrupper 8b5b79f
resolve conflicts with buildkite
9328ecd
feat: opt-in gh app integration (#1217)
plyr4 b16622f
chore(yaml): add go-yaml types package (#1225)
ecrupper 3156794
resolve conflicts
57f8f9a
rebase
09da5df
enhance(yaml): allow for users to set version legacy for buildkite (#…
ecrupper 114ae7b
refactor(db/build): drop source index, add event index (#1228)
wass3rw3rk fd16b7b
feat(repo)!: add pending approval timeout (#1227)
ecrupper 68547d6
enhance(yaml): silent fix anchor merges in YAML maps (#1231)
ecrupper c7c1d0a
fix(webhook): use correct repo variable for enqueue (#1234)
ecrupper f43e2d1
feat(pipeline)!: add warnings to pipelines that use legacy YAML lib o…
ecrupper f1a98ac
feat: status endpoints (#1235)
plyr4 bf2313d
enhance(deploy): validate on CreateDeployment (#1236)
ecrupper 9a532cf
enhance(metrics): include route specific queue length (#1237)
ecrupper 9f13f97
chore(deps): update codecov/codecov-action action to v5 (#1222)
renovate[bot] 3920eab
fix(deps): update module github.com/google/go-github/v65 to v68 (#1229)
renovate[bot] 084fea3
chore: bump go (#1238)
wass3rw3rk 52df828
fix(deployment): use Config instead of ConfigBackoff when fetching de…
ecrupper 4eee25d
fix(build): use item build host (#1241)
ecrupper df21b7a
fix(build): ensure count/pagination links account for filter/query pa…
wass3rw3rk d24fd37
fix(yaml): improved messaging (#1243)
wass3rw3rk a051afa
keys for test report step
5254aad
resolve conflicts with buildkite
a138127
Merge branch 'main' into feat_test_report
timhuynh94 14660f5
mod tidy
05a09bb
fields for buildkite and ymal
657fe54
updates to storage client
d190aaf
upload with content type and size
2dab20b
feat(testreports): add initial tables
KellyMerrick f7942af
working model
f61dd12
remove test-report types
446c021
remove test-report.go and build/storage.go
06a2a52
remove test-report step from compiler validate
e861dc9
remove test-report step from compiler yaml and buildkite
05f7df9
white line
6a8c948
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 638c15a
mod tidy
d87c9d2
fixing upload test
0825d49
fix setup test
6a7de50
clean up some endpoints
c6adfae
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 5d12205
rename to client
6b41dc0
Potential fix for code scanning alert no. 472: Uncontrolled data used…
timhuynh94 e6ce703
make clean
203e6b7
gci fix
7b8bec6
clean up
73f78a8
mod tidy
6b6f9fa
gci fix
b2b717a
typo
8b0af38
fixing swagger
8a4997f
remove unused endpoint
4055774
fix api spec
fcfda99
Merge branch 'main' of github.com:go-vela/server into feat_reports_db
KellyMerrick d8c3c41
add test for minio
fdcc0b2
updated test
135783e
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 889d1ff
fix gci and spec
c80a2bf
fix some test
73cb815
lint fix
47d8912
update gci to be what main has
2da23b6
golint ci fix
6e07e6c
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 feb3400
make clean
c34f5fd
fix(linter): migrate to v2 due to breaking changes
e2b95c9
fix linter
eb0ce66
meger new golangci yml
033cee7
remove comments
470a166
comments
bb78f51
presingurl will work on 9002
782109d
fix test
bd0665a
lint fix
ca76bd4
feat(test reports): adding test report functionality
KellyMerrick 9b5142b
copy / pasta
KellyMerrick 3381037
fix minio UI issues
ef27334
changes to nginx and local dev
f7fcd81
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 0860045
fix linter
b274ea0
add status forbidden if storage is disable
59c3a33
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 6b75406
fix linter
5d4954b
trying to make reviewdog happy
7e2aa0c
missing comment
7286b5c
make linter happy
fd358ff
Merge branch 'main' into feat_test_report_key
timhuynh94 4abd985
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 18d3e89
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 90487e6
Merge branch 'main' into feat_test_report_key
timhuynh94 22457cb
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 4aa63ca
Merge branch 'main' into feat_test_report_storage_addition
timhuynh94 676e374
Merge branch 'main' into feat_test_report_key
timhuynh94 971163d
fix conflicts
83f56c8
fix conflicts
efef696
Merge branch 'feat_test_report_key' into test_feat_test_report
16458a9
change comments
67436c6
Merge branch 'main' into test_feat_test_report
timhuynh94 8aeb275
Merge branch 'main' of github.com:go-vela/server into feat_reports_db
KellyMerrick 9ff8305
change comments
087b96b
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick b4048dc
Merge branch 'main' into feat_reports_db
KellyMerrick 164b9f8
Merge branch 'feat_reports_db' of github.com:go-vela/server into feat…
KellyMerrick 7b4a233
feat(test attachments): add presigned url to table
KellyMerrick aeb45f1
Merge branch 'main' into test_feat_test_report
KellyMerrick 26b0ad6
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick 068ba05
Merge branch 'feat_reports_db' of github.com:go-vela/server into test…
KellyMerrick 824539e
test report db functions - need tests
ddf34ea
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick 77eea35
fix resources test but list and update still fail
a3cf898
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick a5c547e
working update test and move test attachments out of testreport
907729d
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick 0aff96c
passing tests for all list functions
fe97fd3
add count_test
d9df473
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick bcc8ee5
test(test reports): adding tests for create and get
KellyMerrick 937a518
add all tests
584bfdf
Merge branch 'main' into test_feat_test_report
timhuynh94 7241bf2
Merge branch 'main' into test_feat_test_report
timhuynh94 fc0c3f7
test(test attachments): adding tests for create, fix naming collisions
KellyMerrick 6b26e49
feat(test attachments): adding functions and tests for get, update, d…
KellyMerrick b271c3d
refactor(test attachments): linter fixes for test reports and attachm…
KellyMerrick 59410d6
test(test attachments): adding count and list, and their tests
KellyMerrick 70a427f
refactor(reports): consistent naming of test reports and test attachm…
KellyMerrick 0e25f56
Merge branch 'main' into test_feat_test_report
KellyMerrick a696f0e
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick 11610a7
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick 94591fd
merge main, fix conflicts
KellyMerrick 8297a79
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick 859b2ec
Merge branch 'main' into test_feat_test_report
timhuynh94 8ac045b
feat(test attachments): list build objects
KellyMerrick 1fce84e
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick bbceec2
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick 997500e
feat(test reports and attachments): add create endpoints
KellyMerrick fb28884
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick d6d64c2
feat(test reports): ability to create record in db
KellyMerrick 0e0637e
Merge branch 'main' of github.com:go-vela/server into test_feat_test_…
KellyMerrick 4891071
fix(test reports): we don't need a body
KellyMerrick ea9533c
add mock for testreport
40f9f09
Merge branch 'main' into test_feat_test_report
timhuynh94 67dde86
feat(test attachments): ability to create record in db
KellyMerrick 928bc8c
Merge branch 'test_feat_test_report' of github.com:go-vela/server int…
KellyMerrick 5b48bde
add filetype constants
a488259
feat(test attachments): post to put, and now update
KellyMerrick de62cdc
modified comments
092be1b
add flags_test for storage
5d32af0
fix setup and test
31fb17f
fix storage test
a48f80c
fixing test
ba647b1
Merge branch 'main' into test_feat_test_report
timhuynh94 4c7fee2
fix liniting
1839bc4
fix test
030e915
golanci run fix
68d866f
fix liniting
eea6f8a
add and fix tests
4975ca8
golanci run fix
a9dc2bb
Merge branch 'main' into test_feat_test_report
timhuynh94 23f3576
add feature flag for storage
75345c5
refactor
3790af6
refactor
8c88556
fixed conflicts
8a4c26d
Merge branch 'main' into test_feat_test_report
timhuynh94 4bbdce1
fix linters
fad495a
fix linters
13ade3f
cleanup 1st round
d996763
revert scm to source
39c4a61
fix typos
082ceef
cleanup 2nd round
1f77845
fix gci
d7455d7
Merge branch 'main' into test_feat_test_report
timhuynh94 833a64d
Merge branch 'main' into test_feat_test_report
wass3rw3rk 98cf9a5
feat(test attachments): list test attachments for a build
KellyMerrick 9a5585f
feat(test attachments): address linter and fix test
KellyMerrick 83531d9
feat(test attachments): fix swagger
KellyMerrick 9d7aa03
rename to artifacts and paths
4ef9d0d
rename to artifacts and paths
d677bde
feat(artifacts): remove reports layer and chg test attachments to art…
KellyMerrick c758c09
feat(artifacts): fix conflicts
KellyMerrick File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,162 @@ | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| package admin | ||
|
|
||
| import ( | ||
| "fmt" | ||
| "net/http" | ||
|
|
||
| "github.com/gin-gonic/gin" | ||
| "github.com/sirupsen/logrus" | ||
|
|
||
| "github.com/go-vela/server/api/types" | ||
| "github.com/go-vela/server/storage" | ||
| "github.com/go-vela/server/util" | ||
| ) | ||
|
|
||
| // swagger:operation POST /api/v1/admin/storage/bucket admin CreateBucket | ||
| // | ||
| // Create a new bucket | ||
| // | ||
| // --- | ||
| // produces: | ||
| // - application/json | ||
| // parameters: | ||
| // - in: body | ||
| // name: body | ||
| // description: The bucket name to be created | ||
| // required: true | ||
| // schema: | ||
| // type: object | ||
| // properties: | ||
| // bucketName: | ||
| // type: string | ||
| // security: | ||
| // - ApiKeyAuth: [] | ||
| // responses: | ||
| // '201': | ||
| // description: Successfully created the bucket | ||
| // '400': | ||
| // description: Invalid request payload | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
| // '500': | ||
| // description: Unexpected server error | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
|
|
||
| // CreateBucket represents the API handler to create a new bucket. | ||
| func CreateBucket(c *gin.Context) { | ||
| enable := c.MustGet("storage-enable").(bool) | ||
| if !enable { | ||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| l.Info("storage is not enabled, skipping credentials request") | ||
| c.JSON(http.StatusForbidden, gin.H{"error": "storage is not enabled"}) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| ctx := c.Request.Context() | ||
|
|
||
| l.Debug("platform admin: creating bucket") | ||
|
|
||
| // capture body from API request | ||
| input := new(types.Bucket) | ||
|
|
||
| err := c.Bind(input) | ||
| if err != nil { | ||
| retErr := fmt.Errorf("unable to decode JSON for bucket %s: %w", input.BucketName, err) | ||
|
|
||
| util.HandleError(c, http.StatusBadRequest, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| l.Debugf("bucket name: %s", input.BucketName) | ||
|
|
||
| err = storage.FromGinContext(c).CreateBucket(ctx, input) | ||
| if err != nil { | ||
| retErr := fmt.Errorf("unable to create bucket: %w", err) | ||
| util.HandleError(c, http.StatusInternalServerError, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| c.Status(http.StatusCreated) | ||
| } | ||
|
|
||
| // swagger:operation GET /api/v1/admin/storage/presign admin GetPresignedURL | ||
| // | ||
| // # Generate a presigned URL for an object | ||
| // | ||
| // --- | ||
| // produces: | ||
| // - application/json | ||
| // parameters: | ||
| // - in: query | ||
| // name: bucketName | ||
| // description: The name of the bucket | ||
| // required: true | ||
| // type: string | ||
| // - in: query | ||
| // name: objectName | ||
| // description: The name of the object | ||
| // required: true | ||
| // type: string | ||
| // security: | ||
| // - ApiKeyAuth: [] | ||
| // responses: | ||
| // '200': | ||
| // description: Successfully generated the presigned URL | ||
| // '400': | ||
| // description: Invalid request payload | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
| // '500': | ||
| // description: Unexpected server error | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
|
|
||
| // GetPresignedURL represents the API handler to generate a presigned URL for an object. | ||
| func GetPresignedURL(c *gin.Context) { | ||
| enable := c.MustGet("storage-enable").(bool) | ||
| if !enable { | ||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| l.Info("storage is not enabled, skipping credentials request") | ||
| c.JSON(http.StatusForbidden, gin.H{"error": "storage is not enabled"}) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| ctx := c.Request.Context() | ||
|
|
||
| l.Debug("platform admin: generating presigned URL") | ||
|
|
||
| // capture query parameters from API request | ||
| bucketName := c.Query("bucketName") | ||
| objectName := c.Query("objectName") | ||
|
|
||
| if bucketName == "" || objectName == "" { | ||
| retErr := fmt.Errorf("bucketName and objectName are required") | ||
| util.HandleError(c, http.StatusBadRequest, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| input := &types.Object{ | ||
| Bucket: types.Bucket{BucketName: bucketName}, | ||
| ObjectName: objectName, | ||
| } | ||
|
|
||
| url, err := storage.FromGinContext(c).PresignedGetObject(ctx, input) | ||
| if err != nil || url == "" { | ||
| retErr := fmt.Errorf("unable to generate presigned URL: %w", err) | ||
| util.HandleError(c, http.StatusBadRequest, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| c.JSON(http.StatusOK, url) | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| package artifact | ||
|
|
||
| import ( | ||
| "fmt" | ||
| "net/http" | ||
| "time" | ||
|
|
||
| "github.com/gin-gonic/gin" | ||
| "github.com/sirupsen/logrus" | ||
|
|
||
| "github.com/go-vela/server/api/types" | ||
| "github.com/go-vela/server/database" | ||
| "github.com/go-vela/server/util" | ||
| ) | ||
|
|
||
| func CreateArtifact(c *gin.Context) { | ||
| // capture middleware values | ||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| ctx := c.Request.Context() | ||
|
|
||
| // capture the artifact from the request body | ||
| input := new(types.Artifact) | ||
|
|
||
| err := c.Bind(input) | ||
| if err != nil { | ||
| retErr := fmt.Errorf("unable to decode JSON for new Artifact: %w", err) | ||
|
|
||
| util.HandleError(c, http.StatusBadRequest, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| // ensure build_id is defined | ||
| if input.GetBuildID() <= 0 { | ||
| util.HandleError(c, http.StatusBadRequest, fmt.Errorf("build_id must set and greater than 0")) | ||
| return | ||
| } | ||
|
|
||
| input.SetCreatedAt(time.Now().UTC().Unix()) | ||
|
|
||
| l.Debugf("creating new artifact") | ||
| // create the artifact in the database using the input from request | ||
| a, err := database.FromContext(c).CreateArtifact(ctx, input) | ||
| if err != nil { | ||
| retErr := fmt.Errorf("unable to create new artifact: %w", err) | ||
|
|
||
| util.HandleError(c, http.StatusInternalServerError, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| c.JSON(http.StatusCreated, a) | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| package artifact | ||
|
|
||
| import ( | ||
| "net/http" | ||
|
|
||
| "github.com/gin-gonic/gin" | ||
| "github.com/sirupsen/logrus" | ||
|
|
||
| artifact "github.com/go-vela/server/router/middleware/artifact" | ||
| "github.com/go-vela/server/router/middleware/build" | ||
| ) | ||
|
|
||
| // swagger:operation GET /api/v1/repos/{org}/{repo}/builds/{build}/artifact/{artifact} artifacts GetArtifact | ||
| // | ||
| // Get an artifact | ||
| // | ||
| // --- | ||
| // produces: | ||
| // - application/json | ||
| // parameters: | ||
| // - in: path | ||
| // name: org | ||
| // description: Name of the organization | ||
| // required: true | ||
| // type: string | ||
| // - in: path | ||
| // name: repo | ||
| // description: Name of the repository | ||
| // required: true | ||
| // type: string | ||
| // - in: path | ||
| // name: build | ||
| // description: Build number | ||
| // required: true | ||
| // type: integer | ||
| // - in: path | ||
| // name: artifact | ||
| // description: artifact ID | ||
| // required: true | ||
| // type: integer | ||
| // security: | ||
| // - ApiKeyAuth: [] | ||
| // responses: | ||
| // '200': | ||
| // description: Successfully retrieved the artifact | ||
| // type: json | ||
| // schema: | ||
| // "$ref": "#/definitions/Artifact" | ||
| // '400': | ||
| // description: Invalid request payload or path | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
| // '401': | ||
| // description: Unauthorized | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
| // '404': | ||
| // description: Not found | ||
| // schema: | ||
| // "$ref": "#/definitions/Error" | ||
|
|
||
| // GetArtifact represents the API handler to get | ||
| // an artifact for a build. | ||
| func GetArtifact(c *gin.Context) { | ||
| // capture middleware values | ||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| b := build.Retrieve(c) | ||
| a := artifact.Retrieve(c) | ||
|
|
||
| l.Debugf("getting artifact %d for build %d", a.GetID(), b.GetNumber()) | ||
|
|
||
| // return the artifact with presigned URL | ||
| response := gin.H{ | ||
| "id": a.GetID(), | ||
| "build_id": a.GetBuildID(), | ||
| "file_name": a.GetFileName(), | ||
| "file_type": a.GetFileType(), | ||
| "file_size": a.GetFileSize(), | ||
| "object_path": a.GetObjectPath(), | ||
| "presigned_url": a.GetPresignedURL(), | ||
| "created_at": a.GetCreatedAt(), | ||
| } | ||
|
|
||
| c.JSON(http.StatusOK, response) | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| package artifact | ||
|
|
||
| import ( | ||
| "fmt" | ||
| "net/http" | ||
|
|
||
| "github.com/gin-gonic/gin" | ||
| "github.com/sirupsen/logrus" | ||
|
|
||
| "github.com/go-vela/server/database" | ||
| "github.com/go-vela/server/router/middleware/build" | ||
| "github.com/go-vela/server/util" | ||
| ) | ||
|
|
||
| func ListArtifactsForBuild(c *gin.Context) { | ||
| // capture middleware values | ||
| l := c.MustGet("logger").(*logrus.Entry) | ||
| ctx := c.Request.Context() | ||
| b := build.Retrieve(c) | ||
|
|
||
| l.Debugf("listing artifacts for build %d", b.GetNumber()) | ||
|
|
||
| // retrieve artifacts from the database | ||
| artifacts, err := database.FromContext(c).ListArtifactsByBuildID(ctx, b.GetID()) | ||
| if err != nil { | ||
| retErr := fmt.Errorf("unable to list artifacts for build %d: %w", b.GetNumber(), err) | ||
|
|
||
| util.HandleError(c, http.StatusInternalServerError, retErr) | ||
|
|
||
| return | ||
| } | ||
|
|
||
| c.JSON(http.StatusOK, artifacts) | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| // Package storage provides the storage handlers for the Vela API. | ||
| // | ||
| // Usage: | ||
| // | ||
| // import "github.com/go-vela/server/api/storage" | ||
| package storage |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.