Missing committer mail on Pull Request triggers #7

Closed
opened 2024-02-19 13:34:46 +01:00 by philipkozeny · 9 comments

Hi,

after updating to the new version we have some problem with PR based pipeline runs.

This is an example config we use right now:

  mail:
    image: deblan/woodpecker-email
    settings:
      dsn:
        from_secret: email_dsn
      from:
        address: 
          from_secret: email_user
        name:
          from_secret: email_user
      recipients_only: false
      evaluate: "pipeline.status == 'failure' or prev_pipeline.status == 'failure'"
      content:
        subject: "[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}"
    when:
      - status: [success, failure]

If the trigger of the pipeline is not a push event but a PR I get:

ERROR - Generic error
Email "" does not comply with addr-spec of RFC 2822.

In the previous version that seemed to work and the last committers mail was used. Any idea how to fix that here, without disabling the mail plugin for Pull Request triggers?

Thanks!

Hi, after updating to the new version we have some problem with PR based pipeline runs. This is an example config we use right now: ``` mail: image: deblan/woodpecker-email settings: dsn: from_secret: email_dsn from: address: from_secret: email_user name: from_secret: email_user recipients_only: false evaluate: "pipeline.status == 'failure' or prev_pipeline.status == 'failure'" content: subject: "[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}" when: - status: [success, failure] ``` If the trigger of the pipeline is not a push event but a PR I get: ``` ERROR - Generic error Email "" does not comply with addr-spec of RFC 2822. ``` In the previous version that seemed to work and the last committers mail was used. Any idea how to fix that here, without disabling the mail plugin for Pull Request triggers? Thanks!
deblan added the
bug
label 2024-02-19 14:03:11 +01:00
Owner

Hi,

The mail of the author should be used. I push a new version (latest) of the plugin that includes a debugging option. Could you try it share the output of the plugin please?
The result may contain sensitive information, which should be deleted if necessary.

  mail:
    image: deblan/woodpecker-email
    settings:
      pull: true # force woodpecker to pull deblan/woodpecker-email
      debug: true # add debugging output
      dsn:
        from_secret: email_dsn
      from:
        address: 
          from_secret: email_user
        name:
          from_secret: email_user
      recipients_only: false
      evaluate: "pipeline.status == 'failure' or prev_pipeline.status == 'failure'"
      content:
        subject: "[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}"
    when:
      - status: [success, failure]
