Skip to content
30 changes: 20 additions & 10 deletions routers/api/v1/repo/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -1132,18 +1132,23 @@ func GetWorkflowRun(ctx *context.APIContext) {
// "$ref": "#/responses/notFound"

runID := ctx.PathParamInt64("run")
job, _, err := db.GetByID[actions_model.ActionRun](ctx, runID)
job, has, err := db.GetByID[actions_model.ActionRun](ctx, runID)
if err != nil {
ctx.APIErrorInternal(err)
return
}

if err != nil || job.RepoID != ctx.Repo.Repository.ID {
ctx.APIError(http.StatusNotFound, util.ErrNotExist)
if !has || job.RepoID != ctx.Repo.Repository.ID {
ctx.APIErrorNotFound(util.ErrNotExist)
return
}

convertedArtifact, err := convert.ToActionWorkflowRun(ctx, ctx.Repo.Repository, job)
convertedRun, err := convert.ToActionWorkflowRun(ctx, ctx.Repo.Repository, job)
if err != nil {
ctx.APIErrorInternal(err)
return
}
ctx.JSON(http.StatusOK, convertedArtifact)
ctx.JSON(http.StatusOK, convertedRun)
}

// ListWorkflowRunJobs Lists all jobs for a workflow run.
Expand Down Expand Up @@ -1237,10 +1242,15 @@ func GetWorkflowJob(ctx *context.APIContext) {
// "$ref": "#/responses/notFound"

jobID := ctx.PathParamInt64("job_id")
job, _, err := db.GetByID[actions_model.ActionRunJob](ctx, jobID)
job, has, err := db.GetByID[actions_model.ActionRunJob](ctx, jobID)
if err != nil {
ctx.APIErrorInternal(err)
return
}

if err != nil || job.RepoID != ctx.Repo.Repository.ID {
ctx.APIError(http.StatusNotFound, util.ErrNotExist)
if !has || job.RepoID != ctx.Repo.Repository.ID {
ctx.APIErrorNotFound(util.ErrNotExist)
return
}

convertedWorkflowJob, err := convert.ToActionWorkflowJob(ctx, ctx.Repo.Repository, nil, job)
Expand All @@ -1251,7 +1261,7 @@ func GetWorkflowJob(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, convertedWorkflowJob)
}

// GetArtifacts Lists all artifacts for a repository.
// GetArtifactsOfRun Lists all artifacts for a repository.
func GetArtifactsOfRun(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/actions/runs/{run}/artifacts repository getArtifactsOfRun
// ---
Expand Down Expand Up @@ -1354,7 +1364,7 @@ func DeleteActionRun(ctx *context.APIContext) {
runID := ctx.PathParamInt64("run")
run, err := actions_model.GetRunByRepoAndID(ctx, ctx.Repo.Repository.ID, runID)
if errors.Is(err, util.ErrNotExist) {
ctx.APIError(http.StatusNotFound, err)
ctx.APIErrorNotFound(err)
return
} else if err != nil {
ctx.APIErrorInternal(err)
Expand Down
4 changes: 4 additions & 0 deletions tests/integration/api_actions_delete_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ func TestAPIActionsDeleteRun(t *testing.T) {
session := loginUser(t, user.Name)
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteRepository)

req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/repos/%s/actions/runs/802", repo.FullName())).
AddTokenAuth(token)
MakeRequest(t, req, http.StatusNotFound)

testAPIActionsDeleteRunListArtifacts(t, repo, token, 2)
testAPIActionsDeleteRunListTasks(t, repo, token, true)
testAPIActionsDeleteRun(t, repo, token, http.StatusNoContent)
Expand Down