{"id":13721728,"url":"https://github.com/rseng/good-first-issues","last_synced_at":"2026-02-21T13:14:20.200Z","repository":{"id":65161574,"uuid":"243806842","full_name":"rseng/good-first-issues","owner":"rseng","description":"GitHub action to generate a web interface for issues tagged with \"good first issue\" across a list of repositories","archived":false,"fork":false,"pushed_at":"2023-04-27T19:25:52.000Z","size":159,"stargazers_count":9,"open_issues_count":4,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-16T07:56:15.962Z","etag":null,"topics":["action","github-action","good-first-issue"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rseng.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-02-28T16:29:54.000Z","updated_at":"2025-01-09T19:58:27.000Z","dependencies_parsed_at":"2024-02-04T08:47:41.252Z","dependency_job_id":"9bae5643-067c-485f-b8ca-a400e6b3a986","html_url":"https://github.com/rseng/good-first-issues","commit_stats":{"total_commits":16,"total_committers":1,"mean_commits":16.0,"dds":0.0,"last_synced_commit":"d6636a495fcf410b6a350b716abb6f8df1c3671f"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/rseng/good-first-issues","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rseng%2Fgood-first-issues","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rseng%2Fgood-first-issues/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rseng%2Fgood-first-issues/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rseng%2Fgood-first-issues/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rseng","download_url":"https://codeload.github.com/rseng/good-first-issues/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rseng%2Fgood-first-issues/sbom","scorecard":{"id":787245,"data":{"date":"2025-08-11","repo":{"name":"github.com/rseng/good-first-issues","commit":"dfa93b7ec6505200549b30e6a46f8886c1131e85"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"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":"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":"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":"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":"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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Info: Possibly incomplete results: error parsing shell code: a command can only contain words and redirects; encountered (: scripts/generate-first-issues.py:0","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:18.04 to ubuntu:18.04@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98","Warn: pipCommand not pinned by hash: Dockerfile:4","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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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 '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 10 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-23T06:23:58.232Z","repository_id":65161574,"created_at":"2025-08-23T06:23:58.232Z","updated_at":"2025-08-23T06:23:58.232Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29681485,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T12:30:22.644Z","status":"ssl_error","status_checked_at":"2026-02-21T12:29:55.402Z","response_time":107,"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":["action","github-action","good-first-issue"],"created_at":"2024-08-03T01:01:20.669Z","updated_at":"2026-02-21T13:14:20.185Z","avatar_url":"https://github.com/rseng.png","language":"Shell","funding_links":[],"categories":["Awesome Research Software Engineering [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) [![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation) [![Gitter](https://badges.gitter.im/rseng/community.svg)](https://gitter.im/rseng/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge)"],"sub_categories":[],"readme":"# Good First Issues\n\n![img/good-first-issues.png](img/good-first-issues.png)\n\nA GitHub action to generate a web interface with an updated set of issues. This means that:\n\n - the interface is created under docs/\n - issues are populated in docs/_issues\n - the site is served via Jekyll\n\nThis means that you can use the action in your workflows too,\nand choose how often / when to run it, and how to update your GitHub pages.\nContinue reading to learn more.\n\n## Inputs\n\n### `repos-file`\n\n**Optional** The path to the repos.txt (or otherwise named) file. \nDefaults to repos.txt in the root of the repository.\nThe file should include a single list\nof repository URLS, and (optionally) one or more comma separated tags:\n\n```\nhttps://github.com/spack/spack hpc,package-management\nhttps://github.com/singularityhub/sregistry containers,singularity\n```\n\n### `label`\n\n**optional** By default, the repository will filter down to issues labeled with \"good first issue\".\nHowever, you can change this by setting this variable to something else.\n\n\n### `collection`\n\n**optional** By default, the issues will each produce a markdown file to add to the \"docs\" GitHub pages folder,\nin a subfolder named by this variable, which defaults to _issues. If you produce a site that has more\nthan one collection, you can change this to something else.\n\n\n## Example usage\n\n```yaml\n    steps:\n    - name: Checkout Code\n      uses: actions/checkout@v3\n    - name: Generate First Issues\n      uses: rseng/good-first-issues@v1.0.3\n      with:\n        repos-file: '.github/repos.txt'\n        token: ${{ secrets.GITHUB_TOKEN }}\n```\n\nYou only need to define repos-file if you change the path (note that the above is changed from .github/repos.txt). It's\nhighly recommended that you don't use master branch, but instead a version release or commit (as shown above).\nHere is how you might update the label used:\n\n```yaml\n    steps:\n    - name: Checkout Code\n      uses: actions/checkout@v3\n    - name: Generate First Issues\n      uses: rseng/good-first-issues@v1.0.3\n      with:\n        label: 'bug'\n        token: ${{ secrets.GITHUB_TOKEN }}\n```\n\nFinally, if I want to instead output to a folder called `_another` (a Jekyll collection name)\nas a relative path to the docs folder, I can set that as follows:\n\n\n```yaml\n    steps:\n    - name: Checkout Code\n      uses: actions/checkout@v3\n    - name: Generate First Issues\n      uses: rseng/good-first-issues@v1.0.3\n      with:\n        collection: '_another'\n        token: ${{ secrets.GITHUB_TOKEN }}\n```\n\nA full (realistic) workflow might look like the following:\n\n```yaml\nname: good-first-issues\n\non:\n  workflow_dispatch:\n  schedule:\n  - cron: 0 2 * * *\n  - cron: 5 15 * * *\n  - cron: 5 10 * * *\n  - cron: 5 20 * * *\n  push:\n    branches:\n      - main\n\njobs:\n  good-first-issues:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v3\n    - name: Generate First Issues\n      uses: rseng/good-first-issues@v1.0.3\n      with:\n        repos-file: '.github/repos.txt'\n        token: ${{ secrets.GITHUB_TOKEN }}\n\n    - name: Update Repository\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        UPDATE_BRANCH: \"main\"\n      run: |\n        printf \"GitHub Actor: ${GITHUB_ACTOR}\\n\"\n        git remote set-url origin \"https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git\"\n        git branch\n        printf \"Branch to push to is ${UPDATE_BRANCH}\\n\"\n        git checkout ${UPDATE_BRANCH} || git checkout -b ${UPDATE_BRANCH}\n        git branch\n        git config --global user.name \"github-actions\"\n        git config --global user.email \"github-actions@users.noreply.github.com\"\n        git pull origin ${UPDATE_BRANCH}\n        git add docs/*\n        git add docs/_issues/*\n        if git diff-index --quiet HEAD --; then\n           printf \"No changes\\n\"\n        else\n           printf \"Changes\\n\"\n           git commit -m \"Automated deployment to update first issues $(date '+%Y-%m-%d')\"\n           git push origin ${UPDATE_BRANCH}\n        fi\n```\n\nNote that we use another step to push to our main branch. Actions cannot trigger other actions, so the\nworkflow will not be triggered again.\n\n## Examples\n\n - [hpc-social](https://github.com/hpc-social/good-first-issues): a dark themed branded Good First Issues board\n - [awesome-rseng](https://github.com/rseng/awesome-rseng/blob/master/.github/workflows/generate-first-issues.yml) to generate first issues from the awesome-rseng repository, with repos listed in [.github/repos.txt](https://github.com/rseng/awesome-rseng/blob/master/.github/repos.txt)\n\n## Questions\n\n## How do I customize the interface?\n\nThe interface will always be generated in the docs subfolder, so\nif you haven't created it there yet, the action will generate\nit the first time around. It's up to you to add all or a subset of\nfiles in docs/* or docs/_issues after the content is generated.\nFor example, you could add both docs and _issues\nin a next step that will commit to an existing or new branch:\n\n```\ngit add docs/*\ngit add docs/_issues/*\n```\n\nThis means that after the original docs is added and merged,\nyou should be able to customize or otherwise update the template\nto your liking. The folder won't be edited if it already exists\nbeyond the _issues folder.\n\nDo you have an example? Please contribute by opening an issue or a pull request!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frseng%2Fgood-first-issues","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frseng%2Fgood-first-issues","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frseng%2Fgood-first-issues/lists"}