{"id":13474617,"url":"https://github.com/appleboy/jenkins-action","last_synced_at":"2025-12-27T10:11:36.508Z","repository":{"id":41175667,"uuid":"173390073","full_name":"appleboy/jenkins-action","owner":"appleboy","description":"GitHub Action that trigger Jenkins job.","archived":false,"fork":false,"pushed_at":"2025-12-14T06:45:41.000Z","size":380,"stargazers_count":95,"open_issues_count":0,"forks_count":30,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-16T03:23:52.705Z","etag":null,"topics":["github-actions","jenkins"],"latest_commit_sha":null,"homepage":"https://github.com/marketplace/actions/trigger-jenkins-multiple-jobs","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/appleboy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":["https://www.paypal.me/appleboy46"]}},"created_at":"2019-03-02T01:37:33.000Z","updated_at":"2025-12-14T06:45:44.000Z","dependencies_parsed_at":"2025-04-12T06:27:03.024Z","dependency_job_id":"f1e31bb1-ce66-4343-9123-18459810e97b","html_url":"https://github.com/appleboy/jenkins-action","commit_stats":{"total_commits":11,"total_committers":1,"mean_commits":11.0,"dds":0.0,"last_synced_commit":"f4313d631abbe39d10e70546f4a7a173da034801"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/appleboy/jenkins-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appleboy%2Fjenkins-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appleboy%2Fjenkins-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appleboy%2Fjenkins-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appleboy%2Fjenkins-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/appleboy","download_url":"https://codeload.github.com/appleboy/jenkins-action/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appleboy%2Fjenkins-action/sbom","scorecard":{"id":203761,"data":{"date":"2025-08-11","repo":{"name":"github.com/appleboy/jenkins-action","commit":"880426292a78650d28638dab9e064b8eecf08a59"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/goreleaser.yml:9","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/appleboy/jenkins-action/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/appleboy/jenkins-action/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/goreleaser.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/appleboy/jenkins-action/goreleaser.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/goreleaser.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/appleboy/jenkins-action/goreleaser.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/goreleaser.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/appleboy/jenkins-action/goreleaser.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ghcr.io/appleboy/drone-jenkins:1.4.1 to ghcr.io/appleboy/drone-jenkins:1.4.1@sha256:7922dc70a05a1da47a59f90021c3c91f8ae949c290bb872f5dffd673bdf0fc44","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/goreleaser.yml:12"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T23:16:40.028Z","repository_id":41175667,"created_at":"2025-08-16T23:16:40.028Z","updated_at":"2025-08-16T23:16:40.028Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28077395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github-actions","jenkins"],"created_at":"2024-07-31T16:01:13.592Z","updated_at":"2025-12-27T10:11:36.495Z","avatar_url":"https://github.com/appleboy.png","language":"Dockerfile","funding_links":["https://www.paypal.me/appleboy46"],"categories":["Community Resources"],"sub_categories":["Deployment"],"readme":"# 🚀 Trigger Jenkins Job for GitHub Actions\n\n[![Trivy Security Scan](https://github.com/appleboy/jenkins-action/actions/workflows/trivy.yml/badge.svg)](https://github.com/appleboy/jenkins-action/actions/workflows/trivy.yml)\n\nEnglish | [繁體中文](./README.zh-TW.md) | [简体中文](./README.zh-CN.md)\n\n[GitHub Action](https://github.com/features/actions) for trigger [jenkins](https://jenkins.io/) jobs.\n\n## Table of Contents\n\n- [🚀 Trigger Jenkins Job for GitHub Actions](#-trigger-jenkins-job-for-github-actions)\n  - [Table of Contents](#table-of-contents)\n  - [Why Jenkins Action?](#why-jenkins-action)\n  - [Slides](#slides)\n  - [Usage](#usage)\n  - [Jenkins Setting](#jenkins-setting)\n  - [Authentication and CSRF Protection](#authentication-and-csrf-protection)\n    - [Understanding CSRF Protection in Jenkins](#understanding-csrf-protection-in-jenkins)\n    - [Authentication Methods](#authentication-methods)\n      - [1. User + API Token (Recommended)](#1-user--api-token-recommended)\n      - [2. Remote Token (Legacy)](#2-remote-token-legacy)\n  - [Example](#example)\n  - [Input variables](#input-variables)\n  - [Output variables](#output-variables)\n  - [Complete Workflow Example](#complete-workflow-example)\n\n## Why Jenkins Action?\n\nIn many organizations, different teams operate on different CI/CD platforms. While legacy systems continue to run on Jenkins, modern platforms like GitHub Actions and Gitea Actions offer superior features and developer experience. This creates a dilemma: teams want to modernize their workflows, but can't afford to abandon existing Jenkins infrastructure.\n\n**Jenkins Action bridges this gap.** It provides seamless integration between modern CI/CD platforms and Jenkins, enabling teams to:\n\n- **Migrate at your own pace** - Start using GitHub Actions or Gitea Actions today while still leveraging existing Jenkins jobs, no immediate rewrite required\n- **Work across platforms** - Different teams can use their preferred tools while maintaining interoperability\n- **Remove adoption barriers** - Eliminate the \"all-or-nothing\" problem that prevents teams from modernizing\n\nBy connecting modern GitHub Actions or Gitea Actions workflows with existing Jenkins infrastructure, this action provides organizations with a practical, low-risk path toward CI/CD modernization.\n\n## Slides\n\nCheck out [Connecting Your Worlds: A Guide to Integrating GitHub Actions and Jenkins](https://speakerdeck.com/appleboy/connecting-your-worlds-a-guide-to-integrating-github-actions-and-jenkins) for more details.\n\n![jenkins](./images/jenkins-en_800x600.png)\n\n## Usage\n\nTrigger New Jenkins Job.\n\n```yaml\nname: trigger jenkins job\non: [push]\njobs:\n  build:\n    name: Build\n    runs-on: ubuntu-latest\n    steps:\n      - name: trigger single Job\n        uses: appleboy/jenkins-action@v1\n        with:\n          url: \"http://example.com\"\n          user: \"example\"\n          token: ${{ secrets.TOKEN }}\n          job: \"foobar\"\n```\n\n## Jenkins Setting\n\nSetup the Jenkins server using the docker command:\n\n```sh\ndocker run \\\n  --name jenkins-docker \\\n  -d --restart always \\\n  -p 8080:8080 -p 50000:50000 \\\n  -v /data/jenkins:/var/jenkins_home \\\n  jenkins/jenkins:lts\n```\n\nPlease make sure that you create the `/data/jenkins` before starting the Jenkins.\n\nGo to user profile and click on `Configure`:\n\n![jenkins](./images/user-api-token_1024x704.png)\n\n## Authentication and CSRF Protection\n\n### Understanding CSRF Protection in Jenkins\n\nCSRF (Cross-Site Request Forgery) protection uses a token called **crumb** in Jenkins. This crumb is created by Jenkins and sent to the user. Any form submissions or actions resulting in modifications (like triggering builds or changing configuration) require that the crumb be provided. The crumb contains information identifying the user it was created for, so submissions with another user's token would be rejected. All of this happens in the background and has no visible impact except in rare circumstances, such as after a user's session expired and they logged in again.\n\nFor more details, see the [Jenkins CSRF Protection documentation](https://www.jenkins.io/doc/book/security/csrf-protection/).\n\n### Authentication Methods\n\nThis action supports two authentication methods:\n\n#### 1. User + API Token (Recommended)\n\n```yaml\n- name: trigger with user authentication\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1\n```\n\n**How it works:**\n\n- Authenticates using Jenkins username and API token\n- **Automatically handles CSRF protection** by fetching and including the crumb token\n- The action will make an additional API call to `/crumbIssuer/api/json` to obtain the crumb\n- The crumb is then included in all subsequent requests\n- More secure and recommended for most use cases\n\n**When to use:**\n\n- Standard Jenkins installations with CSRF protection enabled (default)\n- When you need full API access and security\n- Production environments\n\n#### 2. Remote Token (Legacy)\n\n```yaml\n- name: trigger with remote token\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    remote_token: ${{ secrets.REMOTE_TOKEN }}\n    job: job_1\n```\n\n**How it works:**\n\n- Uses Jenkins job-specific remote trigger token\n- **Bypasses CSRF protection** - does not require crumb token\n- Configured per-job in Jenkins job configuration under \"Build Triggers\" \u003e \"Trigger builds remotely\"\n- Less secure as it only requires knowing the job name and remote token\n\n**When to use:**\n\n- Jenkins instances with CSRF protection disabled\n- Legacy systems or specific security requirements\n- When you only need to trigger specific jobs without full API access\n- External systems that cannot handle crumb tokens\n\n**Note:** Remote token authentication is considered less secure and should be used with caution. User + API token authentication is recommended for most use cases.\n\n## Example\n\nTrigger multiple jenkins job:\n\n```yaml\n- name: trigger multiple Job\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1,job_2\n```\n\nTrigger jenkins job with parameters:\n\n```yaml\n- name: trigger Job with parameters\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1\n    parameters: |\n      ENVIRONMENT=production\n      VERSION=1.0.0\n      COMMIT_SHA=${{ github.sha }}\n      BRANCH=${{ github.ref_name }}\n```\n\nTrigger jenkins job using remote token:\n\n```yaml\n- name: trigger Job with remote token\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    remote_token: ${{ secrets.REMOTE_TOKEN }}\n    job: job_1\n```\n\nWait for job completion with custom timeout:\n\n```yaml\n- name: trigger Job and wait for completion\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: http://example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1\n    wait: true\n    poll_interval: 5s\n    timeout: 60m\n```\n\nUse custom CA certificate for self-signed SSL:\n\n```yaml\n- name: trigger Job with custom CA certificate\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: https://jenkins.example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1\n    ca_cert: ${{ secrets.CA_CERT }}\n```\n\nYou can also specify a file path or HTTP URL for the CA certificate:\n\n```yaml\n- name: trigger Job with CA certificate from file\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: https://jenkins.example.com\n    user: example\n    token: ${{ secrets.TOKEN }}\n    job: job_1\n    ca_cert: /path/to/ca-certificate.pem\n```\n\n## Input variables\n\n| Parameter     | Required      | Default | Description                                                      |\n| ------------- | ------------- | ------- | ---------------------------------------------------------------- |\n| url           | Yes           |         | Jenkins base URL (e.g., `http://jenkins.example.com/`)           |\n| user          | Conditional\\* |         | Jenkins username                                                 |\n| token         | Conditional\\* |         | Jenkins API token                                                |\n| remote_token  | Conditional\\* |         | Jenkins remote trigger token                                     |\n| job           | Yes           |         | Jenkins job name(s) - can specify multiple                       |\n| parameters    | No            |         | Build parameters in multi-line `key=value` format (one per line) |\n| insecure      | No            | `false` | Allow insecure SSL connections                                   |\n| wait          | No            | `false` | Wait for job completion                                          |\n| poll_interval | No            | `10s`   | Interval between status checks                                   |\n| timeout       | No            | `30m`   | Maximum time to wait for job completion                          |\n| debug         | No            | `false` | Enable debug mode to show detailed parameter information         |\n| ca_cert       | No            |         | Custom CA certificate (PEM content, file path, or HTTP URL)      |\n\n\u003e \\* **Authentication**: Either `user` + `token` OR `remote_token` is required.\n\n## Output variables\n\n| Parameter | Description                                                                |\n| --------- | -------------------------------------------------------------------------- |\n| result    | Jenkins job result (`SUCCESS`, `FAILURE`, `ABORTED`, `UNSTABLE`, or empty) |\n| url       | Jenkins job URL                                                            |\n\nUsage example:\n\n```yaml\n- name: Trigger Jenkins Job\n  id: jenkins\n  uses: appleboy/jenkins-action@v1\n  with:\n    url: ${{ secrets.JENKINS_URL }}\n    user: ${{ secrets.JENKINS_USER }}\n    token: ${{ secrets.JENKINS_TOKEN }}\n    job: your-job-name\n    wait: true\n\n- name: Use outputs\n  run: |\n    echo \"Result: ${{ steps.jenkins.outputs.result }}\"\n    echo \"URL: ${{ steps.jenkins.outputs.url }}\"\n```\n\n## Complete Workflow Example\n\nHere's a complete example that demonstrates a real-world CI/CD workflow with conditional triggers, multiple environments, and job status handling:\n\n```yaml\nname: Deploy via Jenkins\non:\n  push:\n    branches: [main, develop]\n  pull_request:\n    branches: [main]\n\njobs:\n  deploy:\n    name: Trigger Jenkins Deployment\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set environment variables\n        id: vars\n        run: |\n          if [[ \"${{ github.ref }}\" == \"refs/heads/main\" ]]; then\n            echo \"environment=production\" \u003e\u003e $GITHUB_OUTPUT\n            echo \"jenkins_job=deploy-prod\" \u003e\u003e $GITHUB_OUTPUT\n          else\n            echo \"environment=staging\" \u003e\u003e $GITHUB_OUTPUT\n            echo \"jenkins_job=deploy-staging\" \u003e\u003e $GITHUB_OUTPUT\n          fi\n\n      - name: Trigger Jenkins Build and Wait\n        uses: appleboy/jenkins-action@v1\n        with:\n          url: ${{ secrets.JENKINS_URL }}\n          user: ${{ secrets.JENKINS_USER }}\n          token: ${{ secrets.JENKINS_TOKEN }}\n          job: ${{ steps.vars.outputs.jenkins_job }}\n          wait: true\n          timeout: 30m\n          poll_interval: 10s\n          parameters: |\n            ENVIRONMENT=${{ steps.vars.outputs.environment }}\n            VERSION=${{ github.sha }}\n            BRANCH=${{ github.ref_name }}\n            TRIGGERED_BY=${{ github.actor }}\n\n      - name: Notify on success\n        if: success()\n        run: echo \"Jenkins job completed successfully!\"\n\n      - name: Notify on failure\n        if: failure()\n        run: echo \"Jenkins job failed!\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappleboy%2Fjenkins-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappleboy%2Fjenkins-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappleboy%2Fjenkins-action/lists"}