{"id":41664050,"url":"https://github.com/practice-golang/webhook-basket","last_synced_at":"2026-01-24T17:14:56.869Z","repository":{"id":48170537,"uuid":"516420088","full_name":"practice-golang/webhook-basket","owner":"practice-golang","description":"FTP uploader/deployer by webhook request","archived":false,"fork":false,"pushed_at":"2024-01-15T08:49:38.000Z","size":14995,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-20T02:06:57.156Z","etag":null,"topics":["deploy","ftp","git","sftp","webhook"],"latest_commit_sha":null,"homepage":"https://practice-golang.github.io/webhook-basket/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/practice-golang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2022-07-21T15:12:08.000Z","updated_at":"2022-08-26T10:28:24.000Z","dependencies_parsed_at":"2024-06-20T01:39:49.704Z","dependency_job_id":"e5e1399b-aac4-4348-954d-ad8e3892c7cf","html_url":"https://github.com/practice-golang/webhook-basket","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/practice-golang/webhook-basket","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practice-golang%2Fwebhook-basket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practice-golang%2Fwebhook-basket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practice-golang%2Fwebhook-basket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practice-golang%2Fwebhook-basket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/practice-golang","download_url":"https://codeload.github.com/practice-golang/webhook-basket/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/practice-golang%2Fwebhook-basket/sbom","scorecard":{"id":743125,"data":{"date":"2025-08-11","repo":{"name":"github.com/practice-golang/webhook-basket","commit":"84a260589bcd102b5d33de357fb076d1c0f72b51"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.5,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 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":"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":-1,"reason":"no workflows found","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":"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.md:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.1.2 not signed: https://api.github.com/repos/practice-golang/webhook-basket/releases/137028450","Warn: release artifact v0.1.1 not signed: https://api.github.com/repos/practice-golang/webhook-basket/releases/132388796","Warn: release artifact v0.1.0 not signed: https://api.github.com/repos/practice-golang/webhook-basket/releases/75434488","Warn: release artifact v0.1.2 does not have provenance: https://api.github.com/repos/practice-golang/webhook-basket/releases/137028450","Warn: release artifact v0.1.1 does not have provenance: https://api.github.com/repos/practice-golang/webhook-basket/releases/132388796","Warn: release artifact v0.1.0 does not have provenance: https://api.github.com/repos/practice-golang/webhook-basket/releases/75434488"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"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":"Vulnerabilities","score":0,"reason":"26 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-3vp4-m3rf-835h","Warn: Project is vulnerable to: GO-2023-1737 / GHSA-2c4m-59x9-fr2g","Warn: Project is vulnerable to: GO-2024-2456 / GHSA-449p-3h89-pw88","Warn: Project is vulnerable to: GO-2024-2466 / GHSA-mw99-9chc-xw7r","Warn: Project is vulnerable to: GO-2025-3367 / GHSA-r9px-m959-cxf4","Warn: Project is vulnerable to: GO-2025-3368 / GHSA-v725-9546-7q7m","Warn: Project is vulnerable to: GO-2021-0356 / GHSA-8c26-wmh5-6g9v","Warn: Project is vulnerable to: GO-2024-2961","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2022-0288","Warn: Project is vulnerable to: GO-2022-0969 / GHSA-69cg-p879-7622","Warn: Project is vulnerable to: GO-2022-1144 / GHSA-xrjj-mj9h-534m","Warn: Project is vulnerable to: GO-2023-1571 / GHSA-vvpx-j8f3-3w6h","Warn: Project is vulnerable to: GO-2023-1988 / GHSA-2wrh-6pvc-2jm9","Warn: Project is vulnerable to: GO-2023-2102 / GHSA-4374-p667-p6c8","Warn: Project is vulnerable to: GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8","Warn: Project is vulnerable to: GO-2021-0113 / GHSA-ppp9-7jff-5vj2","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp","Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T18:03:00.594Z","repository_id":48170537,"created_at":"2025-08-22T18:03:00.594Z","updated_at":"2025-08-22T18:03:00.594Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28732305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["deploy","ftp","git","sftp","webhook"],"created_at":"2026-01-24T17:14:56.149Z","updated_at":"2026-01-24T17:14:56.857Z","avatar_url":"https://github.com/practice-golang.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"FTP, SFTP uploader for Gitea webhook\n\n## How it works\n\n* Begin work when receive webhook signal from Gitea (or Gogs or Github or Gitlab)\n* Clone the repository at path under `CLONED_REPO_ROOT` in `webhook-basket.ini`\n* Copy cloned files to target web-server via `ftp` or `sftp`\n\n\n## Usage\n\n* Run\n```sh\nwebhook-basket\n```\n\n* Help\n```sh\nwebhook-basket -h\n```\n\n* Build from source\n    * Windows\n    ```powershell\n    # Because of pkg name, not work yet. just download this repo\n    # go get github.com/practice-golang/webhook-basket\n    build.ps1\n    ```\n    * Linux\n    ```sh\n    # Because of pkg name, not work yet. just download this repo\n    # go get github.com/practice-golang/webhook-basket\n    build.sh\n    ```\n\n\n## Behavior\n\n* Run 1 process per 1 target web-server\n    * If target ftp/sftp servers are more than 1, several `webhook-basket` should be run with each of `ini` files\n    * Listening port in each `ini` files have to be set different number\n    * Example usage\n        * Linux\n        ```sh\n        nohup webhook-basket -ini config_a.ini \u0026\n        nohup webhook-basket -ini config_b.ini \u0026\n        ...\n        ```\n        * Windows\n        ```powershell\n        start webhook-basket.exe -ini config_a.ini\n        start webhook-basket.exe -ini config_b.ini\n        ...\n        ```\n\n* There's no delete \u0026 flush target ftp directory. Only appending or overwriting\n\n\n## Webhook setting\n\n* Should be set like below picture. Also `secret` should be added if set it in `ini` file\n\n![gitea](/doc/gitea.png)\n\n* Set target URL like below\n```powershell\nhttp://localhost:7749/deploy\n# Files will be copied to DEPLOYMENT_ROOT/json_repository_name\n# DEPLOYMENT_ROOT variable is in ini file\n# json_repository_name is in requested json data\n```\n* Add `deploy-name` parameter when site name is different from name of the repository\n```powershell\nhttp://localhost:7749/deploy?deploy-name=othername\n# Files will be copied to DEPLOYMENT_ROOT/othername\n# DEPLOYMENT_ROOT variable is in ini file\n```\n* Add `deploy-root` parameter when deployment root is different from the path in `webhook-basket.ini`\n```powershell\nhttp://localhost:7749/deploy?deploy-root=/home/newroot\n# Files will be copied to /home/newroot/json_repository_name\n# json_repository_name is in requested json data\n```\n* All above\n```powershell\nhttp://localhost:7749/deploy?deploy-name=othername\u0026deploy-root=/home/newroot\n# Files will be copied to /home/newroot/othername/\n```\n* When root is root(/)\n```powershell\nhttp://localhost:7749/deploy?deploy-name=othername\u0026deploy-root=/\n# Files will be copied to /othername/\n```\n\n\n* `webhook-basket` use only following data from Gitea sending\n    * See about webhook payload\n        * https://docs.gitea.io/en-us/webhooks\n        * https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads\n        * https://gogs.io/docs/features/webhook\n        * https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html\n```json\n{\n    \"repository\": {\n        \"name\": \"sample-repo\",\n        \"full_name\": \"practice-golang/sample-repo\",\n        \"clone_url\": \"http://localhost:3000/practice-golang/sample-repo.git\",\n    }\n}\n```\n\n* Secret - `webhook-basket` read one header of following signatures which generated with `secret` in `ini` and in `secret form` in `webhook`.\n```\nX-Gitea-Signature: 2f8e..\nX-Gogs-Signature: 2f8e..\nX-Hub-Signature-256: sha256=2f8e..\n```\n\n\n## Exclude file(s) when upload to ftp/sftp\n* Add `.wbignore` to the target repository\n* Syntax is similar with `.gitignore`.\n```.gitignore\n/.git\n.gitignore\n.wbignore\n\nREADME.md\n```\n\n\n## Delete temporary repository root\n* Send following request\n```sh\nDELETE uri/deploy-root\nSecret secRET12345 # optional. If not set in ini, this will be ignored\n```\n\n\n## Trouble Shooting\n* Response nothing, Request timeout\n    * See https://docs.gitea.io/en-us/config-cheat-sheet/#webhook-webhook\n    * Append or modify the following options in `app.ini` of Gitea\n    ```ini\n    [webhook]\n    ALLOWED_HOST_LIST = *\n    DELIVER_TIMEOUT = 120\n    ```\n\n\n## API\n* `GET health` - Health check\n* `POST deploy` - Receive webhook and deploy\n* `DELETE repos-root` - Delete temporary repository root\n* See `requests.http`\n\n\n## License\n\n[3-Clause BSD](https://opensource.org/licenses/BSD-3-Clause)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpractice-golang%2Fwebhook-basket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpractice-golang%2Fwebhook-basket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpractice-golang%2Fwebhook-basket/lists"}