Hi, The mail of the author should be used. I push a new version (latest) of the plugin that includes a debugging option. Could you try it share the output of the plugin please? The result may contain sensitive information, which should be deleted if necessary. ``` mail: image: deblan/woodpecker-email settings: pull: true # force woodpecker to pull deblan/woodpecker-email debug: true # add debugging output dsn: from_secret: email_dsn from: address: from_secret: email_user name: from_secret: email_user recipients_only: false evaluate: "pipeline.status == 'failure' or prev_pipeline.status == 'failure'" content: subject: "[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}" when: - status: [success, failure] ```
Author
Debug
=====
Config
{
    "dsn": "smtp:\/\/noreply%40mail.xxx.xx:********@********",
    "from": "{\"address\":\"********\",\"name\":\"********\"}",
    "recipients": null,
    "is_recipients_only": false,
    "attachments": null,
    "evaluate": "pipeline.status == 'failure' or prev_pipeline.status == 'failure'",
    "content": "{\"subject\":\"[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}\"}",
    "is_debug": true
}
Environment
{
    "PATH": "\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin",
    "HOSTNAME": "530dd27a6b9d",
    "CI_PREV_PIPELINE_NUMBER": "520",
    "CI_STEP_STATUS": "success",
    "CI_COMMIT_AUTHOR_AVATAR": "x",
    "CI_PREV_PIPELINE_EVENT": "pull_request",
    "DRONE_COMMIT_AUTHOR_NAME": "philip.kozeny",
    "DRONE_REPO_SCM": "git",
    "DRONE_BUILD_CREATED": "1708353602",
    "DRONE_COMMIT_AUTHOR_AVATAR": "x",
    "CI_PREV_PIPELINE_STARTED": "1708353317",
    "DRONE_BUILD_EVENT": "pull_request",
    "CI_STEP_URL": "https:\/\/ci.xxx.xx\/repos\/5\/pipeline\/521",
    "CI_PREV_COMMIT_AUTHOR": "philip.kozeny",
    "DRONE_TARGET_BRANCH": "master",
    "CI_COMMIT_PULL_REQUEST_LABELS": "",
    "CI": "woodpecker",
    "DRONE_TAG": "",
    "DRONE_REPO_PRIVATE": "true",
    "CI_REPO_TRUSTED": "false",
    "DRONE_REPO_NAME": "xxx-server",
    "CI_PREV_COMMIT_BRANCH": "master",
    "DRONE_REPO": "xxx\/xx-server",
    "CI_REPO": "xxx\/xx-server",
    "DRONE_BUILD_PARENT": "8097",
    "CI_SYSTEM_VERSION": "2.3.0",
    "CI_WORKSPACE": "\/woodpecker\/src\/xxx\/xxx\/xxx-server",
    "CI_PREV_PIPELINE_FORGE_URL": "https:\/\/xxxx\/xxx\/xxx-server\/pulls\/94",
    "DRONE_REPO_OWNER": "xxx",
    "CI_FORGE_URL": "https:\/\/git.xxx",
    "CI_REPO_URL": "https:\/\/git.xxx\/xxx\/xxx-server",
    "CI_PREV_PIPELINE_URL": "https:\/\/ci.xxx\/repos\/5\/pipeline\/520",
    "DRONE_BUILD_LINK": "https:\/\/ci.xxxx\/repos\/5\/pipeline\/521",
    "CI_PIPELINE_FORGE_URL": "https:\/\/git.xxx\/xxx\/xxx-server\/pulls\/94",
    "PLUGIN_EVALUATE": "pipeline.status == 'failure' or prev_pipeline.status == 'failure'",
    "CI_PIPELINE_URL": "https:\/\/ci.xxx\/repos\/5\/pipeline\/521",
    "CI_REPO_DEFAULT_BRANCH": "master",
    "CI_PREV_COMMIT_REFSPEC": "feature\/wp-test:master",
    "CI_PIPELINE_CREATED": "1708353602",
    "DRONE_PULL_REQUEST": "94",
    "CI_PREV_PIPELINE_FINISHED": "1708353367",
    "DRONE_BUILD_STARTED": "1708353602",
    "CI_COMMIT_URL": "https:\/\/git.sxxx\/pulls\/94",
    "CI_COMMIT_TARGET_BRANCH": "master",
    "CI_REPO_REMOTE_ID": "67",
    "CI_COMMIT_BRANCH": "master",
    "CI_REPO_CLONE_SSH_URL": "git@xxxx",
    "CI_PIPELINE_DEPLOY_TARGET": "",
    "DRONE_BRANCH": "master",
    "CI_COMMIT_REF": "refs\/pull\/94\/head",
    "CI_FORGE_TYPE": "gitea",
    "PLUGIN_PULL": "true",
    "CI_SYSTEM_NAME": "woodpecker",
    "CI_STEP_NUMBER": "0",
    "DRONE_GIT_HTTP_URL": "https:\/\/xxxx.git",
    "CI_SYSTEM_PLATFORM": "linux\/amd64",
    "CI_SYSTEM_HOST": "ci.xxxx",
    "DRONE_BUILD_FINISHED": "1708353648",
    "CI_COMMIT_MESSAGE": "add debug mode for mail",
    "CI_COMMIT_SOURCE_BRANCH": "feature\/wp-test",
    "PLUGIN_DSN": "smtp:\/\/noreply%40mail.xxx.xx:********@********",
    "CI_STEP_FINISHED": "1708353648",
    "DRONE_STEP_NUMBER": "0",
    "CI_PIPELINE_FINISHED": "1708353648",
    "DRONE_COMMIT": "b64e1d3899023304cc792bede38de50f708138dd",
    "DRONE_COMMIT_BEFORE": "b64e1d3899023304cc792bede38de50f708138dd",
    "DRONE_COMMIT_BRANCH": "master",
    "CI_PIPELINE_STARTED": "1708353602",
    "CI_PREV_COMMIT_URL": "https:\/\/git.xxxx\/xxxx\/xxx-server\/pulls\/94",
    "PLUGIN_CONTENT": "{\"subject\":\"[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}\"}",
    "CI_PREV_PIPELINE_DEPLOY_TARGET": "",
    "DRONE_SYSTEM_HOST": "ci.xxx.xx",
    "DRONE_REMOTE_URL": "https:\/\/git.xxxxx\/xxxx\/xxxx-server.git",
    "CI_COMMIT_REFSPEC": "feature\/wp-test:master",
    "CI_PIPELINE_NUMBER": "521",
    "CI_REPO_OWNER": "xxx",
    "CI_PREV_COMMIT_REF": "refs\/pull\/94\/head",
    "DRONE_BUILD_NUMBER": "521",
    "PLUGIN_DEBUG": "true",
    "CI_PREV_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd",
    "CI_MACHINE": "11acf06c1478",
    "CI_PREV_PIPELINE_PARENT": "0",
    "DRONE_COMMIT_AUTHOR_EMAIL": "",
    "CI_PREV_COMMIT_AUTHOR_AVATAR": "xxx",
    "CI_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd",
    "PLUGIN_FROM": "{\"address\":\"********\",\"name\":\"********\"}",
    "CI_PIPELINE_STATUS": "success",
    "DRONE_SOURCE_BRANCH": "feature\/wp-test",
    "CI_COMMIT_TAG": "",
    "CI_REPO_NAME": "xxx-server",
    "CI_PREV_PIPELINE_CREATED": "1708353316",
    "DRONE_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd",
    "CI_PIPELINE_FILES": "[\".woodpecker\/test.yml\"]",
    "CI_REPO_SCM": "git",
    "CI_COMMIT_AUTHOR_EMAIL": "",
    "CI_REPO_PRIVATE": "true",
    "PLUGIN_RECIPIENTS_ONLY": "false",
    "CI_COMMIT_PULL_REQUEST": "94",
    "CI_WORKFLOW_NAME": "test",
    "DRONE_COMMIT_AUTHOR": "philip.kozeny",
    "CI_COMMIT_AUTHOR": "philip.kozeny",
    "DRONE_REPO_BRANCH": "master",
    "CI_PREV_PIPELINE_STATUS": "success",
    "CI_REPO_CLONE_URL": "https:\/\/xxx",
    "DRONE_COMMIT_MESSAGE": "add debug mode for mail",
    "CI_PREV_COMMIT_MESSAGE": "add debug mode for mail",
    "CI_PREV_COMMIT_AUTHOR_EMAIL": "",
    "CI_SYSTEM_URL": "https:\/\/ci.xxxx.xx",
    "CI_STEP_STARTED": "1708353602",
    "DRONE_COMMIT_REF": "refs\/pull\/94\/head",
    "DRONE_BUILD_STATUS": "success",
    "CI_WORKFLOW_NUMBER": "1",
    "DRONE_REPO_LINK": "https:\/\/git.xxxxx",
    "CI_PIPELINE_PARENT": "8097",
    "CI_PIPELINE_EVENT": "pull_request",
    "CI_STEP_NAME": "",
    "DRONE_COMMIT_LINK": "https:\/\/git.xxxx\/94",
    "HOME": "\/root",
    "PHP_SELF": "\/opt\/app\/bin\/console",
    "SCRIPT_NAME": "\/opt\/app\/bin\/console",
    "SCRIPT_FILENAME": "\/opt\/app\/bin\/console",
    "PATH_TRANSLATED": "\/opt\/app\/bin\/console",
    "DOCUMENT_ROOT": "",
    "REQUEST_TIME_FLOAT": 1708353649.001378,
    "REQUEST_TIME": 1708353649,
    "argv": [
        "\/opt\/app\/bin\/console"
    ],
    "argc": 1
}
=====
Evaluation returns false.
Program aborted!
``` Debug ===== Config { "dsn": "smtp:\/\/noreply%40mail.xxx.xx:********@********", "from": "{\"address\":\"********\",\"name\":\"********\"}", "recipients": null, "is_recipients_only": false, "attachments": null, "evaluate": "pipeline.status == 'failure' or prev_pipeline.status == 'failure'", "content": "{\"subject\":\"[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}\"}", "is_debug": true } Environment { "PATH": "\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin", "HOSTNAME": "530dd27a6b9d", "CI_PREV_PIPELINE_NUMBER": "520", "CI_STEP_STATUS": "success", "CI_COMMIT_AUTHOR_AVATAR": "x", "CI_PREV_PIPELINE_EVENT": "pull_request", "DRONE_COMMIT_AUTHOR_NAME": "philip.kozeny", "DRONE_REPO_SCM": "git", "DRONE_BUILD_CREATED": "1708353602", "DRONE_COMMIT_AUTHOR_AVATAR": "x", "CI_PREV_PIPELINE_STARTED": "1708353317", "DRONE_BUILD_EVENT": "pull_request", "CI_STEP_URL": "https:\/\/ci.xxx.xx\/repos\/5\/pipeline\/521", "CI_PREV_COMMIT_AUTHOR": "philip.kozeny", "DRONE_TARGET_BRANCH": "master", "CI_COMMIT_PULL_REQUEST_LABELS": "", "CI": "woodpecker", "DRONE_TAG": "", "DRONE_REPO_PRIVATE": "true", "CI_REPO_TRUSTED": "false", "DRONE_REPO_NAME": "xxx-server", "CI_PREV_COMMIT_BRANCH": "master", "DRONE_REPO": "xxx\/xx-server", "CI_REPO": "xxx\/xx-server", "DRONE_BUILD_PARENT": "8097", "CI_SYSTEM_VERSION": "2.3.0", "CI_WORKSPACE": "\/woodpecker\/src\/xxx\/xxx\/xxx-server", "CI_PREV_PIPELINE_FORGE_URL": "https:\/\/xxxx\/xxx\/xxx-server\/pulls\/94", "DRONE_REPO_OWNER": "xxx", "CI_FORGE_URL": "https:\/\/git.xxx", "CI_REPO_URL": "https:\/\/git.xxx\/xxx\/xxx-server", "CI_PREV_PIPELINE_URL": "https:\/\/ci.xxx\/repos\/5\/pipeline\/520", "DRONE_BUILD_LINK": "https:\/\/ci.xxxx\/repos\/5\/pipeline\/521", "CI_PIPELINE_FORGE_URL": "https:\/\/git.xxx\/xxx\/xxx-server\/pulls\/94", "PLUGIN_EVALUATE": "pipeline.status == 'failure' or prev_pipeline.status == 'failure'", "CI_PIPELINE_URL": "https:\/\/ci.xxx\/repos\/5\/pipeline\/521", "CI_REPO_DEFAULT_BRANCH": "master", "CI_PREV_COMMIT_REFSPEC": "feature\/wp-test:master", "CI_PIPELINE_CREATED": "1708353602", "DRONE_PULL_REQUEST": "94", "CI_PREV_PIPELINE_FINISHED": "1708353367", "DRONE_BUILD_STARTED": "1708353602", "CI_COMMIT_URL": "https:\/\/git.sxxx\/pulls\/94", "CI_COMMIT_TARGET_BRANCH": "master", "CI_REPO_REMOTE_ID": "67", "CI_COMMIT_BRANCH": "master", "CI_REPO_CLONE_SSH_URL": "git@xxxx", "CI_PIPELINE_DEPLOY_TARGET": "", "DRONE_BRANCH": "master", "CI_COMMIT_REF": "refs\/pull\/94\/head", "CI_FORGE_TYPE": "gitea", "PLUGIN_PULL": "true", "CI_SYSTEM_NAME": "woodpecker", "CI_STEP_NUMBER": "0", "DRONE_GIT_HTTP_URL": "https:\/\/xxxx.git", "CI_SYSTEM_PLATFORM": "linux\/amd64", "CI_SYSTEM_HOST": "ci.xxxx", "DRONE_BUILD_FINISHED": "1708353648", "CI_COMMIT_MESSAGE": "add debug mode for mail", "CI_COMMIT_SOURCE_BRANCH": "feature\/wp-test", "PLUGIN_DSN": "smtp:\/\/noreply%40mail.xxx.xx:********@********", "CI_STEP_FINISHED": "1708353648", "DRONE_STEP_NUMBER": "0", "CI_PIPELINE_FINISHED": "1708353648", "DRONE_COMMIT": "b64e1d3899023304cc792bede38de50f708138dd", "DRONE_COMMIT_BEFORE": "b64e1d3899023304cc792bede38de50f708138dd", "DRONE_COMMIT_BRANCH": "master", "CI_PIPELINE_STARTED": "1708353602", "CI_PREV_COMMIT_URL": "https:\/\/git.xxxx\/xxxx\/xxx-server\/pulls\/94", "PLUGIN_CONTENT": "{\"subject\":\"[{{ pipeline.status }}] {{ pipeline.event }} {{ repo.full_name }} - {{ commit.sha[0:8] }}\"}", "CI_PREV_PIPELINE_DEPLOY_TARGET": "", "DRONE_SYSTEM_HOST": "ci.xxx.xx", "DRONE_REMOTE_URL": "https:\/\/git.xxxxx\/xxxx\/xxxx-server.git", "CI_COMMIT_REFSPEC": "feature\/wp-test:master", "CI_PIPELINE_NUMBER": "521", "CI_REPO_OWNER": "xxx", "CI_PREV_COMMIT_REF": "refs\/pull\/94\/head", "DRONE_BUILD_NUMBER": "521", "PLUGIN_DEBUG": "true", "CI_PREV_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd", "CI_MACHINE": "11acf06c1478", "CI_PREV_PIPELINE_PARENT": "0", "DRONE_COMMIT_AUTHOR_EMAIL": "", "CI_PREV_COMMIT_AUTHOR_AVATAR": "xxx", "CI_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd", "PLUGIN_FROM": "{\"address\":\"********\",\"name\":\"********\"}", "CI_PIPELINE_STATUS": "success", "DRONE_SOURCE_BRANCH": "feature\/wp-test", "CI_COMMIT_TAG": "", "CI_REPO_NAME": "xxx-server", "CI_PREV_PIPELINE_CREATED": "1708353316", "DRONE_COMMIT_SHA": "b64e1d3899023304cc792bede38de50f708138dd", "CI_PIPELINE_FILES": "[\".woodpecker\/test.yml\"]", "CI_REPO_SCM": "git", "CI_COMMIT_AUTHOR_EMAIL": "", "CI_REPO_PRIVATE": "true", "PLUGIN_RECIPIENTS_ONLY": "false", "CI_COMMIT_PULL_REQUEST": "94", "CI_WORKFLOW_NAME": "test", "DRONE_COMMIT_AUTHOR": "philip.kozeny", "CI_COMMIT_AUTHOR": "philip.kozeny", "DRONE_REPO_BRANCH": "master", "CI_PREV_PIPELINE_STATUS": "success", "CI_REPO_CLONE_URL": "https:\/\/xxx", "DRONE_COMMIT_MESSAGE": "add debug mode for mail", "CI_PREV_COMMIT_MESSAGE": "add debug mode for mail", "CI_PREV_COMMIT_AUTHOR_EMAIL": "", "CI_SYSTEM_URL": "https:\/\/ci.xxxx.xx", "CI_STEP_STARTED": "1708353602", "DRONE_COMMIT_REF": "refs\/pull\/94\/head", "DRONE_BUILD_STATUS": "success", "CI_WORKFLOW_NUMBER": "1", "DRONE_REPO_LINK": "https:\/\/git.xxxxx", "CI_PIPELINE_PARENT": "8097", "CI_PIPELINE_EVENT": "pull_request", "CI_STEP_NAME": "", "DRONE_COMMIT_LINK": "https:\/\/git.xxxx\/94", "HOME": "\/root", "PHP_SELF": "\/opt\/app\/bin\/console", "SCRIPT_NAME": "\/opt\/app\/bin\/console", "SCRIPT_FILENAME": "\/opt\/app\/bin\/console", "PATH_TRANSLATED": "\/opt\/app\/bin\/console", "DOCUMENT_ROOT": "", "REQUEST_TIME_FLOAT": 1708353649.001378, "REQUEST_TIME": 1708353649, "argv": [ "\/opt\/app\/bin\/console" ], "argc": 1 } ===== Evaluation returns false. Program aborted! ```
Owner

