mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-29 03:16:43 +08:00
`exec` forwarded the toolkit's ArtifactService calls to an instance it never registered, and its random runtime token held no backend IDs, so `actions/upload-artifact` and `actions/download-artifact` v4 and later failed. The local artifact server now serves the v4 API, including the single Put Blob uploads docker/build-push-action uses. `exec` gives each workflow its own unsigned JWT runtime token and artifact run, so artifact names conflict and carry over between runs as on GitHub. Artifacts default to a temporary directory instead of the workspace that jobs copy. Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-on: https://gitea.com/gitea/runner/pulls/1341 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com> Co-authored-by: bircni <bircni@icloud.com>
56 lines
1.8 KiB
Go
56 lines
1.8 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package artifacts
|
|
|
|
import "time"
|
|
|
|
const artifactServicePath = "/twirp/github.actions.results.api.v1.ArtifactService"
|
|
|
|
type ( // the ArtifactService messages in the protobuf JSON mapping, which writes int64 as strings
|
|
createArtifactResponse struct {
|
|
Ok bool `json:"ok"`
|
|
SignedUploadURL string `json:"signedUploadUrl"`
|
|
}
|
|
|
|
finalizeArtifactRequest struct {
|
|
WorkflowRunBackendID string
|
|
Name string
|
|
Size int64 `json:",string"`
|
|
Hash string
|
|
}
|
|
finalizeArtifactResponse struct {
|
|
Ok bool `json:"ok"`
|
|
ArtifactID int64 `json:"artifactId,string"`
|
|
}
|
|
|
|
listArtifactsRequest struct {
|
|
WorkflowRunBackendID string
|
|
NameFilter string
|
|
IDFilter int64 `json:",string"`
|
|
}
|
|
listArtifactsResponse struct {
|
|
Artifacts []monolithArtifact `json:"artifacts"`
|
|
}
|
|
monolithArtifact struct {
|
|
WorkflowRunBackendID string `json:"workflowRunBackendId"` // the toolkit sends it back to GetSignedArtifactURL
|
|
DatabaseID int64 `json:"databaseId,string"`
|
|
Name string `json:"name"`
|
|
Size int64 `json:"size,string"`
|
|
CreatedAt time.Time `json:"createdAt"` // whole seconds, the toolkit rejects the trimmed fractions json writes
|
|
Digest string `json:"digest"` // empty until the upload is finalized
|
|
}
|
|
|
|
getSignedArtifactURLRequest struct {
|
|
WorkflowRunBackendID string
|
|
Name string
|
|
}
|
|
getSignedArtifactURLResponse struct {
|
|
SignedURL string `json:"signedUrl"`
|
|
}
|
|
|
|
createArtifactRequest = getSignedArtifactURLRequest
|
|
deleteArtifactRequest = getSignedArtifactURLRequest
|
|
deleteArtifactResponse = finalizeArtifactResponse
|
|
)
|