{"id":44427610,"url":"https://github.com/techwiz-3/linksafe","last_synced_at":"2026-02-12T11:01:50.020Z","repository":{"id":49774644,"uuid":"518018083","full_name":"TechWiz-3/linksafe","owner":"TechWiz-3","description":"🔗 Scan links in your repo to ensure they are valid. Works in private repos!","archived":false,"fork":false,"pushed_at":"2022-10-19T05:55:32.000Z","size":537,"stargazers_count":10,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-10T23:49:39.513Z","etag":null,"topics":["awesome","broken-link-finder","continuous-integration","github-action","github-action-docker","hacktoberfest","hacktoberfest-2022","link-checker","link-checking","links","linksafe","python-github-actions","url-checker","validator"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TechWiz-3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-26T10:39:20.000Z","updated_at":"2025-09-09T05:22:31.000Z","dependencies_parsed_at":"2023-01-05T04:50:44.384Z","dependency_job_id":null,"html_url":"https://github.com/TechWiz-3/linksafe","commit_stats":{"total_commits":74,"total_committers":2,"mean_commits":37.0,"dds":"0.10810810810810811","last_synced_commit":"7c7b45b00c15fb049463dd152c52f7542a372400"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/TechWiz-3/linksafe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechWiz-3%2Flinksafe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechWiz-3%2Flinksafe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechWiz-3%2Flinksafe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechWiz-3%2Flinksafe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TechWiz-3","download_url":"https://codeload.github.com/TechWiz-3/linksafe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TechWiz-3%2Flinksafe/sbom","scorecard":{"id":138583,"data":{"date":"2025-08-04","repo":{"name":"github.com/TechWiz-3/linksafe","commit":"7c7b45b00c15fb049463dd152c52f7542a372400"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":3.2,"checks":[{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/test.yml:1","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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: src/__pycache__/link.cpython-310.pyc:1","Warn: binary detected: src/__pycache__/link.cpython-39.pyc:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"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/test.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/TechWiz-3/linksafe/test.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating python:3.9 to python:3.9@sha256:754dbbaf5fe730bb2460efb3300293c62c222f74fbf8534ed23691c617c9609b","Warn: pipCommand not pinned by hash: Dockerfile:10","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 pipCommand 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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T07:19:48.510Z","repository_id":49774644,"created_at":"2025-08-16T07:19:48.510Z","updated_at":"2025-08-16T07:19:48.510Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29363627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"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":["awesome","broken-link-finder","continuous-integration","github-action","github-action-docker","hacktoberfest","hacktoberfest-2022","link-checker","link-checking","links","linksafe","python-github-actions","url-checker","validator"],"created_at":"2026-02-12T11:01:27.877Z","updated_at":"2026-02-12T11:01:50.013Z","avatar_url":"https://github.com/TechWiz-3.png","language":"Python","readme":"# Linksafe\n\nScan your repo for broken links. Whitelist links or files you wish to ignore. Works in private repos. Designed to be ideal for awesome-lists!  \n\n:zap: Check out the [fast](https://github.com/TechWiz-3/linksafe/tree/fast) branch if you want lightning fast checking for large volumes and very short run time.\n\n## Example usage\n```yaml\nname: Link-check\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - name: Run linksafe\n        uses: TechWiz-3/linksafe@main\n        with: # comma seperated lists\n          # use relative paths, if no dirs specified root dir is scanned\n          dirs: \".,./src,./src/data,./tests,./tests/pylint\"\n          # set to false by default\n          verbose: true\n          whitelist_links: \"https://xyz.xyz\"\n          # use relative paths\n          whitelist_files: \"./doc/HACKING.md\"\n```\n\n## More info\n\n`https://example.com` and `http://localhost` are automatically ignored  \n\nEach directory to be scanned must be specified directly, otherwise only the root dir will be scanned and subdirs will be ignored. At the same time, if you want the root dir AND subdirs to be scanned, remember to include a `.` as part of the list.  \n\nFiles and or links can be whitelisted i.e. ignored.  \n\nPlease note, with repos with a lot of links, a scan can take a LONG time, even up to 40+ minutes. If you wish scans to be no longer than a minute or two, use the [fast](https://github.com/TechWiz-3/linksafe/tree/fast) branch.  \n\n## Todo\n- [ ] In depth error handling for user inputs (if they go wrong)\n- [ ] Recognition of removed yt videos\n- [ ] Emoji HTTP code (optional)\n- [ ] Enforce HTTPS option\n- [ ] Allow bad SSL cert option\n- [ ] Possible repo replacements, aliases or moves if a gh repo link fails\n- [ ] 429 error code\n\n---\n### 🎉 Commit labels\nIf you're interested in the commit labels used in this repo, check out my [git emoji](https://github.com/TechWiz-3/git-commit-emojis) project\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechwiz-3%2Flinksafe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechwiz-3%2Flinksafe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechwiz-3%2Flinksafe/lists"}