CI_COMMIT_AUTHOR_EMAIL seems to be empty. Does the commiter have an email address?

`CI_COMMIT_AUTHOR_EMAIL` seems to be empty. Does the commiter have an email address?
Author

Yes, when I add another commit and push it I can see my mail address in the debug output and via echo $CI_COMMIT_AUTHOR_EMAIL in the pipeline. So somehow it is not set when running via as a PR type.

Yes, when I add another commit and push it I can see my mail address in the debug output and via `echo $CI_COMMIT_AUTHOR_EMAIL` in the pipeline. So somehow it is not set when running via as a PR type.
deblan added the
reproduced
label 2024-02-20 21:41:30 +01:00
Owner

The previous version of the project used CI_COMMIT_AUTHOR_EMAIL too. So the problem could be on Woodpecker or Gitea/Forgejo side.

Lines 213 to 217 in 9fb03a0
cli.StringFlag{
Name: "commit.author.email",
Usage: "git author email",
EnvVar: "CI_COMMIT_AUTHOR_EMAIL",
},


Line 291 in 9fb03a0
"CI_COMMIT_AUTHOR_EMAIL": p.Context.String("commit.author.email"),


Lines 148 to 159 in 9fb03a0
if !p.Config.RecipientsOnly {
exists := false
for _, recipient := range p.Config.Recipients {
if recipient == p.Commit.Author.Email {
exists = true
}
}
if !exists {
p.Config.Recipients = append(p.Config.Recipients, p.Commit.Author.Email)
}
}

