diff options
author | ChristopherHX <christopher.homberger@web.de> | 2025-02-16 01:32:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-16 08:32:54 +0800 |
commit | 2b8cfb557d4b891bce8e67a3be280dc058c9791e (patch) | |
tree | 2dad4d6bac699fdc0a73101e5359e50d90c808a4 /services/convert | |
parent | 01bf8da02e6febd0784f676e949910d6c5233d0e (diff) | |
download | gitea-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/convert')
-rw-r--r-- | services/convert/convert.go | 22 |
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) |