aboutsummaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorChristopherHX <christopher.homberger@web.de>2025-02-16 01:32:54 +0100
committerGitHub <noreply@github.com>2025-02-16 08:32:54 +0800
commit2b8cfb557d4b891bce8e67a3be280dc058c9791e (patch)
tree2dad4d6bac699fdc0a73101e5359e50d90c808a4 /services
parent01bf8da02e6febd0784f676e949910d6c5233d0e (diff)
downloadgitea-2b8cfb557d4b891bce8e67a3be280dc058c9791e.tar.gz
gitea-2b8cfb557d4b891bce8e67a3be280dc058c9791e.zip
Artifacts download api for artifact actions v4 (#33510)
* download endpoint has to use 302 redirect * fake blob download used if direct download not possible * downloading v3 artifacts not possible New repo apis based on GitHub Rest V3 - GET /runs/{run}/artifacts (Cannot use run index of url due to not being unique) - GET /artifacts - GET + DELETE /artifacts/{artifact_id} - GET /artifacts/{artifact_id}/zip - (GET /artifacts/{artifact_id}/zip/raw this is a workaround for a http 302 assertion in actions/toolkit) - api docs removed this is protected by a signed url like the internal artifacts api and no longer usable with any token or swagger - returns http 401 if the signature is invalid - or change the artifact id - or expired after 1 hour Closes #33353 Closes #32124 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'services')
-rw-r--r--services/convert/convert.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/services/convert/convert.go b/services/convert/convert.go
index c8cad2a2ad..fb276499d4 100644
--- a/services/convert/convert.go
+++ b/services/convert/convert.go
@@ -229,6 +229,28 @@ func ToActionTask(ctx context.Context, t *actions_model.ActionTask) (*api.Action
}, nil
}
+// ToActionArtifact convert a actions_model.ActionArtifact to an api.ActionArtifact
+func ToActionArtifact(repo *repo_model.Repository, art *actions_model.ActionArtifact) (*api.ActionArtifact, error) {
+ url := fmt.Sprintf("%s/actions/artifacts/%d", repo.APIURL(), art.ID)
+
+ return &api.ActionArtifact{
+ ID: art.ID,
+ Name: art.ArtifactName,
+ SizeInBytes: art.FileSize,
+ Expired: art.Status == actions_model.ArtifactStatusExpired,
+ URL: url,
+ ArchiveDownloadURL: url + "/zip",
+ CreatedAt: art.CreatedUnix.AsLocalTime(),
+ UpdatedAt: art.UpdatedUnix.AsLocalTime(),
+ ExpiresAt: art.ExpiredUnix.AsLocalTime(),
+ WorkflowRun: &api.ActionWorkflowRun{
+ ID: art.RunID,
+ RepositoryID: art.RepoID,
+ HeadSha: art.CommitSHA,
+ },
+ }, nil
+}
+
// ToVerification convert a git.Commit.Signature to an api.PayloadCommitVerification
func ToVerification(ctx context.Context, c *git.Commit) *api.PayloadCommitVerification {
verif := asymkey_model.ParseCommitWithSignature(ctx, c)