The previous version of the project used `CI_COMMIT_AUTHOR_EMAIL` too. So the problem could be on Woodpecker or Gitea/Forgejo side. https://gitnet.fr/deblan/woodpecker-email/src/commit/9fb03a05ab8c1f471b70148a3da3465d8427a2eb/main.go#L213-L217 https://gitnet.fr/deblan/woodpecker-email/src/commit/9fb03a05ab8c1f471b70148a3da3465d8427a2eb/plugin.go#L291 https://gitnet.fr/deblan/woodpecker-email/src/commit/9fb03a05ab8c1f471b70148a3da3465d8427a2eb/plugin.go#L148-L159
deblan removed the
bug
label 2024-02-20 21:53:15 +01:00
Owner

From Woodpecker matrix room:

We don't manipulate this data AFAIK, so I'd say it's an gitea issue. Can you check your webhooks (and see which email is shown there)?

After tests, the pull pull request webhook content contains the mail.

From Woodpecker matrix room: > We don't manipulate this data AFAIK, so I'd say it's an gitea issue. Can you check your webhooks (and see which email is shown there)? After tests, the pull pull request webhook content contains the mail.
Author

From Woodpecker matrix room:

We don't manipulate this data AFAIK, so I'd say it's an gitea issue. Can you check your webhooks (and see which email is shown there)?

After tests, the pull pull request webhook content contains the mail.

Same here, I can see the mail address in webhook content for pull requests.

> From Woodpecker matrix room: > > > We don't manipulate this data AFAIK, so I'd say it's an gitea issue. Can you check your webhooks (and see which email is shown there)? > > After tests, the pull pull request webhook content contains the mail. Same here, I can see the mail address in webhook content for pull requests.
Owner
https://github.com/woodpecker-ci/woodpecker/pull/3420
Owner
Fixed in https://github.com/woodpecker-ci/woodpecker/releases/tag/v2.4.0
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: deblan/woodpecker-email#7
No description provided.