go-gitea / gitea

Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD
https://gitea.com
MIT License
44.14k stars 5.42k forks source link

Webhook trigger for actions (CI) #23796

Open cthu1hoo opened 1 year ago

cthu1hoo commented 1 year ago

Feature Description

I'm missing a webhook trigger for CI builds, i.e. action started / action completed / action failed. It would be great if this was a thing.

I'm sorry if this was requested before. Thanks in advance.

Screenshots

No response

Makonike commented 1 year ago

Any plans to update?

lunny commented 1 year ago

Don't know whether Github has implemented this.

xgdgsc commented 1 year ago

Hope the action started / action completed / action failed webhook trigger can be set on a per-workflow basis.

lunny commented 11 months ago

ref: https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_run

maxstanley commented 10 months ago

Currently looking at implementing this feature. Hoping for some guidance on what should be returned as the webhook payload for a workflow_run inspired hook.

type HookWorkflowRunAction string

const (
    HookWorkflowRunRequested  HookWorkflowRunAction = "requested"
    HookWorkflowRunInProgress HookWorkflowRunAction = "in_progress"
    HookWorkflowRunCompleted  HookWorkflowRunAction = "completed"
)

type WorkflowRunPayload struct {
    Action     HookWorkflowRunAction `json:"action"`
    Repository *Repository           `json:"repository"`
    Sender     *User                 `json:"sender"`
    ActionRun  *ActionRun            `json:"action_run"`
    Artifacts  *[]Artifact           `json:"artifacts"`
}

type ActionRun struct {
    ID          int64        `json:"id"`
    Title       string       `json:"title"`
    TriggerUser *User        `json:"trigger_user"`
    WorkflowID  string       `json:"workflow_id"`
    Index       int64        `json:"index"`
    Ref         string       `json:"ref"`
    CommitSHA   string       `json:"commit_sha"`
        Branch      string       `json:"branch"`
    Status      string       `json:"status"`
    Version     int          `json:"version"`
    Started     string       `json:"time_started"`
    Stopped     string       `json:"time_stopped"`
    Created     string       `json:"time_created"`
    Updated     string       `json:"time_updated"`
}

type Artifact struct {
    ID    int64  `json:"id"`
    Name  string `json:"name"`
}

These structs should provide a starting point.

Should this webhook provide fully formed URLs to the hook for:

Thanks!

maxstanley commented 10 months ago

Have just found this #26673 which defines an ActionTask which is very similar to the structure as defined above.

The main omission from ActionTask is the time when the action stopped.

meruiden commented 1 month ago

Why did #28047 get closed ? @lunny ? any chance this still gets implemented? would be awesome.

for now a good workaround is a DIY web call with CURL using the if: always() rule:

  notify:
    runs-on: ubuntu-latest
    if: always()
    steps:
    - name: Notify
      run: echo "Run hooks here"

and then use the apis from #26673 on the receiving end

lunny commented 1 month ago

Why did #28047 get closed ? @lunny ? any chance this still gets implemented? would be awesome.

for now a good workaround is a DIY web call with CURL using the if: always() rule:

  notify:
    runs-on: ubuntu-latest
    if: always()
    steps:
    - name: Notify
      run: echo "Run hooks here"

and then use the apis from #26673 on the receiving end

I have no enough time to continue the work. Please pick up my code if somebody would like to continue.