Skip to content
Snippets Groups Projects
Unverified Commit 9779ea2d authored by Timo Furrer's avatar Timo Furrer
Browse files

Implement autoflow CLI to run Flow script locally

Example Flow script:

    def check_status(resp, expected_status_code = 200):
        if resp.status_code != expected_status_code:
            fail("Unexpected HTTP status code", resp.status_code)

    def check_content_type(resp, expected_content_type = "application/json"):
        ct = resp.header.get("Content-Type", [])
        if len(ct) == 0 or not ct[0].startswith(expected_content_type):
            fail("Unexpected Content-Type", ct)

    def handle_issue_updated(w, ev):
        print("running handle_issue_updated event handler")
        project_id = ev["data"]["project_id"]
        issue_id = ev["data"]["issue_id"]

        issues_resource_url = "{}/api/v4/projects/{}/issues/{}".format(w.vars.gitlab_url, project_id, issue_id)

        resp = w.http.do(
          method = "GET",
          url = "{}/related_merge_requests".format(issues_resource_url),
        )
        check_status(resp)
        check_content_type(resp)
        body = json.decode(str(resp.body))

        open_related_merge_requests = [x for x in body if x["state"] == "opened"]
        if len(open_related_merge_requests) == 0:
          print("no related merge requests found, exiting handler")
          return

        resp = w.http.do(
          method = "PUT",
          url = issues_resource_url,
          body = bytes(json.encode({
            "labels": [
              "workflow::in progress",
            ],
          })),
          header = {
            "Private-Token": w.vars.gitlab_token,
            "Content-Type": "application/json",
          },
        )
        check_status(resp)

    on_event(
        type="com.gitlab.events.issue_updated",
        handler=handle_issue_updated,
    )

Example Event:

    {
      "id": "test",
      "source": "test",
      "spec_version": "v1",
      "type": "com.gitlab.events.issue_updated",
      "attributes": {
        "datacontenttype": {
          "ce_string": "application/json"
        }
      },
      "text_data": "{\"project_id\": 40819621, \"issue_id\": 3}"
    }

Example Invocation:

    cat test-event | autoflow run-local -f flow.star
parent cfefdf67
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment