├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── add_user.yml │ ├── rebuild_cache.yml │ └── regenerate.yml ├── .gitignore ├── README.md ├── authors ├── ATOOMIC.json ├── BDFOY.json ├── BYTEROCK.json ├── CROMEDOME.json ├── DAVECROSS.json ├── DCANTRELL.json ├── DRCLAW.json ├── FERKI.json ├── GDT.json ├── GEEKRUTH.json ├── MANWAR.json ├── NHORNE.json ├── OALDERS.json ├── PETDANCE.json ├── PMQS.json ├── PSCUST.json ├── SKIM.json ├── SLAFFAN.json ├── SLU.json ├── SZABGAB.json ├── TEODESIAN.json ├── TOBYINK.json ├── TODDR.json ├── VOEGELAS.json └── data │ ├── ATOOMIC │ └── data.json │ ├── BDFOY │ └── data.json │ ├── BYTEROCK │ └── data.json │ ├── CROMEDOME │ └── data.json │ ├── DAVECROSS │ └── data.json │ ├── DCANTRELL │ └── data.json │ ├── DRCLAW │ └── data.json │ ├── FERKI │ └── data.json │ ├── GEEKRUTH │ └── data.json │ ├── MANWAR │ └── data.json │ ├── NHORNE │ └── data.json │ ├── OALDERS │ └── data.json │ ├── PETDANCE │ └── data.json │ ├── PMQS │ └── data.json │ ├── PSCUST │ └── data.json │ ├── SKIM │ └── data.json │ ├── SLAFFAN │ └── data.json │ ├── SLU │ └── data.json │ ├── SZABGAB │ └── data.json │ ├── TEODESIAN │ └── data.json │ ├── TOBYINK │ └── data.json │ ├── TODDR │ └── data.json │ └── VOEGELAS │ └── data.json ├── bin ├── add_user └── dashboard ├── cpanfile ├── dashboard.json ├── lib └── Dashboard │ ├── App.pm │ ├── Author.pm │ ├── BadgeMaker.pm │ └── Distribution.pm ├── refresh_branch_cache ├── repo_def_branch.json ├── src ├── CNAME ├── add │ └── index.html ├── css │ └── style.css ├── favicon.ico ├── images │ ├── dashboard.png │ ├── gravatar.png │ ├── gravatar.webp │ └── missing_image.png ├── js │ └── dashboard.js └── robots.txt └── tt_lib ├── add.tt ├── dashboard.tt ├── index.tt ├── page.tt └── sitemap.tt /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: davorg 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Set update schedule for GitHub Actions 2 | 3 | version: 2 4 | updates: 5 | 6 | - package-ecosystem: "github-actions" 7 | directory: "/" 8 | schedule: 9 | # Check for updates to GitHub Actions every week 10 | interval: "weekly" 11 | -------------------------------------------------------------------------------- /.github/workflows/add_user.yml: -------------------------------------------------------------------------------- 1 | name: Add user 2 | 3 | on: 4 | repository_dispatch: 5 | types: [add_user] 6 | 7 | jobs: 8 | add_user: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v4 13 | - name: Do the thing 14 | run: bin/add_user '${{ toJSON(github.event.client_payload) }}' 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/rebuild_cache.yml: -------------------------------------------------------------------------------- 1 | name: Rebuild default branch cache 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * 1' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | 16 | - name: Install cpanm 17 | run: sudo apt-get update && sudo apt-get install -y cpanminus 18 | 19 | - name: Install modules 20 | run: | 21 | sudo cpanm --installdeps --notest . 22 | 23 | - name: Rebuild branch cache 24 | env: 25 | PERL5LIB: lib 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | run: | 28 | perl refresh_branch_cache 29 | 30 | - name: Commit new page 31 | if: github.repository == 'PerlToolsTeam/dashboard' 32 | run: | 33 | git config --global --add safe.directory /__w/dashboard/dashboard 34 | GIT_STATUS=$(git status --porcelain) 35 | echo $GIT_STATUS 36 | git config user.name github-actions[bot] 37 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com 38 | git add repo_def_branch.json 39 | if [ "$GIT_STATUS" != "" ]; then git commit -m "Automated Web page generation"; fi 40 | if [ "$GIT_STATUS" != "" ]; then git push; fi 41 | 42 | -------------------------------------------------------------------------------- /.github/workflows/regenerate.yml: -------------------------------------------------------------------------------- 1 | name: Generate web page 2 | 3 | on: 4 | push: 5 | branches: 'master' 6 | schedule: 7 | - cron: '7 */6 * * *' 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | container: perl:latest 14 | 15 | steps: 16 | - name: Install snapd 17 | run: | 18 | apt-get -y update 19 | apt-get -y install gh 20 | 21 | - name: Perl version 22 | run: perl -v 23 | 24 | - name: Checkout 25 | uses: actions/checkout@v4 26 | 27 | - name: Install cpanm 28 | run: apt-get update && apt-get install -y cpanminus 29 | 30 | - name: Install modules 31 | run: | 32 | cpanm --installdeps --notest . 33 | 34 | - name: Create pages 35 | env: 36 | PERL5LIB: lib 37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 38 | run: | 39 | mkdir -p docs 40 | perl bin/dashboard 41 | 42 | - name: Commit new page 43 | if: github.repository == 'PerlToolsTeam/dashboard' 44 | run: | 45 | git config --global --add safe.directory /__w/dashboard/dashboard 46 | GIT_STATUS=$(git status --porcelain) 47 | echo $GIT_STATUS 48 | git config user.name github-actions[bot] 49 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com 50 | git add . 51 | if [ "$GIT_STATUS" != "" ]; then git commit -m "Automated Web page generation"; fi 52 | if [ "$GIT_STATUS" != "" ]; then git push; fi 53 | 54 | - name: Update pages artifact 55 | uses: actions/upload-pages-artifact@v3 56 | with: 57 | path: docs/ 58 | 59 | deploy: 60 | needs: build 61 | permissions: 62 | pages: write 63 | id-token: write 64 | environment: 65 | name: github-pages 66 | url: ${{ steps.deployment.outputs.page_url }} 67 | runs-on: ubuntu-latest 68 | steps: 69 | - name: Deploy to GitHub Pages 70 | id: deployment 71 | uses: actions/deploy-pages@v4 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | docs/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dashboard 2 | Simple dashboard for monitoring CPAN modules 3 | 4 | ## Simple Set-Up 5 | 6 | To configure this system to work with your system, do the following: 7 | 8 | * Register with Coveralls using your Github login 9 | * Activate the repos that you want to report on Coveralls 10 | * Edit the `dashboard.json` file so it is configured correctly 11 | * Push changes to your repos 12 | * Run `dashboard` 13 | 14 | **Note:** For (slightly) more detail about setting up Coveralls, see 15 | [my presentation on the subject](http://www.slideshare.net/davorg/github-travisci-and-perl). 16 | 17 | 18 | ## Configuration 19 | 20 | You configure the system by editing `dashboard.json`. There are two main sections in the file. 21 | 22 | * **author** - information about the author of the modules. 23 | * **github** - your Github username. 24 | * **cpan** - your CPAN username. 25 | * **output** - various output parameters 26 | * **file** - the name of the output file. 27 | * **template** - the name of the input template. 28 | * **title** - the title to use on the output page. 29 | * **menu** - a list of menu items to appear in header of the output page. Each item should be a JSON object with a **link** attribute and a **title** attribute. 30 | * **analytics** - a Google Analytics code. If this is given, then a Google Analytics section is added to the output. 31 | 32 | ## Example 33 | 34 | You can see this code in action at https://cpandashboard.com/DAVECROSS/. 35 | -------------------------------------------------------------------------------- /authors/ATOOMIC.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "ATOOMIC", 4 | "github" : "atoomic" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "ubuntu", "linux", "macos", "windows", "testsuite", "test" ], 9 | "use_travis" : 0, 10 | "use_coveralls" :0, 11 | "use_codecov" : 0, 12 | "use_appveyor" : 0 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /authors/BDFOY.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "BDFOY", 4 | "github" : "briandfoy" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "ubuntu", "macos", "windows" ], 9 | "use_travis" : 1, 10 | "use_coveralls" : 1, 11 | "use_codecov" : 0, 12 | "use_appveyor" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /authors/BYTEROCK.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "BYTEROCK", 4 | "github" : "byterock" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/CROMEDOME.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "CROMEDOME", 4 | "github" : "cromedome" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/DAVECROSS.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "DAVECROSS", 4 | "github" : "davorg" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/DCANTRELL.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "DCANTRELL", 4 | "github" : "DrHyde" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "Linux", "FreeBSD", "OpenBSD", "MacOS", "Windows" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis_com" : 0, 12 | "use_coveralls" : 1, 13 | "use_codecov" : 0 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /authors/DRCLAW.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "DRCLAW", 4 | "github" : "drclaw1394" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_travis" : 0, 10 | "use_coveralls" : 0, 11 | "use_codecov" : 0 12 | }, 13 | "sort": { 14 | "column": 3, 15 | "direction": "desc" 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /authors/FERKI.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "FERKI", 4 | "github" : "ferki" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "build and test" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/GDT.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "GDT", 4 | "github" : "giterlizzi" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/GEEKRUTH.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "GEEKRUTH", 4 | "github" : "GeekRuthie" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 0, 8 | "gh_workflow_names" : [ ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | 19 | -------------------------------------------------------------------------------- /authors/MANWAR.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "MANWAR", 4 | "github" : "manwar" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/NHORNE.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "NHORNE", 4 | "github" : "nigelhorne" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 1, 11 | "use_travis" : 1, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/OALDERS.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "OALDERS", 4 | "github" : "oalders" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "Build", "dzil build and test", "test" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 1 15 | }, 16 | "sort": { 17 | "column": 3, 18 | "direction": "desc" 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /authors/PETDANCE.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PETDANCE", 4 | "github" : "petdance" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "testsuite" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/PMQS.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PMQS", 4 | "github" : "pmqs" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "linux", "macos", "windows" ], 9 | "use_cirrus" : 1, 10 | "use_appveyor" : 1, 11 | "use_travis" : 0, 12 | "use_travis_com" : 1, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/PSCUST.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PSCUST", 4 | "github" : "pauloscustodio" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /authors/SKIM.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SKIM", 4 | "github" : "michal-josef-spacek" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/SLAFFAN.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SLAFFAN", 4 | "github" : "shawnlaffan" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 1, 10 | "use_appveyor" : 1, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 0, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/SLU.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SLU", 4 | "github" : "soren" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 0, 8 | "gh_workflow_names" : [ ], 9 | "use_travis" : 1, 10 | "use_coveralls" : 1 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /authors/SZABGAB.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SZABGAB", 4 | "github" : "szabgab" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_travis" : 1, 10 | "use_coveralls" : 1, 11 | "use_codecov" : 0 12 | }, 13 | "sort": { 14 | "column": 3, 15 | "direction": "desc" 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /authors/TEODESIAN.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "TEODESIAN", 4 | "github" : "teodesian" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 0, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 1, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/TOBYINK.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "TOBYINK", 4 | "github" : "tobyink" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "CI" ], 9 | "use_travis" : 0, 10 | "use_coveralls" : 1, 11 | "use_codecov" : 1 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /authors/TODDR.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "TODDR", 4 | "github" : "toddr" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "ubuntu", "macos", "windows", "testsuite", "bsd", "windows_installation" ], 9 | "use_travis" : 0, 10 | "use_coveralls" :0, 11 | "use_codecov" : 0, 12 | "use_appveyor" : 0 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /authors/VOEGELAS.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "VOEGELAS", 4 | "github" : "voegelas" 5 | }, 6 | "ci" : { 7 | "use_gh_actions" : 1, 8 | "gh_workflow_names" : [ "linux" ], 9 | "use_cirrus" : 0, 10 | "use_appveyor" : 0, 11 | "use_travis" : 0, 12 | "use_travis_com" : 0, 13 | "use_coveralls" : 1, 14 | "use_codecov" : 0 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /authors/data/ATOOMIC/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "ATOOMIC", 4 | "github" : "atoomic", 5 | "gravatar" : "https://secure.gravatar.com/avatar/7df78e735b7ef916d691e0b574a14f06?s=130&d=identicon", 6 | "name" : "ℕicolas ℝ." 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "ubuntu", 11 | "linux", 12 | "macos", 13 | "windows", 14 | "testsuite", 15 | "test" 16 | ], 17 | "use_appveyor" : 0, 18 | "use_codecov" : 0, 19 | "use_coveralls" : 0, 20 | "use_gh_actions" : 1, 21 | "use_travis" : 0 22 | }, 23 | "modules" : [ 24 | { 25 | "auth" : "ATOOMIC", 26 | "date" : "2017-02-01", 27 | "dist" : "Amazon-Dash-Button", 28 | "insecure_repo" : false, 29 | "name" : "Amazon-Dash-Button-0.11", 30 | "repo" : "https://github.com/atoomic/Amazon-Dash-Button", 31 | "repo_def_branch" : "master", 32 | "repo_name" : "Amazon-Dash-Button", 33 | "repo_owner" : "atoomic", 34 | "ver" : "0.11" 35 | }, 36 | { 37 | "auth" : "ATOOMIC", 38 | "bugtracker" : "https://github.com/atoomic/B-COW/issues", 39 | "date" : "2022-10-20", 40 | "dist" : "B-COW", 41 | "insecure_repo" : false, 42 | "name" : "B-COW-0.007", 43 | "repo" : "https://github.com/atoomic/B-COW.git", 44 | "repo_def_branch" : "master", 45 | "repo_name" : "B-COW", 46 | "repo_owner" : "atoomic", 47 | "uses_rt" : false, 48 | "ver" : "0.007" 49 | }, 50 | { 51 | "auth" : "ATOOMIC", 52 | "bugtracker" : "https://github.com/atoomic/Char-Replace/issues", 53 | "date" : "2019-01-30", 54 | "dist" : "Char-Replace", 55 | "insecure_repo" : false, 56 | "name" : "Char-Replace-0.004", 57 | "repo" : "https://github.com/atoomic/Char-Replace.git", 58 | "repo_def_branch" : "master", 59 | "repo_name" : "Char-Replace", 60 | "repo_owner" : "atoomic", 61 | "uses_rt" : false, 62 | "ver" : "0.004" 63 | }, 64 | { 65 | "auth" : "ATOOMIC", 66 | "bugtracker" : "https://github.com/atoomic/Check-GlobalPhase/issues", 67 | "date" : "2019-08-12", 68 | "dist" : "Check-GlobalPhase", 69 | "insecure_repo" : false, 70 | "name" : "Check-GlobalPhase-0.001", 71 | "repo" : "https://github.com/atoomic/Check-GlobalPhase.git", 72 | "repo_def_branch" : "master", 73 | "repo_name" : "Check-GlobalPhase", 74 | "repo_owner" : "atoomic", 75 | "uses_rt" : false, 76 | "ver" : "0.001" 77 | }, 78 | { 79 | "auth" : "ATOOMIC", 80 | "bugtracker" : "https://github.com/garu/Clone/issues", 81 | "date" : "2024-08-17", 82 | "dist" : "Clone", 83 | "insecure_repo" : true, 84 | "name" : "Clone-0.47", 85 | "repo" : "http://github.com/garu/Clone", 86 | "repo_def_branch" : "master", 87 | "repo_name" : "Clone", 88 | "repo_owner" : "garu", 89 | "uses_rt" : false, 90 | "ver" : "0.47" 91 | }, 92 | { 93 | "auth" : "ATOOMIC", 94 | "bugtracker" : "https://github.com/atoomic/Colon-Config/issues", 95 | "date" : "2018-12-28", 96 | "dist" : "Colon-Config", 97 | "insecure_repo" : false, 98 | "name" : "Colon-Config-0.004", 99 | "repo" : "https://github.com/atoomic/Colon-Config.git", 100 | "repo_def_branch" : "master", 101 | "repo_name" : "Colon-Config", 102 | "repo_owner" : "atoomic", 103 | "uses_rt" : false, 104 | "ver" : "0.004" 105 | }, 106 | { 107 | "auth" : "ATOOMIC", 108 | "bugtracker" : "https://github.com/Dual-Life/Devel-PPPort/issues", 109 | "date" : "2022-03-18", 110 | "dist" : "Devel-PPPort", 111 | "insecure_repo" : false, 112 | "name" : "Devel-PPPort-3.68", 113 | "repo" : "https://github.com/Dual-Life/Devel-PPPort", 114 | "repo_def_branch" : "master", 115 | "repo_name" : "Devel-PPPort", 116 | "repo_owner" : "Dual-Life", 117 | "uses_rt" : false, 118 | "ver" : "3.68" 119 | }, 120 | { 121 | "auth" : "ATOOMIC", 122 | "date" : "2018-07-13", 123 | "dist" : "Dist-Zilla-PluginBundle-ATOOMIC", 124 | "insecure_repo" : false, 125 | "name" : "Dist-Zilla-PluginBundle-ATOOMIC-1.00", 126 | "repo" : "https://github.com/atoomic/Dist-Zilla-PluginBundle-ATOOMIC", 127 | "repo_def_branch" : "master", 128 | "repo_name" : "Dist-Zilla-PluginBundle-ATOOMIC", 129 | "repo_owner" : "atoomic", 130 | "ver" : "1.00" 131 | }, 132 | { 133 | "auth" : "ATOOMIC", 134 | "bugtracker" : "https://github.com/atoomic/ExtUtils-MakeMaker-PPPort/issues", 135 | "date" : "2020-07-22", 136 | "dist" : "ExtUtils-MakeMaker-PPPort", 137 | "insecure_repo" : false, 138 | "name" : "ExtUtils-MakeMaker-PPPort-0.02", 139 | "repo" : "https://github.com/atoomic/ExtUtils-MakeMaker-PPPort.git", 140 | "repo_def_branch" : "master", 141 | "repo_name" : "ExtUtils-MakeMaker-PPPort", 142 | "repo_owner" : "atoomic", 143 | "uses_rt" : false, 144 | "ver" : "0.02" 145 | }, 146 | { 147 | "auth" : "ATOOMIC", 148 | "bugtracker" : "https://github.com/atoomic/FastGlob/issues", 149 | "date" : "2019-05-30", 150 | "dist" : "FastGlob", 151 | "insecure_repo" : false, 152 | "name" : "FastGlob-1.5", 153 | "repo" : "https://github.com/atoomic/FastGlob.git", 154 | "repo_def_branch" : "master", 155 | "repo_name" : "FastGlob", 156 | "repo_owner" : "atoomic", 157 | "uses_rt" : false, 158 | "ver" : "1.5" 159 | }, 160 | { 161 | "auth" : "ATOOMIC", 162 | "bugtracker" : "https://github.com/bricas/geo-ipfree/issues", 163 | "date" : "2022-02-01", 164 | "dist" : "Geo-IPfree", 165 | "insecure_repo" : false, 166 | "name" : "Geo-IPfree-1.160000", 167 | "repo" : "https://github.com/bricas/geo-ipfree.git", 168 | "repo_def_branch" : "master", 169 | "repo_name" : "geo-ipfree", 170 | "repo_owner" : "bricas", 171 | "uses_rt" : false, 172 | "ver" : "1.160000" 173 | }, 174 | { 175 | "auth" : "ATOOMIC", 176 | "bugtracker" : "https://github.com/mschilli/net-google-drive-simple/issues", 177 | "date" : "2022-04-14", 178 | "dist" : "Net-Google-Drive-Simple", 179 | "insecure_repo" : false, 180 | "name" : "Net-Google-Drive-Simple-3.02", 181 | "repo" : "https://github.com/mschilli/net-google-drive-simple", 182 | "repo_def_branch" : "master", 183 | "repo_name" : "net-google-drive-simple", 184 | "repo_owner" : "mschilli", 185 | "uses_rt" : false, 186 | "ver" : "3.02" 187 | }, 188 | { 189 | "auth" : "ATOOMIC", 190 | "bugtracker" : "https://github.com/atoomic/Net-Whois-IANA/issues", 191 | "date" : "2022-03-10", 192 | "dist" : "Net-Whois-IANA", 193 | "insecure_repo" : false, 194 | "name" : "Net-Whois-IANA-0.49", 195 | "repo" : "https://github.com/atoomic/Net-Whois-IANA", 196 | "repo_def_branch" : "master", 197 | "repo_name" : "Net-Whois-IANA", 198 | "repo_owner" : "atoomic", 199 | "uses_rt" : false, 200 | "ver" : "0.49" 201 | }, 202 | { 203 | "auth" : "ATOOMIC", 204 | "bugtracker" : "https://github.com/mschilli/oauth-cmdline/issues", 205 | "date" : "2022-01-28", 206 | "dist" : "OAuth-Cmdline", 207 | "insecure_repo" : false, 208 | "name" : "OAuth-Cmdline-0.07", 209 | "repo" : "https://github.com/mschilli/oauth-cmdline.git", 210 | "repo_def_branch" : "master", 211 | "repo_name" : "oauth-cmdline", 212 | "repo_owner" : "mschilli", 213 | "uses_rt" : false, 214 | "ver" : "0.07" 215 | }, 216 | { 217 | "auth" : "ATOOMIC", 218 | "bugtracker" : "https://github.com/atoomic/OpenStack-MetaAPI/issues", 219 | "date" : "2019-04-29", 220 | "dist" : "OpenStack-MetaAPI", 221 | "insecure_repo" : false, 222 | "name" : "OpenStack-MetaAPI-0.003", 223 | "repo" : "https://github.com/atoomic/OpenStack-MetaAPI.git", 224 | "repo_def_branch" : "master", 225 | "repo_name" : "OpenStack-MetaAPI", 226 | "repo_owner" : "atoomic", 227 | "uses_rt" : false, 228 | "ver" : "0.003" 229 | }, 230 | { 231 | "auth" : "ATOOMIC", 232 | "bugtracker" : "https://github.com/CpanelInc/Overload-FileCheck/issues", 233 | "date" : "2022-02-23", 234 | "dist" : "Overload-FileCheck", 235 | "insecure_repo" : false, 236 | "name" : "Overload-FileCheck-0.013", 237 | "repo" : "https://github.com/CpanelInc/Overload-FileCheck.git", 238 | "repo_def_branch" : "master", 239 | "repo_name" : "Overload-FileCheck", 240 | "repo_owner" : "CpanelInc", 241 | "uses_rt" : false, 242 | "ver" : "0.013" 243 | }, 244 | { 245 | "auth" : "ATOOMIC", 246 | "bugtracker" : "https://github.com/atoomic/Parallel-Subs/issues", 247 | "date" : "2018-03-20", 248 | "dist" : "Parallel-Subs", 249 | "insecure_repo" : false, 250 | "name" : "Parallel-Subs-0.002", 251 | "repo" : "https://github.com/atoomic/Parallel-Subs", 252 | "repo_def_branch" : "master", 253 | "repo_name" : "Parallel-Subs", 254 | "repo_owner" : "atoomic", 255 | "uses_rt" : false, 256 | "ver" : "0.002" 257 | }, 258 | { 259 | "auth" : "ATOOMIC", 260 | "bugtracker" : "https://github.com/atoomic/Perl-Critic-Policy-PreferredModules/issues", 261 | "date" : "2022-01-24", 262 | "dist" : "Perl-Critic-Policy-PreferredModules", 263 | "insecure_repo" : false, 264 | "name" : "Perl-Critic-Policy-PreferredModules-0.004", 265 | "repo" : "https://github.com/atoomic/Perl-Critic-Policy-PreferredModules.git", 266 | "repo_def_branch" : "master", 267 | "repo_name" : "Perl-Critic-Policy-PreferredModules", 268 | "repo_owner" : "atoomic", 269 | "uses_rt" : false, 270 | "ver" : "0.004" 271 | }, 272 | { 273 | "auth" : "ATOOMIC", 274 | "bugtracker" : "https://github.com/kohts/Schedule--Cron--Events/issues", 275 | "date" : "2020-01-20", 276 | "dist" : "Schedule-Cron-Events", 277 | "insecure_repo" : false, 278 | "name" : "Schedule-Cron-Events-1.96", 279 | "repo" : "https://github.com/kohts/Schedule--Cron--Events.git", 280 | "repo_def_branch" : "master", 281 | "repo_name" : "Schedule--Cron--Events", 282 | "repo_owner" : "kohts", 283 | "uses_rt" : false, 284 | "ver" : "1.96" 285 | }, 286 | { 287 | "auth" : "ATOOMIC", 288 | "date" : "2020-03-31", 289 | "dist" : "Simple-Accessor", 290 | "insecure_repo" : false, 291 | "name" : "Simple-Accessor-1.13", 292 | "repo" : "https://github.com/atoomic/Simple-Accessor", 293 | "repo_def_branch" : "master", 294 | "repo_name" : "Simple-Accessor", 295 | "repo_owner" : "atoomic", 296 | "ver" : "1.13" 297 | }, 298 | { 299 | "auth" : "ATOOMIC", 300 | "bugtracker" : "https://github.com/atoomic/Slack-WebHook/issues", 301 | "date" : "2020-09-01", 302 | "dist" : "Slack-WebHook", 303 | "insecure_repo" : false, 304 | "name" : "Slack-WebHook-0.003", 305 | "repo" : "https://github.com/atoomic/Slack-WebHook.git", 306 | "repo_def_branch" : "master", 307 | "repo_name" : "Slack-WebHook", 308 | "repo_owner" : "atoomic", 309 | "uses_rt" : false, 310 | "ver" : "0.003" 311 | }, 312 | { 313 | "auth" : "ATOOMIC", 314 | "bugtracker" : "https://github.com/atoomic/Test-Mojo-Role-Debug-JSON/issues", 315 | "date" : "2020-03-27", 316 | "dist" : "Test-Mojo-Role-Debug-JSON", 317 | "insecure_repo" : false, 318 | "name" : "Test-Mojo-Role-Debug-JSON-0.005", 319 | "repo" : "https://github.com/atoomic/Test-Mojo-Role-Debug-JSON", 320 | "repo_def_branch" : "master", 321 | "repo_name" : "Test-Mojo-Role-Debug-JSON", 322 | "repo_owner" : "atoomic", 323 | "uses_rt" : false, 324 | "ver" : "0.005" 325 | }, 326 | { 327 | "auth" : "ATOOMIC", 328 | "bugtracker" : "https://github.com/Perl/perl5/issues", 329 | "date" : "2020-08-10", 330 | "dist" : "Time-HiRes", 331 | "insecure_repo" : false, 332 | "name" : "Time-HiRes-1.9764", 333 | "repo" : "https://github.com/Perl/perl5.git", 334 | "repo_def_branch" : "blead", 335 | "repo_name" : "perl5", 336 | "repo_owner" : "Perl", 337 | "uses_rt" : false, 338 | "ver" : "1.9764" 339 | }, 340 | { 341 | "auth" : "ATOOMIC", 342 | "bugtracker" : "https://github.com/atoomic/perl-TimeDate/issues", 343 | "date" : "2020-05-19", 344 | "dist" : "TimeDate", 345 | "insecure_repo" : false, 346 | "name" : "TimeDate-2.33", 347 | "repo" : "https://github.com/atoomic/perl-TimeDate", 348 | "repo_def_branch" : "master", 349 | "repo_name" : "perl-TimeDate", 350 | "repo_owner" : "atoomic", 351 | "uses_rt" : false, 352 | "ver" : "2.33" 353 | }, 354 | { 355 | "auth" : "ATOOMIC", 356 | "bugtracker" : "https://github.com/atoomic/XS-Logger/issues", 357 | "date" : "2018-05-21", 358 | "dist" : "XS-Logger", 359 | "insecure_repo" : false, 360 | "name" : "XS-Logger-0.005", 361 | "repo" : "https://github.com/atoomic/XS-Logger.git", 362 | "repo_def_branch" : "master", 363 | "repo_name" : "XS-Logger", 364 | "repo_owner" : "atoomic", 365 | "uses_rt" : false, 366 | "ver" : "0.005" 367 | }, 368 | { 369 | "auth" : "ATOOMIC", 370 | "bugtracker" : "https://github.com/atoomic/XString/issues", 371 | "date" : "2020-10-20", 372 | "dist" : "XString", 373 | "insecure_repo" : false, 374 | "name" : "XString-0.005", 375 | "repo" : "https://github.com/atoomic/XString.git", 376 | "repo_def_branch" : "master", 377 | "repo_name" : "XString", 378 | "repo_owner" : "atoomic", 379 | "uses_rt" : false, 380 | "ver" : "0.005" 381 | } 382 | ], 383 | "sort" : { 384 | "column" : 0, 385 | "direction" : "asc" 386 | } 387 | } 388 | -------------------------------------------------------------------------------- /authors/data/BYTEROCK/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "BYTEROCK", 4 | "github" : "byterock", 5 | "gravatar" : "https://secure.gravatar.com/avatar/48b6c6e939091d3232825ec95a816128?s=130&d=identicon", 6 | "name" : "John Scoles" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 1, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "BYTEROCK", 23 | "bugtracker" : "https://github.com/byterock/Mojolicious_Command_generate_routes_restsful/issues", 24 | "date" : "2016-12-12", 25 | "dist" : "Mojolicious-Command-generate-routes_restsful", 26 | "insecure_repo" : false, 27 | "name" : "Mojolicious-Command-generate-routes_restsful-0.02", 28 | "repo" : "https://github.com/byterock/Mojolicious_Command_generate_routes_restsful", 29 | "repo_def_branch" : "", 30 | "repo_name" : "Mojolicious_Command_generate_routes_restsful", 31 | "repo_owner" : "byterock", 32 | "uses_rt" : false, 33 | "ver" : "0.02" 34 | }, 35 | { 36 | "auth" : "BYTEROCK", 37 | "bugtracker" : "https://github.com/byterock/Mojolicious_Command_generate_routes_restsful_just_routes/issues", 38 | "date" : "2016-12-12", 39 | "dist" : "Mojolicious-Command-generate-routes_restsful_just_routes", 40 | "insecure_repo" : false, 41 | "name" : "Mojolicious-Command-generate-routes_restsful_just_routes-0.01", 42 | "repo" : "https://github.com/byterock/Mojolicious_Command_generate_routes_restsful", 43 | "repo_def_branch" : "", 44 | "repo_name" : "Mojolicious_Command_generate_routes_restsful", 45 | "repo_owner" : "byterock", 46 | "uses_rt" : false, 47 | "ver" : "0.01" 48 | }, 49 | { 50 | "auth" : "BYTEROCK", 51 | "bugtracker" : "https://github.com/byterock/mojolicious-plugin-authorization/issues", 52 | "date" : "2021-05-19", 53 | "dist" : "Mojolicious-Plugin-Authorization", 54 | "insecure_repo" : false, 55 | "name" : "Mojolicious-Plugin-Authorization-1.06", 56 | "repo" : "https://github.com/byterock/mojolicious-plugin-authorization", 57 | "repo_def_branch" : "master", 58 | "repo_name" : "mojolicious-plugin-authorization", 59 | "repo_owner" : "byterock", 60 | "uses_rt" : false, 61 | "ver" : "1.06" 62 | }, 63 | { 64 | "auth" : "BYTEROCK", 65 | "bugtracker" : "https://github.com/byterock/mojolicious-plugin-routes-restful/issues", 66 | "date" : "2023-01-30", 67 | "dist" : "Mojolicious-Plugin-Routes-Restful", 68 | "insecure_repo" : false, 69 | "name" : "Mojolicious-Plugin-Routes-Restful-0.04", 70 | "repo" : "https://github.com/byterock/mojolicious-plugin-routes-restful", 71 | "repo_def_branch" : "master", 72 | "repo_name" : "mojolicious-plugin-routes-restful", 73 | "repo_owner" : "byterock", 74 | "uses_rt" : false, 75 | "ver" : "0.04" 76 | }, 77 | { 78 | "auth" : "BYTEROCK", 79 | "date" : "2014-03-22", 80 | "dist" : "Orignal", 81 | "insecure_repo" : false, 82 | "name" : "Orignal-0.04", 83 | "repo" : "https://github.com/byterock/Orignal", 84 | "repo_def_branch" : "master", 85 | "repo_name" : "Orignal", 86 | "repo_owner" : "byterock", 87 | "ver" : "0.04" 88 | } 89 | ], 90 | "sort" : { 91 | "column" : 0, 92 | "direction" : "asc" 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /authors/data/CROMEDOME/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "CROMEDOME", 4 | "github" : "cromedome", 5 | "gravatar" : "https://secure.gravatar.com/avatar/fcf781200bb62080ccf106bac3d24937.png", 6 | "name" : "Jason A. Crome" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 0, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "CROMEDOME", 23 | "date" : "2011-01-06", 24 | "dist" : "CGI-Application-Plugin-CAPTCHA", 25 | "insecure_repo" : false, 26 | "name" : "CGI-Application-Plugin-CAPTCHA-0.04", 27 | "repo" : "https://github.com/cromedome/cgi-application-plugin-captcha", 28 | "repo_def_branch" : "master", 29 | "repo_name" : "cgi-application-plugin-captcha", 30 | "repo_owner" : "cromedome", 31 | "ver" : "0.04" 32 | }, 33 | { 34 | "auth" : "CROMEDOME", 35 | "bugtracker" : "https://github.com/PerlDancer/dancer-debug/issues", 36 | "date" : "2024-04-14", 37 | "dist" : "Dancer-Debug", 38 | "insecure_repo" : false, 39 | "name" : "Dancer-Debug-0.04", 40 | "repo" : "git://github.com/PerlDancer/dancer-debug.git", 41 | "repo_def_branch" : "main", 42 | "repo_name" : "dancer-debug", 43 | "repo_owner" : "PerlDancer", 44 | "uses_rt" : false, 45 | "ver" : "0.04" 46 | }, 47 | { 48 | "auth" : "CROMEDOME", 49 | "bugtracker" : "https://github.com/cromedome/Dancer-Plugin-reCAPTCHA/issues", 50 | "date" : "2018-11-10", 51 | "dist" : "Dancer-Plugin-reCAPTCHA", 52 | "insecure_repo" : false, 53 | "name" : "Dancer-Plugin-reCAPTCHA-0.91", 54 | "repo" : "https://github.com/cromedome/Dancer-Plugin-reCAPTCHA", 55 | "repo_def_branch" : "master", 56 | "repo_name" : "Dancer-Plugin-reCAPTCHA", 57 | "repo_owner" : "cromedome", 58 | "uses_rt" : false, 59 | "ver" : "0.91" 60 | }, 61 | { 62 | "auth" : "CROMEDOME", 63 | "bugtracker" : "https://github.com/PerlDancer/dancer-session-psgi/issues", 64 | "date" : "2024-04-14", 65 | "dist" : "Dancer-Session-PSGI", 66 | "insecure_repo" : false, 67 | "name" : "Dancer-Session-PSGI-0.02", 68 | "repo" : "git://github.com/PerlDancer/dancer-session-psgi.git", 69 | "repo_def_branch" : "main", 70 | "repo_name" : "dancer-session-psgi", 71 | "repo_owner" : "PerlDancer", 72 | "uses_rt" : false, 73 | "ver" : "0.02" 74 | }, 75 | { 76 | "auth" : "CROMEDOME", 77 | "bugtracker" : "https://github.com/PerlDancer/dancer-template-xslate/issues", 78 | "date" : "2024-04-14", 79 | "dist" : "Dancer-Template-Xslate", 80 | "insecure_repo" : false, 81 | "name" : "Dancer-Template-Xslate-0.04", 82 | "repo" : "https://github.com/PerlDancer/dancer-template-xslate", 83 | "repo_def_branch" : "main", 84 | "repo_name" : "dancer-template-xslate", 85 | "repo_owner" : "PerlDancer", 86 | "uses_rt" : false, 87 | "ver" : "0.04" 88 | }, 89 | { 90 | "auth" : "CROMEDOME", 91 | "bugtracker" : "https://github.com/PerlDancer/Dancer2/issues", 92 | "date" : "2024-07-18", 93 | "dist" : "Dancer2", 94 | "insecure_repo" : false, 95 | "name" : "Dancer2-1.1.1", 96 | "repo" : "https://github.com/PerlDancer/Dancer2", 97 | "repo_def_branch" : "main", 98 | "repo_name" : "Dancer2", 99 | "repo_owner" : "PerlDancer", 100 | "uses_rt" : false, 101 | "ver" : "1.1.1" 102 | }, 103 | { 104 | "auth" : "CROMEDOME", 105 | "bugtracker" : "https://github.com/cromedome/Dancer2-Logger-Log4perl/issues", 106 | "date" : "2023-12-17", 107 | "dist" : "Dancer2-Logger-Log4perl", 108 | "insecure_repo" : false, 109 | "name" : "Dancer2-Logger-Log4perl-0.07", 110 | "repo" : "https://github.com/cromedome/Dancer2-Logger-Log4perl", 111 | "repo_def_branch" : "master", 112 | "repo_name" : "Dancer2-Logger-Log4perl", 113 | "repo_owner" : "cromedome", 114 | "uses_rt" : false, 115 | "ver" : "0.07" 116 | }, 117 | { 118 | "auth" : "CROMEDOME", 119 | "bugtracker" : "https://github.com/PerlDancer/Dancer2-Plugin-Ajax/issues", 120 | "date" : "2018-11-13", 121 | "dist" : "Dancer2-Plugin-Ajax", 122 | "insecure_repo" : false, 123 | "name" : "Dancer2-Plugin-Ajax-0.400000", 124 | "repo" : "https://github.com/PerlDancer/Dancer2-Plugin-Ajax", 125 | "repo_def_branch" : "master", 126 | "repo_name" : "Dancer2-Plugin-Ajax", 127 | "repo_owner" : "PerlDancer", 128 | "uses_rt" : false, 129 | "ver" : "0.400000" 130 | }, 131 | { 132 | "auth" : "CROMEDOME", 133 | "bugtracker" : "https://github.com/cromedome/Dancer2-Plugin-Minion/issues", 134 | "date" : "2024-07-06", 135 | "dist" : "Dancer2-Plugin-Minion", 136 | "insecure_repo" : false, 137 | "name" : "Dancer2-Plugin-Minion-1.0.0", 138 | "repo" : "https://github.com/cromedome/Dancer2-Plugin-Minion", 139 | "repo_def_branch" : "main", 140 | "repo_name" : "Dancer2-Plugin-Minion", 141 | "repo_owner" : "cromedome", 142 | "uses_rt" : false, 143 | "ver" : "1.0.0" 144 | }, 145 | { 146 | "auth" : "CROMEDOME", 147 | "bugtracker" : "https://github.com/PerlDancer/dancer2-plugin-queue/issues", 148 | "date" : "2016-01-26", 149 | "dist" : "Dancer2-Plugin-Queue", 150 | "insecure_repo" : false, 151 | "name" : "Dancer2-Plugin-Queue-0.006", 152 | "repo" : "https://github.com/PerlDancer/dancer2-plugin-queue", 153 | "repo_def_branch" : "master", 154 | "repo_name" : "dancer2-plugin-queue", 155 | "repo_owner" : "PerlDancer", 156 | "uses_rt" : false, 157 | "ver" : "0.006" 158 | }, 159 | { 160 | "auth" : "CROMEDOME", 161 | "bugtracker" : "https://github.com/dagolden/dancer2-plugin-syntax-getpost/issues", 162 | "date" : "2023-12-13", 163 | "dist" : "Dancer2-Plugin-Syntax-GetPost", 164 | "insecure_repo" : false, 165 | "name" : "Dancer2-Plugin-Syntax-GetPost-0.003", 166 | "repo" : "https://github.com/dagolden/dancer2-plugin-syntax-getpost", 167 | "repo_def_branch" : "main", 168 | "repo_name" : "dancer2-plugin-syntax-getpost", 169 | "repo_owner" : "dagolden", 170 | "uses_rt" : false, 171 | "ver" : "0.002" 172 | }, 173 | { 174 | "auth" : "CROMEDOME", 175 | "bugtracker" : "https://github.com/cromedome/Dancer2-Plugin-Syntax-ParamKeywords/issues", 176 | "date" : "2021-05-14", 177 | "dist" : "Dancer2-Plugin-Syntax-ParamKeywords", 178 | "insecure_repo" : false, 179 | "name" : "Dancer2-Plugin-Syntax-ParamKeywords-0.2.0", 180 | "repo" : "https://github.com/cromedome/Dancer2-Plugin-Syntax-ParamKeywords", 181 | "repo_def_branch" : "main", 182 | "repo_name" : "Dancer2-Plugin-Syntax-ParamKeywords", 183 | "repo_owner" : "cromedome", 184 | "uses_rt" : false, 185 | "ver" : "0.2.0" 186 | }, 187 | { 188 | "auth" : "CROMEDOME", 189 | "bugtracker" : "https://github.com/cromedome/Dancer2-Session-CHI/issues", 190 | "date" : "2023-02-05", 191 | "dist" : "Dancer2-Session-CHI", 192 | "insecure_repo" : false, 193 | "name" : "Dancer2-Session-CHI-0.05", 194 | "repo" : "https://github.com/cromedome/Dancer2-Session-CHI", 195 | "repo_def_branch" : "master", 196 | "repo_name" : "Dancer2-Session-CHI", 197 | "repo_owner" : "cromedome", 198 | "uses_rt" : false, 199 | "ver" : "0.05" 200 | }, 201 | { 202 | "auth" : "CROMEDOME", 203 | "bugtracker" : "https://github.com/PerlDancer/dancer2-session-json/issues", 204 | "date" : "2020-04-10", 205 | "dist" : "Dancer2-Session-JSON", 206 | "insecure_repo" : false, 207 | "name" : "Dancer2-Session-JSON-0.003", 208 | "repo" : "https://github.com/PerlDancer/dancer2-session-json", 209 | "repo_def_branch" : "master", 210 | "repo_name" : "dancer2-session-json", 211 | "repo_owner" : "PerlDancer", 212 | "uses_rt" : false, 213 | "ver" : "0.003" 214 | }, 215 | { 216 | "auth" : "CROMEDOME", 217 | "bugtracker" : "https://github.com/PerlDancer/dancer2-session-mongodb/issues", 218 | "date" : "2016-08-17", 219 | "dist" : "Dancer2-Session-MongoDB", 220 | "insecure_repo" : false, 221 | "name" : "Dancer2-Session-MongoDB-0.004", 222 | "repo" : "https://github.com/PerlDancer/dancer2-session-mongodb", 223 | "repo_def_branch" : "master", 224 | "repo_name" : "dancer2-session-mongodb", 225 | "repo_owner" : "PerlDancer", 226 | "uses_rt" : false, 227 | "ver" : "0.004" 228 | }, 229 | { 230 | "auth" : "CROMEDOME", 231 | "bugtracker" : "https://github.com/PerlDancer/dancer2-template-xslate/issues", 232 | "date" : "2023-02-05", 233 | "dist" : "Dancer2-Template-Xslate", 234 | "insecure_repo" : false, 235 | "name" : "Dancer2-Template-Xslate-v0.2.0", 236 | "repo" : "git://github.com/PerlDancer/dancer2-template-xslate.git", 237 | "repo_def_branch" : "master", 238 | "repo_name" : "dancer2-template-xslate", 239 | "repo_owner" : "PerlDancer", 240 | "uses_rt" : false, 241 | "ver" : "v0.2.0" 242 | } 243 | ], 244 | "sort" : { 245 | "column" : 0, 246 | "direction" : "asc" 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /authors/data/DAVECROSS/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "DAVECROSS", 4 | "github" : "davorg", 5 | "gravatar" : "https://secure.gravatar.com/avatar/d9f8bf9efe6afedec1b5b4ea24301933?s=130&d=identicon", 6 | "name" : "Dave Cross" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 1, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "DAVECROSS", 23 | "bugtracker" : "https://github.com/davorg-cpan/amazon-sites/issues", 24 | "date" : "2024-08-30", 25 | "dist" : "Amazon-Sites", 26 | "insecure_repo" : false, 27 | "name" : "Amazon-Sites-0.1.7", 28 | "repo" : "https://github.com/davorg-cpan/amazon-sites", 29 | "repo_def_branch" : "main", 30 | "repo_name" : "amazon-sites", 31 | "repo_owner" : "davorg-cpan", 32 | "uses_rt" : false, 33 | "ver" : "v0.1.7" 34 | }, 35 | { 36 | "auth" : "DAVECROSS", 37 | "bugtracker" : "https://github.com/davorg-cpan/app-aphra/issues", 38 | "date" : "2024-08-13", 39 | "dist" : "App-Aphra", 40 | "insecure_repo" : false, 41 | "name" : "App-Aphra-0.2.1", 42 | "repo" : "https://github.com/davorg-cpan/app-aphra", 43 | "repo_def_branch" : "main", 44 | "repo_name" : "app-aphra", 45 | "repo_owner" : "davorg-cpan", 46 | "uses_rt" : false, 47 | "ver" : "v0.2.1" 48 | }, 49 | { 50 | "auth" : "DAVECROSS", 51 | "bugtracker" : "https://github.com/davorg-cpan/app-cpanmodulesite/issues", 52 | "date" : "2024-01-24", 53 | "dist" : "App-CPANModuleSite", 54 | "insecure_repo" : false, 55 | "name" : "App-CPANModuleSite-0.0.10", 56 | "repo" : "https://github.com/davorg-cpan/app-cpanmodulesite", 57 | "repo_def_branch" : "main", 58 | "repo_name" : "app-cpanmodulesite", 59 | "repo_owner" : "davorg-cpan", 60 | "uses_rt" : false, 61 | "ver" : "v0.0.10" 62 | }, 63 | { 64 | "auth" : "DAVECROSS", 65 | "bugtracker" : "https://github.com/davorg/app-httpthis/issues", 66 | "date" : "2023-06-21", 67 | "dist" : "App-HTTPThis", 68 | "insecure_repo" : false, 69 | "name" : "App-HTTPThis-0.009", 70 | "repo" : "https://github.com/davorg/app-httpthis", 71 | "repo_def_branch" : "master", 72 | "repo_name" : "app-httpthis", 73 | "repo_owner" : "davorg", 74 | "uses_rt" : false, 75 | "ver" : "0.009" 76 | }, 77 | { 78 | "auth" : "DAVECROSS", 79 | "bugtracker" : "https://github.com/davorg-cpan/app-laststats/issues", 80 | "date" : "2024-08-29", 81 | "dist" : "App-LastStats", 82 | "insecure_repo" : false, 83 | "name" : "App-LastStats-0.0.8", 84 | "repo" : "https://github.com/davorg-cpan/app-laststats", 85 | "repo_def_branch" : "main", 86 | "repo_name" : "app-laststats", 87 | "repo_owner" : "davorg-cpan", 88 | "uses_rt" : false, 89 | "ver" : "v0.0.8" 90 | }, 91 | { 92 | "auth" : "DAVECROSS", 93 | "bugtracker" : "https://github.com/davorg-cpan/app-mergecal/issues", 94 | "date" : "2024-08-18", 95 | "dist" : "App-MergeCal", 96 | "insecure_repo" : false, 97 | "name" : "App-MergeCal-0.0.5", 98 | "repo" : "https://github.com/davorg-cpan/app-mergecal", 99 | "repo_def_branch" : "main", 100 | "repo_name" : "app-mergecal", 101 | "repo_owner" : "davorg-cpan", 102 | "uses_rt" : false, 103 | "ver" : "v0.0.5" 104 | }, 105 | { 106 | "auth" : "DAVECROSS", 107 | "bugtracker" : "https://github.com/davorg/array-compare/issues", 108 | "date" : "2020-12-21", 109 | "dist" : "Array-Compare", 110 | "insecure_repo" : false, 111 | "name" : "Array-Compare-v3.0.8", 112 | "repo" : "https://github.com/davorg/array-compare", 113 | "repo_def_branch" : "master", 114 | "repo_name" : "array-compare", 115 | "repo_owner" : "davorg", 116 | "uses_rt" : false, 117 | "ver" : "v3.0.8" 118 | }, 119 | { 120 | "auth" : "DAVECROSS", 121 | "bugtracker" : "https://github.com/davorg/audiofile-info-mp3-id3lib/issues", 122 | "date" : "2021-03-02", 123 | "dist" : "AudioFile-Info-MP3-ID3Lib", 124 | "insecure_repo" : false, 125 | "name" : "AudioFile-Info-MP3-ID3Lib-v1.8.1", 126 | "repo" : "https://github.com/davorg/audiofile-info-mp3-id3lib", 127 | "repo_def_branch" : "master", 128 | "repo_name" : "audiofile-info-mp3-id3lib", 129 | "repo_owner" : "davorg", 130 | "uses_rt" : false, 131 | "ver" : "v1.8.1" 132 | }, 133 | { 134 | "auth" : "DAVECROSS", 135 | "bugtracker" : "https://github.com/davorg/audiofile-info-mp3-info/issues", 136 | "date" : "2024-01-04", 137 | "dist" : "AudioFile-Info-MP3-Info", 138 | "insecure_repo" : false, 139 | "name" : "AudioFile-Info-MP3-Info-v1.5.1", 140 | "repo" : "https://github.com/davorg/audiofile-info-mp3-info", 141 | "repo_def_branch" : "master", 142 | "repo_name" : "audiofile-info-mp3-info", 143 | "repo_owner" : "davorg", 144 | "uses_rt" : false, 145 | "ver" : "v1.5.1" 146 | }, 147 | { 148 | "auth" : "DAVECROSS", 149 | "bugtracker" : "https://github.com/davorg/audiofile-info-mp3-tag/issues", 150 | "date" : "2023-12-28", 151 | "dist" : "AudioFile-Info-MP3-Tag", 152 | "insecure_repo" : false, 153 | "name" : "AudioFile-Info-MP3-Tag-v1.6.4", 154 | "repo" : "https://github.com/davorg/audiofile-info-mp3-tag", 155 | "repo_def_branch" : "master", 156 | "repo_name" : "audiofile-info-mp3-tag", 157 | "repo_owner" : "davorg", 158 | "uses_rt" : false, 159 | "ver" : "v1.6.4" 160 | }, 161 | { 162 | "auth" : "DAVECROSS", 163 | "bugtracker" : "https://github.com/davorg/audiofile-info-ogg-vorbis-header-pureperl/issues", 164 | "date" : "2021-01-23", 165 | "dist" : "AudioFile-Info-Ogg-Vorbis-Header-PurePerl", 166 | "insecure_repo" : false, 167 | "name" : "AudioFile-Info-Ogg-Vorbis-Header-PurePerl-v1.5.5", 168 | "repo" : "https://github.com/davorg/audiofile-info-ogg-vorbis-header-pureperl", 169 | "repo_def_branch" : "master", 170 | "repo_name" : "audiofile-info-ogg-vorbis-header-pureperl", 171 | "repo_owner" : "davorg", 172 | "uses_rt" : false, 173 | "ver" : "v1.5.5" 174 | }, 175 | { 176 | "auth" : "DAVECROSS", 177 | "bugtracker" : "https://github.com/davorg/audiofile-info-ogg-vorbis-header/issues", 178 | "date" : "2021-01-04", 179 | "dist" : "AudioFile-Info-Ogg-Vorbis-Header", 180 | "insecure_repo" : false, 181 | "name" : "AudioFile-Info-Ogg-Vorbis-Header-v1.8.3", 182 | "repo" : "https://github.com/davorg/audiofile-info-ogg-vorbis-header", 183 | "repo_def_branch" : "master", 184 | "repo_name" : "audiofile-info-ogg-vorbis-header", 185 | "repo_owner" : "davorg", 186 | "uses_rt" : false, 187 | "ver" : "v1.8.3" 188 | }, 189 | { 190 | "auth" : "DAVECROSS", 191 | "bugtracker" : "https://github.com/davorg/audiofile-info/issues", 192 | "date" : "2021-01-04", 193 | "dist" : "AudioFile-Info", 194 | "insecure_repo" : false, 195 | "name" : "AudioFile-Info-v2.0.2", 196 | "repo" : "https://github.com/davorg/audiofile-info", 197 | "repo_def_branch" : "master", 198 | "repo_name" : "audiofile-info", 199 | "repo_owner" : "davorg", 200 | "uses_rt" : false, 201 | "ver" : "v2.0.2" 202 | }, 203 | { 204 | "auth" : "DAVECROSS", 205 | "bugtracker" : "https://github.com/davorg-cpan/calendar-simple/issues", 206 | "date" : "2024-05-04", 207 | "dist" : "Calendar-Simple", 208 | "insecure_repo" : false, 209 | "name" : "Calendar-Simple-v2.1.0", 210 | "repo" : "https://github.com/davorg-cpan/calendar-simple", 211 | "repo_def_branch" : "master", 212 | "repo_name" : "calendar-simple", 213 | "repo_owner" : "davorg-cpan", 214 | "uses_rt" : false, 215 | "ver" : "v2.1.0" 216 | }, 217 | { 218 | "auth" : "DAVECROSS", 219 | "date" : "2022-10-18", 220 | "dist" : "Feed-Find", 221 | "insecure_repo" : false, 222 | "name" : "Feed-Find-0.13", 223 | "repo" : "git://github.com/davorg/Feed-Find.git", 224 | "repo_def_branch" : "master", 225 | "repo_name" : "Feed-Find", 226 | "repo_owner" : "davorg", 227 | "ver" : "0.13" 228 | }, 229 | { 230 | "auth" : "DAVECROSS", 231 | "bugtracker" : "https://github.com/davorg/genealogy-ahnentafel/issues", 232 | "date" : "2021-01-22", 233 | "dist" : "Genealogy-Ahnentafel", 234 | "insecure_repo" : false, 235 | "name" : "Genealogy-Ahnentafel-1.0.3", 236 | "repo" : "https://github.com/davorg/genealogy-ahnentafel", 237 | "repo_def_branch" : "master", 238 | "repo_name" : "genealogy-ahnentafel", 239 | "repo_owner" : "davorg", 240 | "uses_rt" : false, 241 | "ver" : "v1.0.3" 242 | }, 243 | { 244 | "auth" : "DAVECROSS", 245 | "bugtracker" : "https://github.com/davorg/genealogy-ancestorchart/issues", 246 | "date" : "2022-02-15", 247 | "dist" : "Genealogy-AncestorChart", 248 | "insecure_repo" : false, 249 | "name" : "Genealogy-AncestorChart-0.0.2", 250 | "repo" : "https://github.com/davorg/genealogy-ancestorchart", 251 | "repo_def_branch" : "main", 252 | "repo_name" : "genealogy-ancestorchart", 253 | "repo_owner" : "davorg", 254 | "uses_rt" : false, 255 | "ver" : "v0.0.2" 256 | }, 257 | { 258 | "auth" : "DAVECROSS", 259 | "bugtracker" : "https://github.com/davorg/genealogy-relationship/issues", 260 | "date" : "2023-05-24", 261 | "dist" : "Genealogy-Relationship", 262 | "insecure_repo" : false, 263 | "name" : "Genealogy-Relationship-0.2.0", 264 | "repo" : "https://github.com/davorg/genealogy-relationship", 265 | "repo_def_branch" : "master", 266 | "repo_name" : "genealogy-relationship", 267 | "repo_owner" : "davorg", 268 | "uses_rt" : false, 269 | "ver" : "v0.2.0" 270 | }, 271 | { 272 | "auth" : "DAVECROSS", 273 | "bugtracker" : "https://github.com/tokuhirom/HTML-TreeBuilder-LibXML/issues", 274 | "date" : "2024-06-20", 275 | "dist" : "HTML-TreeBuilder-LibXML", 276 | "insecure_repo" : false, 277 | "name" : "HTML-TreeBuilder-LibXML-0.28", 278 | "repo" : "https://github.com/tokuhirom/HTML-TreeBuilder-LibXML", 279 | "repo_def_branch" : "master", 280 | "repo_name" : "HTML-TreeBuilder-LibXML", 281 | "repo_owner" : "tokuhirom", 282 | "uses_rt" : false, 283 | "ver" : "0.28" 284 | }, 285 | { 286 | "auth" : "DAVECROSS", 287 | "bugtracker" : "https://github.com/davorg/moox-role-json_ld/issues", 288 | "date" : "2021-06-06", 289 | "dist" : "MooX-Role-JSON_LD", 290 | "insecure_repo" : false, 291 | "name" : "MooX-Role-JSON_LD-1.0.1", 292 | "repo" : "https://github.com/davorg/moox-role-json_ld", 293 | "repo_def_branch" : "master", 294 | "repo_name" : "moox-role-json_ld", 295 | "repo_owner" : "davorg", 296 | "uses_rt" : false, 297 | "ver" : "v1.0.1" 298 | }, 299 | { 300 | "auth" : "DAVECROSS", 301 | "bugtracker" : "https://github.com/davorg/net-songkick/issues", 302 | "date" : "2023-07-27", 303 | "dist" : "Net-Songkick", 304 | "insecure_repo" : false, 305 | "name" : "Net-Songkick-v1.0.8", 306 | "repo" : "https://github.com/davorg/net-songkick", 307 | "repo_def_branch" : "master", 308 | "repo_name" : "net-songkick", 309 | "repo_owner" : "davorg", 310 | "uses_rt" : false, 311 | "ver" : "v1.0.8" 312 | }, 313 | { 314 | "auth" : "DAVECROSS", 315 | "bugtracker" : "https://github.com/p5-number-fraction/number-fraction/issues", 316 | "date" : "2024-02-25", 317 | "dist" : "Number-Fraction", 318 | "insecure_repo" : false, 319 | "name" : "Number-Fraction-v3.1.0", 320 | "repo" : "https://github.com/p5-number-fraction/number-fraction", 321 | "repo_def_branch" : "master", 322 | "repo_name" : "number-fraction", 323 | "repo_owner" : "p5-number-fraction", 324 | "uses_rt" : false, 325 | "ver" : "v3.1.0" 326 | }, 327 | { 328 | "auth" : "DAVECROSS", 329 | "bugtracker" : "https://github.com/davorg/Ogg-Vorbis-Header/issues", 330 | "date" : "2021-01-04", 331 | "dist" : "Ogg-Vorbis-Header", 332 | "insecure_repo" : false, 333 | "name" : "Ogg-Vorbis-Header-0.11", 334 | "repo" : "https://github.com/davorg/Ogg-Vorbis-Header", 335 | "repo_def_branch" : "master", 336 | "repo_name" : "Ogg-Vorbis-Header", 337 | "repo_owner" : "davorg", 338 | "uses_rt" : false, 339 | "ver" : "0.11" 340 | }, 341 | { 342 | "auth" : "DAVECROSS", 343 | "bugtracker" : "https://github.com/davorg/perl-ogg-vorbis-header-pureperl/issues", 344 | "date" : "2020-12-06", 345 | "dist" : "Ogg-Vorbis-Header-PurePerl", 346 | "insecure_repo" : false, 347 | "name" : "Ogg-Vorbis-Header-PurePerl-1.05", 348 | "repo" : "https://github.com/davorg/perl-ogg-vorbis-header-pureperl", 349 | "repo_def_branch" : "master", 350 | "repo_name" : "perl-ogg-vorbis-header-pureperl", 351 | "repo_owner" : "davorg", 352 | "uses_rt" : false, 353 | "ver" : "1.05" 354 | }, 355 | { 356 | "auth" : "DAVECROSS", 357 | "bugtracker" : "https://github.com/davorg/parse-rpm-spec/issues", 358 | "date" : "2023-01-13", 359 | "dist" : "Parse-RPM-Spec", 360 | "insecure_repo" : false, 361 | "name" : "Parse-RPM-Spec-v1.1.2", 362 | "repo" : "https://github.com/davorg/parse-rpm-spec", 363 | "repo_def_branch" : "master", 364 | "repo_name" : "parse-rpm-spec", 365 | "repo_owner" : "davorg", 366 | "uses_rt" : false, 367 | "ver" : "v1.1.2" 368 | }, 369 | { 370 | "auth" : "DAVECROSS", 371 | "bugtracker" : "https://github.com/davorg/perlanet/issues", 372 | "date" : "2023-05-22", 373 | "dist" : "Perlanet", 374 | "insecure_repo" : false, 375 | "name" : "Perlanet-v3.0.3", 376 | "repo" : "https://github.com/davorg/perlanet", 377 | "repo_def_branch" : "master", 378 | "repo_name" : "perlanet", 379 | "repo_owner" : "davorg", 380 | "uses_rt" : false, 381 | "ver" : "v3.0.3" 382 | }, 383 | { 384 | "auth" : "DAVECROSS", 385 | "bugtracker" : "https://github.com/davorg/plack-app-directoryindex/issues", 386 | "date" : "2023-06-05", 387 | "dist" : "Plack-App-DirectoryIndex", 388 | "insecure_repo" : false, 389 | "name" : "Plack-App-DirectoryIndex-0.0.4", 390 | "repo" : "https://github.com/davorg/plack-app-directoryindex", 391 | "repo_def_branch" : "main", 392 | "repo_name" : "plack-app-directoryindex", 393 | "repo_owner" : "davorg", 394 | "uses_rt" : false, 395 | "ver" : "v0.0.4" 396 | }, 397 | { 398 | "auth" : "DAVECROSS", 399 | "bugtracker" : "https://github.com/ranguard/plack-middleware-dirindex/issues", 400 | "date" : "2022-03-26", 401 | "dist" : "Plack-Middleware-DirIndex", 402 | "insecure_repo" : false, 403 | "name" : "Plack-Middleware-DirIndex-1.01", 404 | "repo" : "https://github.com/ranguard/plack-middleware-dirindex", 405 | "repo_def_branch" : "master", 406 | "repo_name" : "plack-middleware-dirindex", 407 | "repo_owner" : "ranguard", 408 | "uses_rt" : false, 409 | "ver" : "1.01" 410 | }, 411 | { 412 | "auth" : "DAVECROSS", 413 | "bugtracker" : "https://github.com/davorg/qmail-queuehandler/issues", 414 | "date" : "2021-01-13", 415 | "dist" : "QMail-QueueHandler", 416 | "insecure_repo" : false, 417 | "name" : "QMail-QueueHandler-2.0.4", 418 | "repo" : "https://github.com/davorg/qmail-queuehandler", 419 | "repo_def_branch" : "master", 420 | "repo_name" : "qmail-queuehandler", 421 | "repo_owner" : "davorg", 422 | "uses_rt" : false, 423 | "ver" : "v2.0.4" 424 | }, 425 | { 426 | "auth" : "DAVECROSS", 427 | "bugtracker" : "https://github.com/davorg/svg-christmastree/issues", 428 | "date" : "2021-01-12", 429 | "dist" : "SVG-ChristmasTree", 430 | "insecure_repo" : false, 431 | "name" : "SVG-ChristmasTree-0.0.5", 432 | "repo" : "https://github.com/davorg/svg-christmastree", 433 | "repo_def_branch" : "master", 434 | "repo_name" : "svg-christmastree", 435 | "repo_owner" : "davorg", 436 | "uses_rt" : false, 437 | "ver" : "v0.0.5" 438 | }, 439 | { 440 | "auth" : "DAVECROSS", 441 | "bugtracker" : "https://github.com/davorg/svg-timeline/issues", 442 | "date" : "2022-11-01", 443 | "dist" : "SVG-Timeline", 444 | "insecure_repo" : false, 445 | "name" : "SVG-Timeline-0.1.3", 446 | "repo" : "https://github.com/davorg/svg-timeline", 447 | "repo_def_branch" : "master", 448 | "repo_name" : "svg-timeline", 449 | "repo_owner" : "davorg", 450 | "uses_rt" : false, 451 | "ver" : "v0.1.3" 452 | }, 453 | { 454 | "auth" : "DAVECROSS", 455 | "bugtracker" : "https://github.com/davorg/svg-timeline-genealogy/issues", 456 | "date" : "2021-03-22", 457 | "dist" : "SVG-Timeline-Genealogy", 458 | "insecure_repo" : false, 459 | "name" : "SVG-Timeline-Genealogy-0.0.5", 460 | "repo" : "https://github.com/davorg/svg-timeline-genealogy", 461 | "repo_def_branch" : "master", 462 | "repo_name" : "svg-timeline-genealogy", 463 | "repo_owner" : "davorg", 464 | "uses_rt" : false, 465 | "ver" : "v0.0.5" 466 | }, 467 | { 468 | "auth" : "DAVECROSS", 469 | "bugtracker" : "https://github.com/davorg/svg-trafficlight/issues", 470 | "date" : "2020-12-22", 471 | "dist" : "SVG-TrafficLight", 472 | "insecure_repo" : false, 473 | "name" : "SVG-TrafficLight-0.1.4", 474 | "repo" : "https://github.com/davorg/svg-trafficlight", 475 | "repo_def_branch" : "master", 476 | "repo_name" : "svg-trafficlight", 477 | "repo_owner" : "davorg", 478 | "uses_rt" : false, 479 | "ver" : "v0.1.4" 480 | }, 481 | { 482 | "auth" : "DAVECROSS", 483 | "bugtracker" : "https://github.com/davorg/symbol-approx-sub/issues", 484 | "date" : "2021-01-13", 485 | "dist" : "Symbol-Approx-Sub", 486 | "insecure_repo" : false, 487 | "name" : "Symbol-Approx-Sub-v3.1.3", 488 | "repo" : "https://github.com/davorg/symbol-approx-sub", 489 | "repo_def_branch" : "master", 490 | "repo_name" : "symbol-approx-sub", 491 | "repo_owner" : "davorg", 492 | "uses_rt" : false, 493 | "ver" : "v3.1.3" 494 | }, 495 | { 496 | "auth" : "DAVECROSS", 497 | "bugtracker" : "https://github.com/mithun/perl-tmdb/issues", 498 | "date" : "2024-04-03", 499 | "dist" : "TMDB", 500 | "insecure_repo" : false, 501 | "name" : "TMDB-v1.2.2", 502 | "repo" : "git://github.com/mithun/perl-tmdb.git", 503 | "repo_def_branch" : "master", 504 | "repo_name" : "perl-tmdb", 505 | "repo_owner" : "mithun", 506 | "uses_rt" : false, 507 | "ver" : "v1.2.2" 508 | }, 509 | { 510 | "auth" : "DAVECROSS", 511 | "bugtracker" : "https://github.com/davorg/template-plugin-audiofile-info/issues", 512 | "date" : "2021-01-23", 513 | "dist" : "Template-Plugin-AudioFile-Info", 514 | "insecure_repo" : false, 515 | "name" : "Template-Plugin-AudioFile-Info-v2.0.2", 516 | "repo" : "https://github.com/davorg/template-plugin-audiofile-info", 517 | "repo_def_branch" : "master", 518 | "repo_name" : "template-plugin-audiofile-info", 519 | "repo_owner" : "davorg", 520 | "uses_rt" : false, 521 | "ver" : "v2.0.2" 522 | }, 523 | { 524 | "auth" : "DAVECROSS", 525 | "bugtracker" : "https://github.com/davorg/template-plugin-rpm2/issues", 526 | "date" : "2021-01-25", 527 | "dist" : "Template-Plugin-RPM2", 528 | "insecure_repo" : false, 529 | "name" : "Template-Plugin-RPM2-v1.3.4", 530 | "repo" : "https://github.com/davorg/template-plugin-rpm2", 531 | "repo_def_branch" : "master", 532 | "repo_name" : "template-plugin-rpm2", 533 | "repo_owner" : "davorg", 534 | "uses_rt" : false, 535 | "ver" : "v1.3.4" 536 | }, 537 | { 538 | "auth" : "DAVECROSS", 539 | "bugtracker" : "https://github.com/davorg/template-plugin-xml-feed/issues", 540 | "date" : "2021-01-28", 541 | "dist" : "Template-Plugin-XML-Feed", 542 | "insecure_repo" : false, 543 | "name" : "Template-Plugin-XML-Feed-v1.0.3", 544 | "repo" : "https://github.com/davorg/template-plugin-xml-feed", 545 | "repo_def_branch" : "master", 546 | "repo_name" : "template-plugin-xml-feed", 547 | "repo_owner" : "davorg", 548 | "uses_rt" : false, 549 | "ver" : "v1.0.3" 550 | }, 551 | { 552 | "auth" : "DAVECROSS", 553 | "bugtracker" : "https://github.com/davorg-cpan/template-provider-pandoc/issues", 554 | "date" : "2024-02-22", 555 | "dist" : "Template-Provider-Pandoc", 556 | "insecure_repo" : false, 557 | "name" : "Template-Provider-Pandoc-0.0.5", 558 | "repo" : "https://github.com/davorg-cpan/template-provider-pandoc", 559 | "repo_def_branch" : "master", 560 | "repo_name" : "template-provider-pandoc", 561 | "repo_owner" : "davorg-cpan", 562 | "uses_rt" : false, 563 | "ver" : "v0.0.5" 564 | }, 565 | { 566 | "auth" : "DAVECROSS", 567 | "bugtracker" : "https://github.com/davorg/tie-hash-cannabinol/issues", 568 | "date" : "2023-05-25", 569 | "dist" : "Tie-Hash-Cannabinol", 570 | "insecure_repo" : false, 571 | "name" : "Tie-Hash-Cannabinol-v1.12.3", 572 | "repo" : "https://github.com/davorg/tie-hash-cannabinol", 573 | "repo_def_branch" : "master", 574 | "repo_name" : "tie-hash-cannabinol", 575 | "repo_owner" : "davorg", 576 | "uses_rt" : false, 577 | "ver" : "v1.12.3" 578 | }, 579 | { 580 | "auth" : "DAVECROSS", 581 | "bugtracker" : "https://github.com/davorg/tie-hash-fixedkeys/issues", 582 | "date" : "2021-01-25", 583 | "dist" : "Tie-Hash-FixedKeys", 584 | "insecure_repo" : false, 585 | "name" : "Tie-Hash-FixedKeys-v1.13.2", 586 | "repo" : "https://github.com/davorg/tie-hash-fixedkeys", 587 | "repo_def_branch" : "master", 588 | "repo_name" : "tie-hash-fixedkeys", 589 | "repo_owner" : "davorg", 590 | "uses_rt" : false, 591 | "ver" : "v1.13.2" 592 | }, 593 | { 594 | "auth" : "DAVECROSS", 595 | "bugtracker" : "https://github.com/davorg/tie-hash-regex/issues", 596 | "date" : "2021-01-25", 597 | "dist" : "Tie-Hash-Regex", 598 | "insecure_repo" : false, 599 | "name" : "Tie-Hash-Regex-1.14", 600 | "repo" : "https://github.com/davorg/tie-hash-regex", 601 | "repo_def_branch" : "master", 602 | "repo_name" : "tie-hash-regex", 603 | "repo_owner" : "davorg", 604 | "uses_rt" : false, 605 | "ver" : "1.14" 606 | }, 607 | { 608 | "auth" : "DAVECROSS", 609 | "bugtracker" : "https://github.com/davorg-cpan/xml-feed/issues", 610 | "date" : "2024-07-08", 611 | "dist" : "XML-Feed", 612 | "insecure_repo" : false, 613 | "name" : "XML-Feed-0.65", 614 | "repo" : "https://github.com/davorg-cpan/xml-feed", 615 | "repo_def_branch" : "master", 616 | "repo_name" : "xml-feed", 617 | "repo_owner" : "davorg-cpan", 618 | "uses_rt" : false, 619 | "ver" : "0.65" 620 | } 621 | ], 622 | "sort" : { 623 | "column" : 0, 624 | "direction" : "asc" 625 | } 626 | } 627 | -------------------------------------------------------------------------------- /authors/data/DRCLAW/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "DRCLAW", 4 | "github" : "drclaw1394", 5 | "gravatar" : null, 6 | "name" : "Ruben Westerberg" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_codecov" : 0, 13 | "use_coveralls" : 0, 14 | "use_gh_actions" : 1, 15 | "use_travis" : 0 16 | }, 17 | "modules" : [ 18 | { 19 | "auth" : "DRCLAW", 20 | "date" : "2022-10-23", 21 | "dist" : "Data-Combination", 22 | "insecure_repo" : true, 23 | "name" : "Data-Combination-0.1.0", 24 | "repo" : "http://github.com/drclaw1394/perl-data-combination", 25 | "repo_def_branch" : "main", 26 | "repo_name" : "perl-data-combination", 27 | "repo_owner" : "drclaw1394", 28 | "ver" : "v0.1.0" 29 | }, 30 | { 31 | "auth" : "DRCLAW", 32 | "bugtracker" : "https://github.com/drclaw1394/perl-error-show/issues", 33 | "date" : "2024-04-23", 34 | "dist" : "Error-Show", 35 | "insecure_repo" : false, 36 | "name" : "Error-Show-v0.4.0", 37 | "repo" : "https://github.com/drclaw1394/perl-error-show.git", 38 | "repo_def_branch" : "main", 39 | "repo_name" : "perl-error-show", 40 | "repo_owner" : "drclaw1394", 41 | "uses_rt" : false, 42 | "ver" : "v0.4.0" 43 | }, 44 | { 45 | "auth" : "DRCLAW", 46 | "date" : "2023-12-04", 47 | "dist" : "Export-These", 48 | "insecure_repo" : true, 49 | "name" : "Export-These-v0.2.1", 50 | "repo" : "http://github.com/drclaw1394/perl-export-these", 51 | "repo_def_branch" : "main", 52 | "repo_name" : "perl-export-these", 53 | "repo_owner" : "drclaw1394", 54 | "ver" : "v0.2.1" 55 | }, 56 | { 57 | "auth" : "DRCLAW", 58 | "date" : "2024-02-27", 59 | "dist" : "File-Meta-Cache", 60 | "insecure_repo" : false, 61 | "name" : "File-Meta-Cache-v0.3.0", 62 | "repo" : "https://github.com/drclaw1394/perl-file-meta-cache", 63 | "repo_def_branch" : "main", 64 | "repo_name" : "perl-file-meta-cache", 65 | "repo_owner" : "drclaw1394", 66 | "ver" : "v0.3.0" 67 | }, 68 | { 69 | "auth" : "DRCLAW", 70 | "date" : "2024-01-11", 71 | "dist" : "HTTP-State", 72 | "insecure_repo" : false, 73 | "name" : "HTTP-State-v0.1.2", 74 | "repo" : "https://github.com/drclaw1394/perl-http-state", 75 | "repo_def_branch" : "main", 76 | "repo_name" : "perl-http-state", 77 | "repo_owner" : "drclaw1394", 78 | "ver" : "v0.1.2" 79 | }, 80 | { 81 | "auth" : "DRCLAW", 82 | "date" : "2023-06-08", 83 | "dist" : "Hustle-Table", 84 | "insecure_repo" : true, 85 | "name" : "Hustle-Table-v0.6.0", 86 | "repo" : "http://github.com/drclaw1394/perl5-hustle-table", 87 | "repo_def_branch" : "main", 88 | "repo_name" : "perl5-hustle-table", 89 | "repo_owner" : "drclaw1394", 90 | "ver" : "v0.6.0" 91 | }, 92 | { 93 | "auth" : "DRCLAW", 94 | "date" : "2024-05-11", 95 | "dist" : "IO-FD", 96 | "insecure_repo" : false, 97 | "name" : "IO-FD-v0.3.9", 98 | "repo" : "https://github.com/drclaw1394/perl-io-fd", 99 | "repo_def_branch" : "main", 100 | "repo_name" : "perl-io-fd", 101 | "repo_owner" : "drclaw1394", 102 | "ver" : "v0.3.9" 103 | }, 104 | { 105 | "auth" : "DRCLAW", 106 | "date" : "2023-08-26", 107 | "dist" : "Import-These", 108 | "insecure_repo" : true, 109 | "name" : "Import-These-v0.1.2", 110 | "repo" : "http://github.com/drclaw1394/perl-import-these", 111 | "repo_def_branch" : "main", 112 | "repo_name" : "perl-import-these", 113 | "repo_owner" : "drclaw1394", 114 | "ver" : "v0.1.2" 115 | }, 116 | { 117 | "auth" : "DRCLAW", 118 | "date" : "2024-01-10", 119 | "dist" : "List-Insertion", 120 | "insecure_repo" : false, 121 | "name" : "List-Insertion-v0.1.4", 122 | "repo" : "https://github.com/drclaw1394/perl-list-insertion", 123 | "repo_def_branch" : "main", 124 | "repo_name" : "perl-list-insertion", 125 | "repo_owner" : "drclaw1394", 126 | "ver" : "v0.1.4" 127 | }, 128 | { 129 | "auth" : "DRCLAW", 130 | "date" : "2023-08-27", 131 | "dist" : "Log-OK", 132 | "insecure_repo" : true, 133 | "name" : "Log-OK-v0.2.1", 134 | "repo" : "http://github.com/drclaw1394/perl-log-ok", 135 | "repo_def_branch" : "main", 136 | "repo_name" : "perl-log-ok", 137 | "repo_owner" : "drclaw1394", 138 | "ver" : "v0.2.1" 139 | }, 140 | { 141 | "auth" : "DRCLAW", 142 | "date" : "2023-12-17", 143 | "dist" : "Socket-More-Constants", 144 | "insecure_repo" : false, 145 | "name" : "Socket-More-Constants-v0.1.1", 146 | "repo" : "https://github.com/drclaw1394/perl-socket-more-constants", 147 | "repo_def_branch" : "main", 148 | "repo_name" : "perl-socket-more-constants", 149 | "repo_owner" : "drclaw1394", 150 | "ver" : "v0.1.1" 151 | }, 152 | { 153 | "auth" : "DRCLAW", 154 | "date" : "2024-01-15", 155 | "dist" : "Socket-More-Interface", 156 | "insecure_repo" : false, 157 | "name" : "Socket-More-Interface-v0.1.0", 158 | "repo" : "https://github.com/drclaw1394/perl-socket-more-interface", 159 | "repo_def_branch" : "main", 160 | "repo_name" : "perl-socket-more-interface", 161 | "repo_owner" : "drclaw1394", 162 | "ver" : "v0.1.0" 163 | }, 164 | { 165 | "auth" : "DRCLAW", 166 | "date" : "2024-01-17", 167 | "dist" : "Socket-More-Lookup", 168 | "insecure_repo" : false, 169 | "name" : "Socket-More-Lookup-v0.1.0", 170 | "repo" : "https://github.com/drclaw1394/perl-socket-more-lookup", 171 | "repo_def_branch" : "main", 172 | "repo_name" : "perl-socket-more-lookup", 173 | "repo_owner" : "drclaw1394", 174 | "ver" : "v0.1.0" 175 | }, 176 | { 177 | "auth" : "DRCLAW", 178 | "date" : "2024-01-17", 179 | "dist" : "Socket-More-Resolver", 180 | "insecure_repo" : false, 181 | "name" : "Socket-More-Resolver-v0.1.0", 182 | "repo" : "https://github.com/drclaw1394/perl-socket-more-resolver", 183 | "repo_def_branch" : "main", 184 | "repo_name" : "perl-socket-more-resolver", 185 | "repo_owner" : "drclaw1394", 186 | "ver" : "v0.1.0" 187 | }, 188 | { 189 | "auth" : "DRCLAW", 190 | "date" : "2024-01-20", 191 | "dist" : "Socket-More", 192 | "insecure_repo" : true, 193 | "name" : "Socket-More-v0.5.1", 194 | "repo" : "http://github.com/drclaw1394/perl-socket-more", 195 | "repo_def_branch" : "main", 196 | "repo_name" : "perl-socket-more", 197 | "repo_owner" : "drclaw1394", 198 | "ver" : "v0.5.1" 199 | }, 200 | { 201 | "auth" : "DRCLAW", 202 | "date" : "2023-03-12", 203 | "dist" : "Sub-Middler", 204 | "insecure_repo" : true, 205 | "name" : "Sub-Middler-v0.2.0", 206 | "repo" : "http://github.com/drclaw1394/perl-sub-middler", 207 | "repo_def_branch" : "main", 208 | "repo_name" : "perl-sub-middler", 209 | "repo_owner" : "drclaw1394", 210 | "ver" : "v0.2.0" 211 | }, 212 | { 213 | "auth" : "DRCLAW", 214 | "date" : "2024-01-10", 215 | "dist" : "Template-Plex", 216 | "insecure_repo" : false, 217 | "name" : "Template-Plex-v0.7.0", 218 | "repo" : "https://github.com/drclaw1394/perl-template-plex", 219 | "repo_def_branch" : "main", 220 | "repo_name" : "perl-template-plex", 221 | "repo_owner" : "drclaw1394", 222 | "ver" : "v0.7.0" 223 | }, 224 | { 225 | "auth" : "DRCLAW", 226 | "date" : "2024-04-09", 227 | "dist" : "constant-more", 228 | "insecure_repo" : false, 229 | "name" : "constant-more-v0.3.1", 230 | "repo" : "https://github.com/drclaw1394/perl-constant-more", 231 | "repo_def_branch" : "main", 232 | "repo_name" : "perl-constant-more", 233 | "repo_owner" : "drclaw1394", 234 | "ver" : "v0.3.1" 235 | }, 236 | { 237 | "auth" : "DRCLAW", 238 | "date" : "2022-03-31", 239 | "dist" : "uSAC-MIME", 240 | "insecure_repo" : false, 241 | "name" : "uSAC-MIME-v0.2.2", 242 | "repo" : "https://github.com/drclaw1394/perl-usac-mime", 243 | "repo_def_branch" : "main", 244 | "repo_name" : "perl-usac-mime", 245 | "repo_owner" : "drclaw1394", 246 | "ver" : "v0.2.2" 247 | } 248 | ], 249 | "sort" : { 250 | "column" : 3, 251 | "direction" : "desc" 252 | } 253 | } 254 | -------------------------------------------------------------------------------- /authors/data/FERKI/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "FERKI", 4 | "github" : "ferki", 5 | "gravatar" : "https://secure.gravatar.com/avatar/4f102f07ec6b79caa1c5a3d08f08e01a.png", 6 | "name" : "Ferenc Erki" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "build and test" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 1, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "FERKI", 23 | "bugtracker" : "https://github.com/RexOps/Rex/issues", 24 | "date" : "2023-08-05", 25 | "dist" : "Rex", 26 | "insecure_repo" : false, 27 | "name" : "Rex-1.14.3", 28 | "repo" : "https://github.com/RexOps/Rex", 29 | "repo_def_branch" : "master", 30 | "repo_name" : "Rex", 31 | "repo_owner" : "RexOps", 32 | "uses_rt" : false, 33 | "ver" : "1.14.3" 34 | }, 35 | { 36 | "auth" : "FERKI", 37 | "bugtracker" : "https://github.com/ferki/Rex-Hook-File-Diff/issues", 38 | "date" : "2021-08-18", 39 | "dist" : "Rex-Hook-File-Diff", 40 | "insecure_repo" : false, 41 | "name" : "Rex-Hook-File-Diff-v0.4.0", 42 | "repo" : "https://github.com/ferki/Rex-Hook-File-Diff", 43 | "repo_def_branch" : "master", 44 | "repo_name" : "Rex-Hook-File-Diff", 45 | "repo_owner" : "ferki", 46 | "uses_rt" : false, 47 | "ver" : "v0.4.0" 48 | }, 49 | { 50 | "auth" : "FERKI", 51 | "bugtracker" : "https://github.com/ferki/Rex-Hook-File-Impostor/issues", 52 | "date" : "2021-07-28", 53 | "dist" : "Rex-Hook-File-Impostor", 54 | "insecure_repo" : false, 55 | "name" : "Rex-Hook-File-Impostor-v0.2.0", 56 | "repo" : "https://github.com/ferki/Rex-Hook-File-Impostor", 57 | "repo_def_branch" : "master", 58 | "repo_name" : "Rex-Hook-File-Impostor", 59 | "repo_owner" : "ferki", 60 | "uses_rt" : false, 61 | "ver" : "v0.2.0" 62 | } 63 | ], 64 | "sort" : { 65 | "column" : 0, 66 | "direction" : "asc" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /authors/data/GEEKRUTH/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "GEEKRUTH", 4 | "github" : "GeekRuthie", 5 | "gravatar" : null, 6 | "name" : "D Ruth Holloway" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [], 10 | "use_appveyor" : 0, 11 | "use_cirrus" : 0, 12 | "use_codecov" : 0, 13 | "use_coveralls" : 0, 14 | "use_gh_actions" : 0, 15 | "use_travis" : 0, 16 | "use_travis_com" : 0 17 | }, 18 | "modules" : [], 19 | "sort" : { 20 | "column" : 0, 21 | "direction" : "asc" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /authors/data/PETDANCE/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PETDANCE", 4 | "github" : "petdance", 5 | "gravatar" : "https://secure.gravatar.com/avatar/8077a0584e451732420d43f5d0b3bd31?s=130&d=identicon", 6 | "name" : "Andy Lester" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "testsuite" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 0, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "PETDANCE", 23 | "bugtracker" : "http://github.com/petdance/file-next/issues", 24 | "date" : "2019-08-27", 25 | "dist" : "File-Next", 26 | "insecure_repo" : true, 27 | "name" : "File-Next-1.18", 28 | "repo" : "http://github.com/petdance/file-next/tree/master", 29 | "repo_def_branch" : "", 30 | "repo_name" : "file-next/tree/master", 31 | "repo_owner" : "petdance", 32 | "uses_rt" : false, 33 | "ver" : "1.18" 34 | }, 35 | { 36 | "auth" : "PETDANCE", 37 | "bugtracker" : "https://github.com/petdance/html-lint/issues", 38 | "date" : "2018-06-22", 39 | "dist" : "HTML-Lint", 40 | "insecure_repo" : false, 41 | "name" : "HTML-Lint-2.32", 42 | "repo" : "https://github.com/petdance/html-lint", 43 | "repo_def_branch" : "dev", 44 | "repo_name" : "html-lint", 45 | "repo_owner" : "petdance", 46 | "uses_rt" : false, 47 | "ver" : "2.32" 48 | }, 49 | { 50 | "auth" : "PETDANCE", 51 | "bugtracker" : "https://github.com/petdance/html-tagset/issues", 52 | "date" : "2024-03-11", 53 | "dist" : "HTML-Tagset", 54 | "insecure_repo" : false, 55 | "name" : "HTML-Tagset-3.24", 56 | "repo" : "https://github.com/petdance/html-tagset", 57 | "repo_def_branch" : "dev", 58 | "repo_name" : "html-tagset", 59 | "repo_owner" : "petdance", 60 | "uses_rt" : false, 61 | "ver" : "3.24" 62 | }, 63 | { 64 | "auth" : "PETDANCE", 65 | "bugtracker" : "http://github.com/petdance/html-tidy/issues", 66 | "date" : "2017-09-13", 67 | "dist" : "HTML-Tidy", 68 | "insecure_repo" : true, 69 | "name" : "HTML-Tidy-1.60", 70 | "repo" : "http://github.com/petdance/html-tidy", 71 | "repo_def_branch" : "dev", 72 | "repo_name" : "html-tidy", 73 | "repo_owner" : "petdance", 74 | "uses_rt" : false, 75 | "ver" : "1.60" 76 | }, 77 | { 78 | "auth" : "PETDANCE", 79 | "bugtracker" : "http://github.com/petdance/html-tidy5/issues", 80 | "date" : "2019-10-26", 81 | "dist" : "HTML-Tidy5", 82 | "insecure_repo" : true, 83 | "name" : "HTML-Tidy5-1.06", 84 | "repo" : "http://github.com/petdance/html-tidy5", 85 | "repo_def_branch" : "dev", 86 | "repo_name" : "html-tidy5", 87 | "repo_owner" : "petdance", 88 | "uses_rt" : false, 89 | "ver" : "1.06" 90 | }, 91 | { 92 | "auth" : "PETDANCE", 93 | "bugtracker" : "https://github.com/petdance/list-cycle/issues", 94 | "date" : "2020-12-23", 95 | "dist" : "List-Cycle", 96 | "insecure_repo" : false, 97 | "name" : "List-Cycle-1.04", 98 | "repo" : "git://github.com/petdance/list-cycle.git", 99 | "repo_def_branch" : "main", 100 | "repo_name" : "list-cycle", 101 | "repo_owner" : "petdance", 102 | "uses_rt" : false, 103 | "ver" : "1.04" 104 | }, 105 | { 106 | "auth" : "PETDANCE", 107 | "bugtracker" : "https://github.com/Perl-Critic/Perl-Critic/issues", 108 | "date" : "2023-10-17", 109 | "dist" : "Perl-Critic", 110 | "insecure_repo" : false, 111 | "name" : "Perl-Critic-1.152", 112 | "repo" : "git://github.com/Perl-Critic/Perl-Critic.git", 113 | "repo_def_branch" : "dev", 114 | "repo_name" : "Perl-Critic", 115 | "repo_owner" : "Perl-Critic", 116 | "uses_rt" : false, 117 | "ver" : "1.152" 118 | }, 119 | { 120 | "auth" : "PETDANCE", 121 | "bugtracker" : "https://github.com/petdance/perl-critic-bangs", 122 | "date" : "2017-05-25", 123 | "dist" : "Perl-Critic-Bangs", 124 | "insecure_repo" : false, 125 | "name" : "Perl-Critic-Bangs-1.12", 126 | "repo" : "git://github.com/petdance/perl-critic-bangs.git", 127 | "repo_def_branch" : "dev", 128 | "repo_name" : "perl-critic-bangs", 129 | "repo_owner" : "petdance", 130 | "uses_rt" : false, 131 | "ver" : "1.12" 132 | }, 133 | { 134 | "auth" : "PETDANCE", 135 | "bugtracker" : "https://github.com/Perl-Critic/Perl-Critic-StricterSubs/issues", 136 | "date" : "2022-04-26", 137 | "dist" : "Perl-Critic-StricterSubs", 138 | "insecure_repo" : false, 139 | "name" : "Perl-Critic-StricterSubs-0.06", 140 | "repo" : "git://github.com/Perl-Critic/Perl-Critic-StricterSubs.git", 141 | "repo_def_branch" : "dev", 142 | "repo_name" : "Perl-Critic-StricterSubs", 143 | "repo_owner" : "Perl-Critic", 144 | "uses_rt" : false, 145 | "ver" : "0.06" 146 | }, 147 | { 148 | "auth" : "PETDANCE", 149 | "bugtracker" : "https://github.com/petdance/sql-tiny/issues", 150 | "date" : "2019-04-07", 151 | "dist" : "SQL-Tiny", 152 | "insecure_repo" : false, 153 | "name" : "SQL-Tiny-0.04", 154 | "repo" : "git://github.com/petdance/sql-tiny.git", 155 | "repo_def_branch" : "dev", 156 | "repo_name" : "sql-tiny", 157 | "repo_owner" : "petdance", 158 | "uses_rt" : false, 159 | "ver" : "0.04" 160 | }, 161 | { 162 | "auth" : "PETDANCE", 163 | "bugtracker" : "https://github.com/Perl-Critic/Test-Perl-Critic/issues", 164 | "date" : "2018-03-26", 165 | "dist" : "Test-Perl-Critic", 166 | "insecure_repo" : false, 167 | "name" : "Test-Perl-Critic-1.04", 168 | "repo" : "git://github.com/Perl-Critic/Test-Perl-Critic.git", 169 | "repo_def_branch" : "dev", 170 | "repo_name" : "Test-Perl-Critic", 171 | "repo_owner" : "Perl-Critic", 172 | "uses_rt" : false, 173 | "ver" : "1.04" 174 | }, 175 | { 176 | "auth" : "PETDANCE", 177 | "date" : "2019-06-12", 178 | "dist" : "Test-Taint", 179 | "insecure_repo" : false, 180 | "name" : "Test-Taint-1.08", 181 | "repo" : "https://github.com/petdance/test-taint", 182 | "repo_def_branch" : "dev", 183 | "repo_name" : "test-taint", 184 | "repo_owner" : "petdance", 185 | "ver" : "1.08" 186 | }, 187 | { 188 | "auth" : "PETDANCE", 189 | "bugtracker" : "https://github.com/petdance/test-www-mechanize/issues", 190 | "date" : "2022-12-05", 191 | "dist" : "Test-WWW-Mechanize", 192 | "insecure_repo" : false, 193 | "name" : "Test-WWW-Mechanize-1.60", 194 | "repo" : "https://github.com/petdance/test-www-mechanize", 195 | "repo_def_branch" : "dev", 196 | "repo_name" : "test-www-mechanize", 197 | "repo_owner" : "petdance", 198 | "uses_rt" : false, 199 | "ver" : "1.60" 200 | }, 201 | { 202 | "auth" : "PETDANCE", 203 | "bugtracker" : "https://github.com/beyondgrep/ack3", 204 | "date" : "2023-02-27", 205 | "dist" : "ack", 206 | "insecure_repo" : false, 207 | "name" : "ack-v3.7.0", 208 | "repo" : "git://github.com/beyondgrep/ack3.git", 209 | "repo_def_branch" : "dev", 210 | "repo_name" : "ack3", 211 | "repo_owner" : "beyondgrep", 212 | "uses_rt" : false, 213 | "ver" : "v3.7.0" 214 | } 215 | ], 216 | "sort" : { 217 | "column" : 0, 218 | "direction" : "asc" 219 | } 220 | } 221 | -------------------------------------------------------------------------------- /authors/data/PMQS/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PMQS", 4 | "github" : "pmqs", 5 | "gravatar" : "https://secure.gravatar.com/avatar/1bf245ac173d6991ade027315ff58683?s=130&d=identicon", 6 | "name" : "Paul Marquess" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "linux", 11 | "macos", 12 | "windows" 13 | ], 14 | "use_appveyor" : 1, 15 | "use_cirrus" : 1, 16 | "use_codecov" : 0, 17 | "use_coveralls" : 0, 18 | "use_gh_actions" : 1, 19 | "use_travis" : 0, 20 | "use_travis_com" : 1 21 | }, 22 | "modules" : [ 23 | { 24 | "auth" : "PMQS", 25 | "bugtracker" : "https://github.com/pmqs/zipdetails/issues", 26 | "date" : "2024-04-30", 27 | "dist" : "App-zipdetails", 28 | "insecure_repo" : false, 29 | "name" : "App-zipdetails-4.004", 30 | "repo" : "https://github.com/pmqs/zipdetails", 31 | "repo_def_branch" : "main", 32 | "repo_name" : "zipdetails", 33 | "repo_owner" : "pmqs", 34 | "uses_rt" : false, 35 | "ver" : "4.004" 36 | }, 37 | { 38 | "auth" : "PMQS", 39 | "bugtracker" : "https://github.com/pmqs/Archive-Zip-SimpleZip/issues", 40 | "date" : "2024-08-29", 41 | "dist" : "Archive-Zip-SimpleZip", 42 | "insecure_repo" : false, 43 | "name" : "Archive-Zip-SimpleZip-1.002", 44 | "repo" : "https://github.com/pmqs/Archive-Zip-SimpleZip", 45 | "repo_def_branch" : "master", 46 | "repo_name" : "Archive-Zip-SimpleZip", 47 | "repo_owner" : "pmqs", 48 | "uses_rt" : false, 49 | "ver" : "1.002" 50 | }, 51 | { 52 | "auth" : "PMQS", 53 | "bugtracker" : "https://github.com/pmqs/BerkeleyDB/issues", 54 | "date" : "2022-05-13", 55 | "dist" : "BerkeleyDB", 56 | "insecure_repo" : false, 57 | "name" : "BerkeleyDB-0.65", 58 | "repo" : "https://github.com/pmqs/BerkeleyDB", 59 | "repo_def_branch" : "master", 60 | "repo_name" : "BerkeleyDB", 61 | "repo_owner" : "pmqs", 62 | "uses_rt" : false, 63 | "ver" : "0.65" 64 | }, 65 | { 66 | "auth" : "PMQS", 67 | "bugtracker" : "https://github.com/pmqs/Compress-Raw-Bzip2/issues", 68 | "date" : "2024-08-28", 69 | "dist" : "Compress-Raw-Bzip2", 70 | "insecure_repo" : false, 71 | "name" : "Compress-Raw-Bzip2-2.213", 72 | "repo" : "https://github.com/pmqs/Compress-Raw-Bzip2", 73 | "repo_def_branch" : "master", 74 | "repo_name" : "Compress-Raw-Bzip2", 75 | "repo_owner" : "pmqs", 76 | "uses_rt" : false, 77 | "ver" : "2.213" 78 | }, 79 | { 80 | "auth" : "PMQS", 81 | "bugtracker" : "https://github.com/pmqs/Compress-Raw-Lzma/issues", 82 | "date" : "2024-08-28", 83 | "dist" : "Compress-Raw-Lzma", 84 | "insecure_repo" : false, 85 | "name" : "Compress-Raw-Lzma-2.213", 86 | "repo" : "https://github.com/pmqs/Compress-Raw-Lzma", 87 | "repo_def_branch" : "master", 88 | "repo_name" : "Compress-Raw-Lzma", 89 | "repo_owner" : "pmqs", 90 | "uses_rt" : false, 91 | "ver" : "2.213" 92 | }, 93 | { 94 | "auth" : "PMQS", 95 | "bugtracker" : "https://github.com/pmqs/Compress-Raw-Zlib/issues", 96 | "date" : "2024-08-28", 97 | "dist" : "Compress-Raw-Zlib", 98 | "insecure_repo" : false, 99 | "name" : "Compress-Raw-Zlib-2.213", 100 | "repo" : "https://github.com/pmqs/Compress-Raw-Zlib", 101 | "repo_def_branch" : "master", 102 | "repo_name" : "Compress-Raw-Zlib", 103 | "repo_owner" : "pmqs", 104 | "uses_rt" : false, 105 | "ver" : "2.213" 106 | }, 107 | { 108 | "auth" : "PMQS", 109 | "bugtracker" : "https://github.com/pmqs/Compress-Stream-Zstd/issues", 110 | "date" : "2023-04-08", 111 | "dist" : "Compress-Stream-Zstd", 112 | "insecure_repo" : false, 113 | "name" : "Compress-Stream-Zstd-0.206", 114 | "repo" : "https://github.com/pmqs/Compress-Stream-Zstd", 115 | "repo_def_branch" : "master", 116 | "repo_name" : "Compress-Stream-Zstd", 117 | "repo_owner" : "pmqs", 118 | "uses_rt" : false, 119 | "ver" : "0.206" 120 | }, 121 | { 122 | "auth" : "PMQS", 123 | "bugtracker" : "https://github.com/pmqs/DB_File/issues", 124 | "date" : "2023-08-21", 125 | "dist" : "DB_File", 126 | "insecure_repo" : false, 127 | "name" : "DB_File-1.859", 128 | "repo" : "https://github.com/pmqs/DB_File", 129 | "repo_def_branch" : "master", 130 | "repo_name" : "DB_File", 131 | "repo_owner" : "pmqs", 132 | "uses_rt" : false, 133 | "ver" : "1.859" 134 | }, 135 | { 136 | "auth" : "PMQS", 137 | "bugtracker" : "https://github.com/pmqs/IO-Compress/issues", 138 | "date" : "2024-08-28", 139 | "dist" : "IO-Compress", 140 | "insecure_repo" : false, 141 | "name" : "IO-Compress-2.213", 142 | "repo" : "https://github.com/pmqs/IO-Compress", 143 | "repo_def_branch" : "master", 144 | "repo_name" : "IO-Compress", 145 | "repo_owner" : "pmqs", 146 | "uses_rt" : false, 147 | "ver" : "2.213" 148 | }, 149 | { 150 | "auth" : "PMQS", 151 | "bugtracker" : "https://github.com/pmqs/IO-Compress-Lzf/issues", 152 | "date" : "2024-08-28", 153 | "dist" : "IO-Compress-Lzf", 154 | "insecure_repo" : false, 155 | "name" : "IO-Compress-Lzf-2.213", 156 | "repo" : "https://github.com/pmqs/IO-Compress-Lzf", 157 | "repo_def_branch" : "master", 158 | "repo_name" : "IO-Compress-Lzf", 159 | "repo_owner" : "pmqs", 160 | "uses_rt" : false, 161 | "ver" : "2.213" 162 | }, 163 | { 164 | "auth" : "PMQS", 165 | "bugtracker" : "https://github.com/pmqs/IO-Compress-Lzma/issues", 166 | "date" : "2024-08-28", 167 | "dist" : "IO-Compress-Lzma", 168 | "insecure_repo" : false, 169 | "name" : "IO-Compress-Lzma-2.213", 170 | "repo" : "https://github.com/pmqs/IO-Compress-Lzma", 171 | "repo_def_branch" : "master", 172 | "repo_name" : "IO-Compress-Lzma", 173 | "repo_owner" : "pmqs", 174 | "uses_rt" : false, 175 | "ver" : "2.213" 176 | }, 177 | { 178 | "auth" : "PMQS", 179 | "bugtracker" : "https://github.com/pmqs/IO-Compress-Lzop/issues", 180 | "date" : "2024-08-28", 181 | "dist" : "IO-Compress-Lzop", 182 | "insecure_repo" : false, 183 | "name" : "IO-Compress-Lzop-2.213", 184 | "repo" : "https://github.com/pmqs/IO-Compress-Lzop", 185 | "repo_def_branch" : "master", 186 | "repo_name" : "IO-Compress-Lzop", 187 | "repo_owner" : "pmqs", 188 | "uses_rt" : false, 189 | "ver" : "2.213" 190 | }, 191 | { 192 | "auth" : "PMQS", 193 | "bugtracker" : "https://github.com/pmqs/IO-Compress-Zstd/issues", 194 | "date" : "2024-08-28", 195 | "dist" : "IO-Compress-Zstd", 196 | "insecure_repo" : false, 197 | "name" : "IO-Compress-Zstd-2.213", 198 | "repo" : "https://github.com/pmqs/IO-Compress-Zstd", 199 | "repo_def_branch" : "master", 200 | "repo_name" : "IO-Compress-Zstd", 201 | "repo_owner" : "pmqs", 202 | "uses_rt" : false, 203 | "ver" : "2.213" 204 | } 205 | ], 206 | "sort" : { 207 | "column" : 0, 208 | "direction" : "asc" 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /authors/data/PSCUST/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "PSCUST", 4 | "github" : "pauloscustodio", 5 | "gravatar" : "https://secure.gravatar.com/avatar/bba6aa3d7ba48d250d898d772c886093?s=130&d=identicon", 6 | "name" : "Paulo Custodio" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 0, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "PSCUST", 23 | "bugtracker" : "https://github.com/pauloscustodio/perl-CPU-Z80-Assembler/issues", 24 | "date" : "2023-05-27", 25 | "dist" : "CPU-Z80-Assembler", 26 | "insecure_repo" : false, 27 | "name" : "CPU-Z80-Assembler-2.25", 28 | "repo" : "https://github.com/pauloscustodio/perl-CPU-Z80-Assembler", 29 | "repo_def_branch" : "master", 30 | "repo_name" : "perl-CPU-Z80-Assembler", 31 | "repo_owner" : "pauloscustodio", 32 | "uses_rt" : false, 33 | "ver" : "2.25" 34 | }, 35 | { 36 | "auth" : "PSCUST", 37 | "bugtracker" : "https://github.com/pauloscustodio/perl-CPU-Z80-Disassembler/issues", 38 | "date" : "2023-05-27", 39 | "dist" : "CPU-Z80-Disassembler", 40 | "insecure_repo" : false, 41 | "name" : "CPU-Z80-Disassembler-1.02", 42 | "repo" : "https://github.com/pauloscustodio/perl-CPU-Z80-Disassembler", 43 | "repo_def_branch" : "master", 44 | "repo_name" : "perl-CPU-Z80-Disassembler", 45 | "repo_owner" : "pauloscustodio", 46 | "uses_rt" : false, 47 | "ver" : "1.02" 48 | }, 49 | { 50 | "auth" : "PSCUST", 51 | "date" : "2016-05-16", 52 | "dist" : "Parse-FSM", 53 | "insecure_repo" : false, 54 | "name" : "Parse-FSM-1.13", 55 | "repo" : "https://github.com/pauloscustodio/perl-Parse-FSM", 56 | "repo_def_branch" : "master", 57 | "repo_name" : "perl-Parse-FSM", 58 | "repo_owner" : "pauloscustodio", 59 | "ver" : "1.13" 60 | }, 61 | { 62 | "auth" : "PSCUST", 63 | "date" : "2016-05-12", 64 | "dist" : "Preproc-Tiny", 65 | "insecure_repo" : false, 66 | "name" : "Preproc-Tiny-0.02", 67 | "repo" : "https://github.com/pauloscustodio/perl-Preproc-Tiny", 68 | "repo_def_branch" : "master", 69 | "repo_name" : "perl-Preproc-Tiny", 70 | "repo_owner" : "pauloscustodio", 71 | "ver" : "0.02" 72 | }, 73 | { 74 | "auth" : "PSCUST", 75 | "date" : "2023-05-18", 76 | "dist" : "Text-MacroScript", 77 | "insecure_repo" : false, 78 | "name" : "Text-MacroScript-2.14", 79 | "repo" : "https://github.com/pauloscustodio/Text-MacroScript", 80 | "repo_def_branch" : "master", 81 | "repo_name" : "Text-MacroScript", 82 | "repo_owner" : "pauloscustodio", 83 | "ver" : "2.14" 84 | } 85 | ], 86 | "sort" : { 87 | "column" : 0, 88 | "direction" : "asc" 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /authors/data/SLAFFAN/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SLAFFAN", 4 | "github" : "shawnlaffan", 5 | "gravatar" : "https://secure.gravatar.com/avatar/48789401bfe02f3f10da90999de66b79?s=130&d=identicon", 6 | "name" : "Shawn Laffan" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 1, 13 | "use_cirrus" : 1, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 0, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "SLAFFAN", 23 | "bugtracker" : "https://github.com/shawnlaffan/Alien-Build-Plugin-Cleanse-BuildDir/issues", 24 | "date" : "2022-08-30", 25 | "dist" : "Alien-Build-Plugin-Cleanse-BuildDir", 26 | "insecure_repo" : false, 27 | "name" : "Alien-Build-Plugin-Cleanse-BuildDir-0.06", 28 | "repo" : "https://github.com/shawnlaffan/Alien-Build-Plugin-Cleanse-BuildDir", 29 | "repo_def_branch" : "master", 30 | "repo_name" : "Alien-Build-Plugin-Cleanse-BuildDir", 31 | "repo_owner" : "shawnlaffan", 32 | "uses_rt" : false, 33 | "ver" : "0.06" 34 | }, 35 | { 36 | "auth" : "SLAFFAN", 37 | "bugtracker" : "https://github.com/shawnlaffan/Alien-Build-Plugin-PkgConfig-PPWrapper/issues", 38 | "date" : "2021-03-20", 39 | "dist" : "Alien-Build-Plugin-PkgConfig-PPWrapper", 40 | "insecure_repo" : false, 41 | "name" : "Alien-Build-Plugin-PkgConfig-PPWrapper-0.03", 42 | "repo" : "https://github.com/shawnlaffan/lib/Alien-Build-Plugin-PkgConfig-PPWrapper", 43 | "repo_def_branch" : "", 44 | "repo_name" : "lib/Alien-Build-Plugin-PkgConfig-PPWrapper", 45 | "repo_owner" : "shawnlaffan", 46 | "uses_rt" : false, 47 | "ver" : "0.03" 48 | }, 49 | { 50 | "auth" : "SLAFFAN", 51 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-freexl/issues/", 52 | "date" : "2022-12-06", 53 | "dist" : "Alien-freexl", 54 | "insecure_repo" : false, 55 | "name" : "Alien-freexl-1.05", 56 | "repo" : "https://github.com/shawnlaffan/perl-alien-freexl", 57 | "repo_def_branch" : "master", 58 | "repo_name" : "perl-alien-freexl", 59 | "repo_owner" : "shawnlaffan", 60 | "uses_rt" : false, 61 | "ver" : "1.05" 62 | }, 63 | { 64 | "auth" : "SLAFFAN", 65 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-gdal/issues/", 66 | "date" : "2024-05-28", 67 | "dist" : "Alien-gdal", 68 | "insecure_repo" : false, 69 | "name" : "Alien-gdal-1.37", 70 | "repo" : "https://github.com/shawnlaffan/perl-alien-gdal", 71 | "repo_def_branch" : "master", 72 | "repo_name" : "perl-alien-gdal", 73 | "repo_owner" : "shawnlaffan", 74 | "uses_rt" : false, 75 | "ver" : "1.37" 76 | }, 77 | { 78 | "auth" : "SLAFFAN", 79 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-geos/issues/", 80 | "date" : "2023-05-18", 81 | "dist" : "Alien-geos-af", 82 | "insecure_repo" : false, 83 | "name" : "Alien-geos-af-1.012", 84 | "repo" : "https://github.com/shawnlaffan/perl-alien-geos", 85 | "repo_def_branch" : "master", 86 | "repo_name" : "perl-alien-geos", 87 | "repo_owner" : "shawnlaffan", 88 | "uses_rt" : false, 89 | "ver" : "1.012" 90 | }, 91 | { 92 | "auth" : "SLAFFAN", 93 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-libtiff/issues/", 94 | "date" : "2020-05-03", 95 | "dist" : "Alien-libtiff", 96 | "insecure_repo" : false, 97 | "name" : "Alien-libtiff-1.01", 98 | "repo" : "https://github.com/shawnlaffan/perl-alien-libtiff", 99 | "repo_def_branch" : "master", 100 | "repo_name" : "perl-alien-libtiff", 101 | "repo_owner" : "shawnlaffan", 102 | "uses_rt" : false, 103 | "ver" : "1.01" 104 | }, 105 | { 106 | "auth" : "SLAFFAN", 107 | "bugtracker" : "https://github.com/PerlAlien/Alien-patchelf/issues/", 108 | "date" : "2022-04-21", 109 | "dist" : "Alien-patchelf", 110 | "insecure_repo" : false, 111 | "name" : "Alien-patchelf-0.08", 112 | "repo" : "https://github.com/PerlAlien/Alien-patchelf", 113 | "repo_def_branch" : "main", 114 | "repo_name" : "Alien-patchelf", 115 | "repo_owner" : "PerlAlien", 116 | "uses_rt" : false, 117 | "ver" : "0.08" 118 | }, 119 | { 120 | "auth" : "SLAFFAN", 121 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-proj/issues/", 122 | "date" : "2023-12-12", 123 | "dist" : "Alien-proj", 124 | "insecure_repo" : false, 125 | "name" : "Alien-proj-1.27", 126 | "repo" : "https://github.com/shawnlaffan/perl-alien-proj", 127 | "repo_def_branch" : "master", 128 | "repo_name" : "perl-alien-proj", 129 | "repo_owner" : "shawnlaffan", 130 | "uses_rt" : false, 131 | "ver" : "1.27" 132 | }, 133 | { 134 | "auth" : "SLAFFAN", 135 | "bugtracker" : "https://github.com/shawnlaffan/perl-alien-sqlite/issues/", 136 | "date" : "2022-09-18", 137 | "dist" : "Alien-sqlite", 138 | "insecure_repo" : false, 139 | "name" : "Alien-sqlite-1.07", 140 | "repo" : "https://github.com/shawnlaffan/perl-alien-sqlite", 141 | "repo_def_branch" : "master", 142 | "repo_name" : "perl-alien-sqlite", 143 | "repo_owner" : "shawnlaffan", 144 | "uses_rt" : false, 145 | "ver" : "1.07" 146 | }, 147 | { 148 | "auth" : "SLAFFAN", 149 | "bugtracker" : "https://github.com/shawnlaffan/perl-pp-autolink/issues/", 150 | "date" : "2023-10-28", 151 | "dist" : "App-PP-Autolink", 152 | "insecure_repo" : false, 153 | "name" : "App-PP-Autolink-2.12", 154 | "repo" : "https://github.com/shawnlaffan/perl-pp-autolink", 155 | "repo_def_branch" : "master", 156 | "repo_name" : "perl-pp-autolink", 157 | "repo_owner" : "shawnlaffan", 158 | "uses_rt" : false, 159 | "ver" : "2.12" 160 | }, 161 | { 162 | "auth" : "SLAFFAN", 163 | "date" : "2017-01-08", 164 | "dist" : "Geo-Converter-dms2dd", 165 | "insecure_repo" : false, 166 | "name" : "Geo-Converter-dms2dd-0.05", 167 | "repo" : "https://github.com/shawnlaffan/geo-converter-dms2dd", 168 | "repo_def_branch" : "master", 169 | "repo_name" : "geo-converter-dms2dd", 170 | "repo_owner" : "shawnlaffan", 171 | "ver" : "0.05" 172 | }, 173 | { 174 | "auth" : "SLAFFAN", 175 | "bugtracker" : "https://github.com/ajolma/Geo-GDAL-FFI/issues/", 176 | "date" : "2024-06-18", 177 | "dist" : "Geo-GDAL-FFI", 178 | "insecure_repo" : false, 179 | "name" : "Geo-GDAL-FFI-0.12", 180 | "repo" : "https://github.com/ajolma/Geo-GDAL-FFI", 181 | "repo_def_branch" : "master", 182 | "repo_name" : "Geo-GDAL-FFI", 183 | "repo_owner" : "ajolma", 184 | "uses_rt" : false, 185 | "ver" : 0.12 186 | }, 187 | { 188 | "auth" : "SLAFFAN", 189 | "bugtracker" : "https://github.com/shawnlaffan/Geo-ShapeFile/issues/", 190 | "date" : "2023-02-23", 191 | "dist" : "Geo-ShapeFile", 192 | "insecure_repo" : false, 193 | "name" : "Geo-ShapeFile-3.03", 194 | "repo" : "https://github.com/shawnlaffan/Geo-ShapeFile", 195 | "repo_def_branch" : "master", 196 | "repo_name" : "Geo-ShapeFile", 197 | "repo_owner" : "shawnlaffan", 198 | "uses_rt" : false, 199 | "ver" : "3.03" 200 | }, 201 | { 202 | "auth" : "SLAFFAN", 203 | "bugtracker" : "https://github.com/shawnlaffan/perl-List-Unique-DeterministicOrder/issues/", 204 | "date" : "2023-10-05", 205 | "dist" : "List-Unique-DeterministicOrder", 206 | "insecure_repo" : false, 207 | "name" : "List-Unique-DeterministicOrder-0.004", 208 | "repo" : "https://github.com/shawnlaffan/perl-List-Unique-DeterministicOrder", 209 | "repo_def_branch" : "master", 210 | "repo_name" : "perl-List-Unique-DeterministicOrder", 211 | "repo_owner" : "shawnlaffan", 212 | "uses_rt" : false, 213 | "ver" : 0.004 214 | }, 215 | { 216 | "auth" : "SLAFFAN", 217 | "bugtracker" : "https://github.com/shawnlaffan/Statistics-Descriptive-PDL/issues/", 218 | "date" : "2024-07-02", 219 | "dist" : "Statistics-Descriptive-PDL", 220 | "insecure_repo" : false, 221 | "name" : "Statistics-Descriptive-PDL-0.17", 222 | "repo" : "https://github.com/shawnlaffan/Statistics-Descriptive-PDL", 223 | "repo_def_branch" : "master", 224 | "repo_name" : "Statistics-Descriptive-PDL", 225 | "repo_owner" : "shawnlaffan", 226 | "uses_rt" : false, 227 | "ver" : "0.17" 228 | }, 229 | { 230 | "auth" : "SLAFFAN", 231 | "bugtracker" : "https://github.com/shawnlaffan/perl-statistics-sampler-multinomial/issues/", 232 | "date" : "2022-09-24", 233 | "dist" : "Statistics-Sampler-Multinomial", 234 | "insecure_repo" : false, 235 | "name" : "Statistics-Sampler-Multinomial-1.02", 236 | "repo" : "https://github.com/shawnlaffan/perl-statistics-sampler-multinomial", 237 | "repo_def_branch" : "master", 238 | "repo_name" : "perl-statistics-sampler-multinomial", 239 | "repo_owner" : "shawnlaffan", 240 | "uses_rt" : false, 241 | "ver" : "1.02" 242 | } 243 | ], 244 | "sort" : { 245 | "column" : 0, 246 | "direction" : "asc" 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /authors/data/SLU/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SLU", 4 | "github" : "soren", 5 | "gravatar" : "https://secure.gravatar.com/avatar/73a36c0741de4c5e128a31f3db4f90b3?s=130&d=identicon", 6 | "name" : "Søren Lund" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [], 10 | "use_coveralls" : 1, 11 | "use_gh_actions" : 0, 12 | "use_travis" : 1 13 | }, 14 | "modules" : [ 15 | { 16 | "auth" : "SLU", 17 | "bugtracker" : "https://github.com/soren/Acme-Be-Modern/issues", 18 | "date" : "2020-11-11", 19 | "dist" : "Acme-Be-Modern", 20 | "insecure_repo" : false, 21 | "name" : "Acme-Be-Modern-0.04", 22 | "repo" : "https://github.com/soren/Acme-Be-Modern", 23 | "repo_def_branch" : "master", 24 | "repo_name" : "Acme-Be-Modern", 25 | "repo_owner" : "soren", 26 | "uses_rt" : false, 27 | "ver" : "0.04" 28 | }, 29 | { 30 | "auth" : "SLU", 31 | "bugtracker" : "https://github.com/soren/App-TimeClock/issues", 32 | "date" : "2017-01-04", 33 | "dist" : "App-TimeClock", 34 | "insecure_repo" : false, 35 | "name" : "App-TimeClock-0.13", 36 | "repo" : "https://github.com/soren/App-TimeClock", 37 | "repo_def_branch" : "master", 38 | "repo_name" : "App-TimeClock", 39 | "repo_owner" : "soren", 40 | "uses_rt" : false, 41 | "ver" : "0.13" 42 | } 43 | ], 44 | "sort" : { 45 | "column" : 0, 46 | "direction" : "asc" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /authors/data/SZABGAB/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "SZABGAB", 4 | "github" : "szabgab", 5 | "gravatar" : "https://secure.gravatar.com/avatar/19821078d3ecf265b2af009548e98ef3?s=130&d=http%3A%2F%2Fwww.gravatar.com%2Favatar%2F4e0a6fe2acda5df6095514e7d6329e91%3Fs%3D130%26d%3Didenticon", 6 | "name" : "גאבור סבו - Gábor Szabó" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_codecov" : 0, 13 | "use_coveralls" : 1, 14 | "use_gh_actions" : 1, 15 | "use_travis" : 1 16 | }, 17 | "modules" : [ 18 | { 19 | "auth" : "SZABGAB", 20 | "bugtracker" : "https://github.com/szabgab/App-PerlTidy-Tk/issues", 21 | "date" : "2020-11-16", 22 | "dist" : "App-PerlTidy-Tk", 23 | "insecure_repo" : false, 24 | "name" : "App-PerlTidy-Tk-0.03", 25 | "repo" : "https://github.com/szabgab/App-PerlTidy-Tk", 26 | "repo_def_branch" : "master", 27 | "repo_name" : "App-PerlTidy-Tk", 28 | "repo_owner" : "szabgab", 29 | "uses_rt" : false, 30 | "ver" : "0.03" 31 | }, 32 | { 33 | "auth" : "SZABGAB", 34 | "bugtracker" : "https://github.com/szabgab/App-Tk-Deparse/issues", 35 | "date" : "2020-11-04", 36 | "dist" : "App-Tk-Deparse", 37 | "insecure_repo" : false, 38 | "name" : "App-Tk-Deparse-0.02", 39 | "repo" : "https://github.com/szabgab/App-Tk-Deparse", 40 | "repo_def_branch" : "master", 41 | "repo_name" : "App-Tk-Deparse", 42 | "repo_owner" : "szabgab", 43 | "uses_rt" : false, 44 | "ver" : "0.02" 45 | }, 46 | { 47 | "auth" : "SZABGAB", 48 | "bugtracker" : "https://github.com/szabgab/Array-Unique/issues", 49 | "date" : "2023-05-29", 50 | "dist" : "Array-Unique", 51 | "insecure_repo" : false, 52 | "name" : "Array-Unique-0.09", 53 | "repo" : "https://github.com/szabgab/Array-Unique", 54 | "repo_def_branch" : "main", 55 | "repo_name" : "Array-Unique", 56 | "repo_owner" : "szabgab", 57 | "uses_rt" : false, 58 | "ver" : "0.09" 59 | }, 60 | { 61 | "auth" : "SZABGAB", 62 | "bugtracker" : "https://github.com/szabgab/CAM-PDF-Annot/issues", 63 | "date" : "2023-05-29", 64 | "dist" : "CAM-PDF-Annot", 65 | "insecure_repo" : false, 66 | "name" : "CAM-PDF-Annot-0.10", 67 | "repo" : "https://github.com/szabgab/CAM-PDF-Annot", 68 | "repo_def_branch" : "master", 69 | "repo_name" : "CAM-PDF-Annot", 70 | "repo_owner" : "szabgab", 71 | "uses_rt" : false, 72 | "ver" : "0.10" 73 | }, 74 | { 75 | "auth" : "SZABGAB", 76 | "bugtracker" : "https://github.com/szabgab/CGI-Upload/issues", 77 | "date" : "2023-12-28", 78 | "dist" : "CGI-Upload", 79 | "insecure_repo" : false, 80 | "name" : "CGI-Upload-1.14", 81 | "repo" : "https://github.com/szabgab/CGI-Upload", 82 | "repo_def_branch" : "main", 83 | "repo_name" : "CGI-Upload", 84 | "repo_owner" : "szabgab", 85 | "uses_rt" : false, 86 | "ver" : "1.14" 87 | }, 88 | { 89 | "auth" : "SZABGAB", 90 | "bugtracker" : "https://github.com/szabgab/CPAN-Digger/issues", 91 | "date" : "2020-11-12", 92 | "dist" : "CPAN-Digger", 93 | "insecure_repo" : false, 94 | "name" : "CPAN-Digger-1.04", 95 | "repo" : "https://github.com/szabgab/CPAN-Digger", 96 | "repo_def_branch" : "main", 97 | "repo_name" : "CPAN-Digger", 98 | "repo_owner" : "szabgab", 99 | "uses_rt" : false, 100 | "ver" : "1.04" 101 | }, 102 | { 103 | "auth" : "SZABGAB", 104 | "bugtracker" : "https://github.com/szabgab/CPAN-Porters/issues", 105 | "date" : "2023-05-30", 106 | "dist" : "CPAN-Porters", 107 | "insecure_repo" : false, 108 | "name" : "CPAN-Porters-0.04", 109 | "repo" : "https://github.com/szabgab/CPAN-Porters", 110 | "repo_def_branch" : "main", 111 | "repo_name" : "CPAN-Porters", 112 | "repo_owner" : "szabgab", 113 | "uses_rt" : false, 114 | "ver" : "0.04" 115 | }, 116 | { 117 | "auth" : "SZABGAB", 118 | "date" : "2014-10-28", 119 | "dist" : "CPAN-Test-Dummy-SCO-Lacks", 120 | "insecure_repo" : false, 121 | "name" : "CPAN-Test-Dummy-SCO-Lacks-0.01", 122 | "repo" : "git://github.com/szabgab/CPAN-Test-Dummy-SCO.git", 123 | "repo_def_branch" : "master", 124 | "repo_name" : "CPAN-Test-Dummy-SCO", 125 | "repo_owner" : "szabgab", 126 | "ver" : "0.01" 127 | }, 128 | { 129 | "auth" : "SZABGAB", 130 | "date" : "2014-10-31", 131 | "dist" : "CPAN-Test-Dummy-SCO-Pirated", 132 | "insecure_repo" : true, 133 | "name" : "CPAN-Test-Dummy-SCO-Pirated-1.04", 134 | "repo" : "http://github.com/szabgab/CPAN-Test-Dummy-SCO", 135 | "repo_def_branch" : "master", 136 | "repo_name" : "CPAN-Test-Dummy-SCO", 137 | "repo_owner" : "szabgab", 138 | "ver" : "1.04" 139 | }, 140 | { 141 | "auth" : "SZABGAB", 142 | "date" : "2014-10-28", 143 | "dist" : "CPAN-Test-Dummy-SCO-Special", 144 | "insecure_repo" : true, 145 | "name" : "CPAN-Test-Dummy-SCO-Special-0.04", 146 | "repo" : "http://github.com/szabgab/CPAN-Test-Dummy-SCO", 147 | "repo_def_branch" : "master", 148 | "repo_name" : "CPAN-Test-Dummy-SCO", 149 | "repo_owner" : "szabgab", 150 | "ver" : "0.04" 151 | }, 152 | { 153 | "auth" : "SZABGAB", 154 | "bugtracker" : "https://github.com/szabgab/File-Tools/issues", 155 | "date" : "2023-06-02", 156 | "dist" : "File-Tools", 157 | "insecure_repo" : false, 158 | "name" : "File-Tools-0.10", 159 | "repo" : "https://github.com/szabgab/File-Tools", 160 | "repo_def_branch" : "master", 161 | "repo_name" : "File-Tools", 162 | "repo_owner" : "szabgab", 163 | "uses_rt" : false, 164 | "ver" : "0.10" 165 | }, 166 | { 167 | "auth" : "SZABGAB", 168 | "date" : "2017-10-25", 169 | "dist" : "Games-Sudoku-CLI", 170 | "insecure_repo" : true, 171 | "name" : "Games-Sudoku-CLI-0.02", 172 | "repo" : "http://github.com/szabgab/perl5-Games-Sudoku-CLI", 173 | "repo_def_branch" : "master", 174 | "repo_name" : "perl5-Games-Sudoku-CLI", 175 | "repo_owner" : "szabgab", 176 | "ver" : "0.02" 177 | }, 178 | { 179 | "auth" : "SZABGAB", 180 | "bugtracker" : "https://github.com/szabgab/perl5-markua-parser/issues", 181 | "date" : "2018-03-28", 182 | "dist" : "Markua-Parser", 183 | "insecure_repo" : false, 184 | "name" : "Markua-Parser-0.01", 185 | "repo" : "https://github.com/szabgab/perl5-markua-parser", 186 | "repo_def_branch" : "master", 187 | "repo_name" : "perl5-markua-parser", 188 | "repo_owner" : "szabgab", 189 | "uses_rt" : false, 190 | "ver" : 0.01 191 | }, 192 | { 193 | "auth" : "SZABGAB", 194 | "date" : "2012-07-27", 195 | "dist" : "Math-RPN", 196 | "insecure_repo" : false, 197 | "name" : "Math-RPN-1.11", 198 | "repo" : "https://github.com/szabgab/Math-RPN", 199 | "repo_def_branch" : "master", 200 | "repo_name" : "Math-RPN", 201 | "repo_owner" : "szabgab", 202 | "ver" : "1.11" 203 | }, 204 | { 205 | "auth" : "SZABGAB", 206 | "bugtracker" : "https://github.com/szabgab/MetaCPAN-Clients/issues", 207 | "date" : "2020-11-17", 208 | "dist" : "MetaCPAN-Clients", 209 | "insecure_repo" : false, 210 | "name" : "MetaCPAN-Clients-1.00", 211 | "repo" : "https://github.com/szabgab/MetaCPAN-Clients", 212 | "repo_def_branch" : "master", 213 | "repo_name" : "MetaCPAN-Clients", 214 | "repo_owner" : "szabgab", 215 | "uses_rt" : false, 216 | "ver" : "1.00" 217 | }, 218 | { 219 | "auth" : "SZABGAB", 220 | "bugtracker" : "http://padre.perlide.org/trac/", 221 | "date" : "2023-06-14", 222 | "dist" : "Padre", 223 | "insecure_repo" : false, 224 | "name" : "Padre-1.02", 225 | "repo" : "https://github.com/PadreIDE/Padre", 226 | "repo_def_branch" : "master", 227 | "repo_name" : "Padre", 228 | "repo_owner" : "PadreIDE", 229 | "uses_rt" : false, 230 | "ver" : "1.02" 231 | }, 232 | { 233 | "auth" : "SZABGAB", 234 | "bugtracker" : "https://github.com/PadreIDE/Parse-Functions/issues", 235 | "date" : "2014-09-12", 236 | "dist" : "Parse-Functions", 237 | "insecure_repo" : false, 238 | "name" : "Parse-Functions-0.01", 239 | "repo" : "https://github.com/PadreIDE/Parse-Functions", 240 | "repo_def_branch" : "master", 241 | "repo_name" : "Parse-Functions", 242 | "repo_owner" : "PadreIDE", 243 | "uses_rt" : false, 244 | "ver" : "0.01" 245 | }, 246 | { 247 | "auth" : "SZABGAB", 248 | "bugtracker" : "https://github.com/szabgab/Pipe/issues", 249 | "date" : "2023-06-01", 250 | "dist" : "Pipe", 251 | "insecure_repo" : false, 252 | "name" : "Pipe-0.06", 253 | "repo" : "https://github.com/szabgab/Pipe", 254 | "repo_def_branch" : "master", 255 | "repo_name" : "Pipe", 256 | "repo_owner" : "szabgab", 257 | "uses_rt" : false, 258 | "ver" : "0.06" 259 | }, 260 | { 261 | "auth" : "SZABGAB", 262 | "bugtracker" : "https://github.com/szabgab/Pipe-Tube-Csv/issues", 263 | "date" : "2023-06-01", 264 | "dist" : "Pipe-Tube-Csv", 265 | "insecure_repo" : false, 266 | "name" : "Pipe-Tube-Csv-0.05", 267 | "repo" : "https://github.com/szabgab/Pipe-Tube-Csv", 268 | "repo_def_branch" : "master", 269 | "repo_name" : "Pipe-Tube-Csv", 270 | "repo_owner" : "szabgab", 271 | "uses_rt" : false, 272 | "ver" : "0.05" 273 | }, 274 | { 275 | "auth" : "SZABGAB", 276 | "date" : "2014-05-24", 277 | "dist" : "Task-DWIM-Linux", 278 | "insecure_repo" : false, 279 | "name" : "Task-DWIM-Linux-0.10", 280 | "repo" : "https://github.com/dwimperl/Task-DWIM", 281 | "repo_def_branch" : "master", 282 | "repo_name" : "Task-DWIM", 283 | "repo_owner" : "dwimperl", 284 | "ver" : "0.10" 285 | }, 286 | { 287 | "auth" : "SZABGAB", 288 | "bugtracker" : "https://github.com/szabgab/Task-Test", 289 | "date" : "2014-08-14", 290 | "dist" : "Task-Test", 291 | "insecure_repo" : false, 292 | "name" : "Task-Test-0.06", 293 | "repo" : "https://github.com/szabgab/Task-Test", 294 | "repo_def_branch" : "master", 295 | "repo_name" : "Task-Test", 296 | "repo_owner" : "szabgab", 297 | "uses_rt" : false, 298 | "ver" : "0.06" 299 | }, 300 | { 301 | "auth" : "SZABGAB", 302 | "date" : "2014-08-26", 303 | "dist" : "Term-ReadPassword-Win32", 304 | "insecure_repo" : false, 305 | "name" : "Term-ReadPassword-Win32-0.05", 306 | "repo" : "https://github.com/szabgab/Term-ReadPassword-Win32", 307 | "repo_def_branch" : "master", 308 | "repo_name" : "Term-ReadPassword-Win32", 309 | "repo_owner" : "szabgab", 310 | "ver" : "0.05" 311 | }, 312 | { 313 | "auth" : "SZABGAB", 314 | "bugtracker" : "http://github.com/szabgab/Test-CircularDependencies", 315 | "date" : "2015-09-23", 316 | "dist" : "Test-CircularDependencies", 317 | "insecure_repo" : true, 318 | "name" : "Test-CircularDependencies-0.02", 319 | "repo" : "http://github.com/szabgab/Test-CircularDependencies", 320 | "repo_def_branch" : "master", 321 | "repo_name" : "Test-CircularDependencies", 322 | "repo_owner" : "szabgab", 323 | "uses_rt" : false, 324 | "ver" : "0.02" 325 | }, 326 | { 327 | "auth" : "SZABGAB", 328 | "bugtracker" : "https://github.com/szabgab/test-class/issues", 329 | "date" : "2021-02-17", 330 | "dist" : "Test-Class", 331 | "insecure_repo" : false, 332 | "name" : "Test-Class-0.52", 333 | "repo" : "https://github.com/szabgab/test-class", 334 | "repo_def_branch" : "master", 335 | "repo_name" : "test-class", 336 | "repo_owner" : "szabgab", 337 | "uses_rt" : false, 338 | "ver" : "0.52" 339 | }, 340 | { 341 | "auth" : "SZABGAB", 342 | "date" : "2009-04-10", 343 | "dist" : "Test-Snapshots", 344 | "insecure_repo" : true, 345 | "name" : "Test-Snapshots-0.02", 346 | "repo" : "http://github.com/szabgab/test-snapshots", 347 | "repo_def_branch" : "master", 348 | "repo_name" : "test-snapshots", 349 | "repo_owner" : "szabgab", 350 | "ver" : "0.02" 351 | }, 352 | { 353 | "auth" : "SZABGAB", 354 | "bugtracker" : "http://github.com/szabgab/Text-MediawikiFormat/issues", 355 | "date" : "2014-12-01", 356 | "dist" : "Text-MediawikiFormat", 357 | "insecure_repo" : true, 358 | "name" : "Text-MediawikiFormat-1.04", 359 | "repo" : "http://github.com/szabgab/Text-MediawikiFormat", 360 | "repo_def_branch" : "master", 361 | "repo_name" : "Text-MediawikiFormat", 362 | "repo_owner" : "szabgab", 363 | "uses_rt" : false, 364 | "ver" : "1.04" 365 | }, 366 | { 367 | "auth" : "SZABGAB", 368 | "date" : "2013-09-27", 369 | "dist" : "WWW-AdServer", 370 | "insecure_repo" : false, 371 | "name" : "WWW-AdServer-1.01", 372 | "repo" : "https://github.com/szabgab/WWW-AdServer", 373 | "repo_def_branch" : "master", 374 | "repo_name" : "WWW-AdServer", 375 | "repo_owner" : "szabgab", 376 | "ver" : "1.01" 377 | }, 378 | { 379 | "auth" : "SZABGAB", 380 | "bugtracker" : "https://github.com/szabgab/Web-Feed/issues", 381 | "date" : "2023-05-29", 382 | "dist" : "Web-Feed", 383 | "insecure_repo" : false, 384 | "name" : "Web-Feed-0.12", 385 | "repo" : "https://github.com/szabgab/Web-Feed", 386 | "repo_def_branch" : "master", 387 | "repo_name" : "Web-Feed", 388 | "repo_owner" : "szabgab", 389 | "uses_rt" : false, 390 | "ver" : "0.12" 391 | }, 392 | { 393 | "auth" : "SZABGAB", 394 | "date" : "2013-10-18", 395 | "dist" : "WebService-GData", 396 | "insecure_repo" : false, 397 | "name" : "WebService-GData-0.06", 398 | "repo" : "https://github.com/szabgab/WebService-GData", 399 | "repo_def_branch" : "master", 400 | "repo_name" : "WebService-GData", 401 | "repo_owner" : "szabgab", 402 | "ver" : "0.06" 403 | } 404 | ], 405 | "sort" : { 406 | "column" : 3, 407 | "direction" : "desc" 408 | } 409 | } 410 | -------------------------------------------------------------------------------- /authors/data/TEODESIAN/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "TEODESIAN", 4 | "github" : "teodesian", 5 | "gravatar" : "http://teodesian.net/about/doge/cpanlulz-optimized-small.png", 6 | "name" : "George S. Baugh" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "CI" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 1, 16 | "use_gh_actions" : 0, 17 | "use_travis" : 1, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "TEODESIAN", 23 | "bugtracker" : "https://github.com/teodesian/App-Prove-Elasticsearch/issues", 24 | "date" : "2018-06-18", 25 | "dist" : "App-Prove-Plugin-Elasticsearch", 26 | "insecure_repo" : false, 27 | "name" : "App-Prove-Plugin-Elasticsearch-0.001", 28 | "repo" : "https://github.com/teodesian/App-Prove-Elasticsearch", 29 | "repo_def_branch" : "master", 30 | "repo_name" : "App-Prove-Elasticsearch", 31 | "repo_owner" : "teodesian", 32 | "uses_rt" : false, 33 | "ver" : "0.001" 34 | }, 35 | { 36 | "auth" : "TEODESIAN", 37 | "bugtracker" : "https://github.com/Troglodyne-Internet-Widgets/Audit-Log-perl/issues", 38 | "date" : "2023-07-11", 39 | "dist" : "Audit-Log", 40 | "insecure_repo" : false, 41 | "name" : "Audit-Log-0.005", 42 | "repo" : "https://github.com/Troglodyne-Internet-Widgets/Audit-Log-perl", 43 | "repo_def_branch" : "master", 44 | "repo_name" : "Audit-Log-perl", 45 | "repo_owner" : "Troglodyne-Internet-Widgets", 46 | "uses_rt" : false, 47 | "ver" : "0.005" 48 | }, 49 | { 50 | "auth" : "TEODESIAN", 51 | "bugtracker" : "https://github.com/teodesian/perl-Github-ReleaseFetcher/issues", 52 | "date" : "2024-08-13", 53 | "dist" : "Github-ReleaseFetcher", 54 | "insecure_repo" : false, 55 | "name" : "Github-ReleaseFetcher-1.001", 56 | "repo" : "https://github.com/teodesian/perl-Github-ReleaseFetcher", 57 | "repo_def_branch" : "", 58 | "repo_name" : "perl-Github-ReleaseFetcher", 59 | "repo_owner" : "teodesian", 60 | "uses_rt" : false, 61 | "ver" : "1.001" 62 | }, 63 | { 64 | "auth" : "TEODESIAN", 65 | "bugtracker" : "https://github.com/Troglodyne-Internet-Widgets/Microsoft-Translator-Perl/issues", 66 | "date" : "2023-10-26", 67 | "dist" : "Microsoft-Translator", 68 | "insecure_repo" : false, 69 | "name" : "Microsoft-Translator-0.001", 70 | "repo" : "https://github.com/Troglodyne-Internet-Widgets/Microsoft-Translator-Perl.git", 71 | "repo_def_branch" : "master", 72 | "repo_name" : "Microsoft-Translator-Perl", 73 | "repo_owner" : "Troglodyne-Internet-Widgets", 74 | "uses_rt" : false, 75 | "ver" : "0.001" 76 | }, 77 | { 78 | "auth" : "TEODESIAN", 79 | "bugtracker" : "https://github.com/teodesian/playwright-perl/issues", 80 | "date" : "2024-08-12", 81 | "dist" : "Playwright", 82 | "insecure_repo" : false, 83 | "name" : "Playwright-1.460", 84 | "repo" : "https://github.com/teodesian/playwright-perl", 85 | "repo_def_branch" : "main", 86 | "repo_name" : "playwright-perl", 87 | "repo_owner" : "teodesian", 88 | "uses_rt" : false, 89 | "ver" : "1.460" 90 | }, 91 | { 92 | "auth" : "TEODESIAN", 93 | "bugtracker" : "https://github.com/teodesian/RPM-Verify/issues", 94 | "date" : "2023-12-06", 95 | "dist" : "RPM-Verify", 96 | "insecure_repo" : false, 97 | "name" : "RPM-Verify-1.000", 98 | "repo" : "https://github.com/teodesian/RPM-Verify.git", 99 | "repo_def_branch" : "", 100 | "repo_name" : "RPM-Verify", 101 | "repo_owner" : "teodesian", 102 | "uses_rt" : false, 103 | "ver" : "1.000" 104 | }, 105 | { 106 | "auth" : "TEODESIAN", 107 | "bugtracker" : "https://github.com/troglodyne-internet-widgets/selenium-client-perl/issues", 108 | "date" : "2024-08-14", 109 | "dist" : "Selenium-Client", 110 | "insecure_repo" : false, 111 | "name" : "Selenium-Client-2.01", 112 | "repo" : "https://github.com/troglodyne-internet-widgets/selenium-client-perl", 113 | "repo_def_branch" : "main", 114 | "repo_name" : "selenium-client-perl", 115 | "repo_owner" : "troglodyne-internet-widgets", 116 | "uses_rt" : false, 117 | "ver" : "2.01" 118 | }, 119 | { 120 | "auth" : "TEODESIAN", 121 | "bugtracker" : "https://github.com/teodesian/Selenium-Remote-Driver/issues", 122 | "date" : "2023-04-06", 123 | "dist" : "Selenium-Remote-Driver", 124 | "insecure_repo" : false, 125 | "name" : "Selenium-Remote-Driver-1.49", 126 | "repo" : "https://github.com/teodesian/Selenium-Remote-Driver", 127 | "repo_def_branch" : "master", 128 | "repo_name" : "Selenium-Remote-Driver", 129 | "repo_owner" : "teodesian", 130 | "uses_rt" : false, 131 | "ver" : "1.49" 132 | }, 133 | { 134 | "auth" : "TEODESIAN", 135 | "bugtracker" : "https://rt.cpan.org/Public/Dist/Display.html?Name=TestLink-API", 136 | "date" : "2014-12-05", 137 | "dist" : "TestLink-API", 138 | "insecure_repo" : false, 139 | "name" : "TestLink-API-0.011", 140 | "repo" : "git://github.com/teodesian/TestLink-Perl.git", 141 | "repo_def_branch" : "master", 142 | "repo_name" : "TestLink-Perl", 143 | "repo_owner" : "teodesian", 144 | "uses_rt" : true, 145 | "ver" : "0.011" 146 | }, 147 | { 148 | "auth" : "TEODESIAN", 149 | "bugtracker" : "https://github.com/teodesian/TestRail-Perl/issues", 150 | "date" : "2022-09-11", 151 | "dist" : "TestRail-API", 152 | "insecure_repo" : false, 153 | "name" : "TestRail-API-0.052", 154 | "repo" : "https://github.com/teodesian/TestRail-Perl", 155 | "repo_def_branch" : "master", 156 | "repo_name" : "TestRail-Perl", 157 | "repo_owner" : "teodesian", 158 | "uses_rt" : false, 159 | "ver" : "0.052" 160 | }, 161 | { 162 | "auth" : "TEODESIAN", 163 | "bugtracker" : "https://github.com/teodesian/Trog-TOTP/issues", 164 | "date" : "2024-06-19", 165 | "dist" : "Trog-TOTP", 166 | "insecure_repo" : false, 167 | "name" : "Trog-TOTP-1.005", 168 | "repo" : "https://github.com/teodesian/Trog-TOTP.git", 169 | "repo_def_branch" : "master", 170 | "repo_name" : "Trog-TOTP", 171 | "repo_owner" : "teodesian", 172 | "uses_rt" : false, 173 | "ver" : "1.005" 174 | }, 175 | { 176 | "auth" : "TEODESIAN", 177 | "bugtracker" : "https://github.com/Troglodyne-Internet-Widgets/URI-Shorten/issues", 178 | "date" : "2024-05-08", 179 | "dist" : "URI-Shortener", 180 | "insecure_repo" : false, 181 | "name" : "URI-Shortener-1.003", 182 | "repo" : "https://github.com/Troglodyne-Internet-Widgets/URI-Shorten", 183 | "repo_def_branch" : "master", 184 | "repo_name" : "URI-Shorten", 185 | "repo_owner" : "Troglodyne-Internet-Widgets", 186 | "uses_rt" : false, 187 | "ver" : "1.003" 188 | } 189 | ], 190 | "sort" : { 191 | "column" : 0, 192 | "direction" : "asc" 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /authors/data/TODDR/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "TODDR", 4 | "github" : "toddr", 5 | "gravatar" : "https://secure.gravatar.com/avatar/593351ab4ba45a73fb5de512d89432d2?s=130&d=http%3A%2F%2Fwww.gravatar.com%2Favatar%2F593351ab4ba45a73fb5de512d89432d2%3Fs%3D130%26d%3Didenticon", 6 | "name" : "Todd Rinaldo" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "ubuntu", 11 | "macos", 12 | "windows", 13 | "testsuite", 14 | "bsd", 15 | "windows_installation" 16 | ], 17 | "use_appveyor" : 0, 18 | "use_codecov" : 0, 19 | "use_coveralls" : 0, 20 | "use_gh_actions" : 1, 21 | "use_travis" : 0 22 | }, 23 | "modules" : [ 24 | { 25 | "auth" : "TODDR", 26 | "bugtracker" : "https://github.com/toddr/Business-UPS/issues", 27 | "date" : "2021-01-22", 28 | "dist" : "Business-UPS", 29 | "insecure_repo" : false, 30 | "name" : "Business-UPS-2.02", 31 | "repo" : "https://github.com/toddr/Business-UPS", 32 | "repo_def_branch" : "master", 33 | "repo_name" : "Business-UPS", 34 | "repo_owner" : "toddr", 35 | "uses_rt" : false, 36 | "ver" : "2.02" 37 | }, 38 | { 39 | "auth" : "TODDR", 40 | "bugtracker" : "https://github.com/toddr/CDB_File/issues", 41 | "date" : "2020-12-11", 42 | "dist" : "CDB_File", 43 | "insecure_repo" : false, 44 | "name" : "CDB_File-1.05", 45 | "repo" : "https://github.com/toddr/CDB_File", 46 | "repo_def_branch" : "master", 47 | "repo_name" : "CDB_File", 48 | "repo_owner" : "toddr", 49 | "uses_rt" : false, 50 | "ver" : "1.05" 51 | }, 52 | { 53 | "auth" : "TODDR", 54 | "bugtracker" : "https://github.com/toddr/Crypt-OpenSSL-RSA/issues", 55 | "date" : "2022-07-08", 56 | "dist" : "Crypt-OpenSSL-RSA", 57 | "insecure_repo" : true, 58 | "name" : "Crypt-OpenSSL-RSA-0.33", 59 | "repo" : "http://github.com/toddr/Crypt-OpenSSL-RSA", 60 | "repo_def_branch" : "master", 61 | "repo_name" : "Crypt-OpenSSL-RSA", 62 | "repo_owner" : "toddr", 63 | "uses_rt" : false, 64 | "ver" : "0.33" 65 | }, 66 | { 67 | "auth" : "TODDR", 68 | "bugtracker" : "https://github.com/toddr/Crypt-RIPEMD160/issues", 69 | "date" : "2020-10-21", 70 | "dist" : "Crypt-RIPEMD160", 71 | "insecure_repo" : false, 72 | "name" : "Crypt-RIPEMD160-0.08", 73 | "repo" : "https://github.com/toddr/Crypt-RIPEMD160/tree/master", 74 | "repo_def_branch" : "", 75 | "repo_name" : "Crypt-RIPEMD160/tree/master", 76 | "repo_owner" : "toddr", 77 | "uses_rt" : false, 78 | "ver" : "0.08" 79 | }, 80 | { 81 | "auth" : "TODDR", 82 | "bugtracker" : "https://github.com/Dual-Life/digest/issues", 83 | "date" : "2021-08-24", 84 | "dist" : "Digest", 85 | "insecure_repo" : false, 86 | "name" : "Digest-1.20", 87 | "repo" : "https://github.com/Dual-Life/digest", 88 | "repo_def_branch" : "master", 89 | "repo_name" : "digest", 90 | "repo_owner" : "Dual-Life", 91 | "uses_rt" : false, 92 | "ver" : "1.20" 93 | }, 94 | { 95 | "auth" : "TODDR", 96 | "bugtracker" : "https://github.com/Dual-Life/digest-md5/issues", 97 | "date" : "2023-12-30", 98 | "dist" : "Digest-MD5", 99 | "insecure_repo" : false, 100 | "name" : "Digest-MD5-2.59", 101 | "repo" : "https://github.com/dual-Life/digest-md5", 102 | "repo_def_branch" : "master", 103 | "repo_name" : "digest-md5", 104 | "repo_owner" : "dual-Life", 105 | "uses_rt" : false, 106 | "ver" : "2.59" 107 | }, 108 | { 109 | "auth" : "TODDR", 110 | "bugtracker" : "https://github.com/Perl/perl5/issues", 111 | "date" : "2023-12-30", 112 | "dist" : "Exporter", 113 | "insecure_repo" : false, 114 | "name" : "Exporter-5.78", 115 | "repo" : "https://github.com/Perl/perl5/tree/blead/dist/Exporter", 116 | "repo_def_branch" : "", 117 | "repo_name" : "perl5/tree/blead/dist/Exporter", 118 | "repo_owner" : "Perl", 119 | "uses_rt" : false, 120 | "ver" : "5.78" 121 | }, 122 | { 123 | "auth" : "TODDR", 124 | "bugtracker" : "https://github.com/perl/perl5/issues", 125 | "date" : "2023-12-29", 126 | "dist" : "FindBin", 127 | "insecure_repo" : false, 128 | "name" : "FindBin-1.54", 129 | "repo" : "https://github.com/perl/perl5", 130 | "repo_def_branch" : "blead", 131 | "repo_name" : "perl5", 132 | "repo_owner" : "perl", 133 | "uses_rt" : false, 134 | "ver" : "1.54" 135 | }, 136 | { 137 | "auth" : "TODDR", 138 | "bugtracker" : "https://github.com/perl/perl5/issues", 139 | "date" : "2023-12-30", 140 | "dist" : "IO", 141 | "insecure_repo" : false, 142 | "name" : "IO-1.55", 143 | "repo" : "https://github.com/Perl/perl5/tree/blead/dist/IO", 144 | "repo_def_branch" : "", 145 | "repo_name" : "perl5/tree/blead/dist/IO", 146 | "repo_owner" : "Perl", 147 | "uses_rt" : false, 148 | "ver" : "1.55" 149 | }, 150 | { 151 | "auth" : "TODDR", 152 | "bugtracker" : "http://github.com/toddr/IO-Stty/issues", 153 | "date" : "2020-01-19", 154 | "dist" : "IO-Stty", 155 | "insecure_repo" : true, 156 | "name" : "IO-Stty-0.04", 157 | "repo" : "http://github.com/toddr/IO-Stty", 158 | "repo_def_branch" : "master", 159 | "repo_name" : "IO-Stty", 160 | "repo_owner" : "toddr", 161 | "uses_rt" : false, 162 | "ver" : "0.04" 163 | }, 164 | { 165 | "auth" : "TODDR", 166 | "bugtracker" : "https://github.com/toddr/IO-Tty/issues", 167 | "date" : "2023-12-28", 168 | "dist" : "IO-Tty", 169 | "insecure_repo" : false, 170 | "name" : "IO-Tty-1.20", 171 | "repo" : "https://github.com/toddr/IO-Tty", 172 | "repo_def_branch" : "master", 173 | "repo_name" : "IO-Tty", 174 | "repo_owner" : "toddr", 175 | "uses_rt" : false, 176 | "ver" : "1.20" 177 | }, 178 | { 179 | "auth" : "TODDR", 180 | "bugtracker" : "https://github.com/toddr/IPC-Run/issues", 181 | "date" : "2023-10-03", 182 | "dist" : "IPC-Run", 183 | "insecure_repo" : false, 184 | "name" : "IPC-Run-20231003.0", 185 | "repo" : "https://github.com/toddr/IPC-Run", 186 | "repo_def_branch" : "master", 187 | "repo_name" : "IPC-Run", 188 | "repo_owner" : "toddr", 189 | "uses_rt" : false, 190 | "ver" : "20231003.0" 191 | }, 192 | { 193 | "auth" : "TODDR", 194 | "bugtracker" : "https://github.com/perl/perl5/issues", 195 | "date" : "2023-12-30", 196 | "dist" : "Locale-Maketext", 197 | "insecure_repo" : false, 198 | "name" : "Locale-Maketext-1.33", 199 | "repo" : "https://github.com/Perl/perl5/tree/blead/dist/Locale-Maketext", 200 | "repo_def_branch" : "", 201 | "repo_name" : "perl5/tree/blead/dist/Locale-Maketext", 202 | "repo_owner" : "Perl", 203 | "uses_rt" : false, 204 | "ver" : "1.33" 205 | }, 206 | { 207 | "auth" : "TODDR", 208 | "bugtracker" : "https://github.com/toddr/Net-Daemon/issues", 209 | "date" : "2020-09-25", 210 | "dist" : "Net-Daemon", 211 | "insecure_repo" : false, 212 | "name" : "Net-Daemon-0.49", 213 | "repo" : "https://github.com/toddr/Net-Daemon", 214 | "repo_def_branch" : "master", 215 | "repo_name" : "Net-Daemon", 216 | "repo_owner" : "toddr", 217 | "uses_rt" : false, 218 | "ver" : "0.49" 219 | }, 220 | { 221 | "auth" : "TODDR", 222 | "bugtracker" : "http://github.com/toddr/Net-Ident/issues", 223 | "date" : "2020-01-19", 224 | "dist" : "Net-Ident", 225 | "insecure_repo" : true, 226 | "name" : "Net-Ident-1.25", 227 | "repo" : "http://github.com/toddr/Net-Ident", 228 | "repo_def_branch" : "master", 229 | "repo_name" : "Net-Ident", 230 | "repo_owner" : "toddr", 231 | "uses_rt" : false, 232 | "ver" : "1.25" 233 | }, 234 | { 235 | "auth" : "TODDR", 236 | "bugtracker" : "https://github.com/toddr/perl-net-jabber-bot/issues", 237 | "date" : "2020-11-15", 238 | "dist" : "Net-Jabber-Bot", 239 | "insecure_repo" : true, 240 | "name" : "Net-Jabber-Bot-2.1.7", 241 | "repo" : "http://github.com/toddr/perl-net-jabber-bot/tree/master", 242 | "repo_def_branch" : "", 243 | "repo_name" : "perl-net-jabber-bot/tree/master", 244 | "repo_owner" : "toddr", 245 | "uses_rt" : false, 246 | "ver" : "v2.1.7" 247 | }, 248 | { 249 | "auth" : "TODDR", 250 | "date" : "2010-10-07", 251 | "dist" : "Net-OSCAR", 252 | "insecure_repo" : false, 253 | "name" : "Net-OSCAR-1.928", 254 | "repo" : "git://github.com/toddr/net-oscar.git", 255 | "repo_def_branch" : "master", 256 | "repo_name" : "net-oscar", 257 | "repo_owner" : "toddr", 258 | "ver" : "1.928" 259 | }, 260 | { 261 | "auth" : "TODDR", 262 | "bugtracker" : "https://github.com/toddr/Razor2-Client-Agent/issues", 263 | "date" : "2019-06-03", 264 | "dist" : "Razor2-Client-Agent", 265 | "insecure_repo" : true, 266 | "name" : "Razor2-Client-Agent-2.86", 267 | "repo" : "http://github.com/toddr/Razor2-Client-Agent", 268 | "repo_def_branch" : "master", 269 | "repo_name" : "Razor2-Client-Agent", 270 | "repo_owner" : "toddr", 271 | "uses_rt" : false, 272 | "ver" : "2.86" 273 | }, 274 | { 275 | "auth" : "TODDR", 276 | "bugtracker" : "https://github.com/toddr/Regexp-Parser/issues", 277 | "date" : "2020-01-20", 278 | "dist" : "Regexp-Parser", 279 | "insecure_repo" : true, 280 | "name" : "Regexp-Parser-0.23", 281 | "repo" : "http://github.com/toddr/Regexp-Parser/tree/master", 282 | "repo_def_branch" : "", 283 | "repo_name" : "Regexp-Parser/tree/master", 284 | "repo_owner" : "toddr", 285 | "uses_rt" : false, 286 | "ver" : "0.23" 287 | }, 288 | { 289 | "auth" : "TODDR", 290 | "bugtracker" : "https://github.com/toddr/Safe-Hole/issues", 291 | "date" : "2018-04-13", 292 | "dist" : "Safe-Hole", 293 | "insecure_repo" : false, 294 | "name" : "Safe-Hole-0.14", 295 | "repo" : "git://github.com/toddr/Safe-Hole.git", 296 | "repo_def_branch" : "master", 297 | "repo_name" : "Safe-Hole", 298 | "repo_owner" : "toddr", 299 | "uses_rt" : false, 300 | "ver" : "0.14" 301 | }, 302 | { 303 | "auth" : "TODDR", 304 | "bugtracker" : "https://github.com/toddr/Sys-Mmap/issues", 305 | "date" : "2020-02-13", 306 | "dist" : "Sys-Mmap", 307 | "insecure_repo" : true, 308 | "name" : "Sys-Mmap-0.20", 309 | "repo" : "http://github.com/toddr/Sys-Mmap/tree/master", 310 | "repo_def_branch" : "", 311 | "repo_name" : "Sys-Mmap/tree/master", 312 | "repo_owner" : "toddr", 313 | "uses_rt" : false, 314 | "ver" : "0.20" 315 | }, 316 | { 317 | "auth" : "TODDR", 318 | "bugtracker" : "https://github.com/xsawyerx/template-plugin-cgi/issues", 319 | "date" : "2022-04-27", 320 | "dist" : "Template-Plugin-CGI", 321 | "insecure_repo" : false, 322 | "name" : "Template-Plugin-CGI-3.101", 323 | "repo" : "https://github.com/xsawyerx/template-plugin-cgi", 324 | "repo_def_branch" : "main", 325 | "repo_name" : "template-plugin-cgi", 326 | "repo_owner" : "xsawyerx", 327 | "uses_rt" : false, 328 | "ver" : "3.101" 329 | }, 330 | { 331 | "auth" : "TODDR", 332 | "bugtracker" : "https://github.com/abw/Template2/issues", 333 | "date" : "2024-06-21", 334 | "dist" : "Template-Toolkit", 335 | "insecure_repo" : false, 336 | "name" : "Template-Toolkit-3.102", 337 | "repo" : "https://github.com/abw/Template2", 338 | "repo_def_branch" : "master", 339 | "repo_name" : "Template2", 340 | "repo_owner" : "abw", 341 | "uses_rt" : false, 342 | "ver" : "3.102" 343 | }, 344 | { 345 | "auth" : "TODDR", 346 | "bugtracker" : "https://github.com/cpanelinc/Test-MockFile/issues", 347 | "date" : "2023-07-26", 348 | "dist" : "Test-MockFile", 349 | "insecure_repo" : false, 350 | "name" : "Test-MockFile-0.036", 351 | "repo" : "https://github.com/cpanelinc/Test-MockFile", 352 | "repo_def_branch" : "master", 353 | "repo_name" : "Test-MockFile", 354 | "repo_owner" : "cpanelinc", 355 | "uses_rt" : false, 356 | "ver" : "0.036" 357 | }, 358 | { 359 | "auth" : "TODDR", 360 | "bugtracker" : "https://github.com/cpanelinc/Test2-Harness-Renderer-JUnit/issues", 361 | "date" : "2023-12-28", 362 | "dist" : "Test2-Harness-Renderer-JUnit", 363 | "insecure_repo" : false, 364 | "name" : "Test2-Harness-Renderer-JUnit-1.000005", 365 | "repo" : "https://github.com/cpanelinc/Test2-Harness-Renderer-JUnit", 366 | "repo_def_branch" : "main", 367 | "repo_name" : "Test2-Harness-Renderer-JUnit", 368 | "repo_owner" : "cpanelinc", 369 | "uses_rt" : false, 370 | "ver" : "1.000005" 371 | }, 372 | { 373 | "auth" : "TODDR", 374 | "bugtracker" : "http://github.com/toddr/Tie-DBI/issues", 375 | "date" : "2020-01-19", 376 | "dist" : "Tie-DBI", 377 | "insecure_repo" : true, 378 | "name" : "Tie-DBI-1.08", 379 | "repo" : "http://github.com/toddr/Tie-DBI", 380 | "repo_def_branch" : "master", 381 | "repo_name" : "Tie-DBI", 382 | "repo_owner" : "toddr", 383 | "uses_rt" : false, 384 | "ver" : "1.08" 385 | }, 386 | { 387 | "auth" : "TODDR", 388 | "bugtracker" : "https://github.com/Perl/perl5/issues", 389 | "date" : "2023-02-20", 390 | "dist" : "Tie-File", 391 | "insecure_repo" : false, 392 | "name" : "Tie-File-1.07", 393 | "repo" : "https://github.com/Perl/perl5/tree/blead/dist/Tie-File", 394 | "repo_def_branch" : "", 395 | "repo_name" : "perl5/tree/blead/dist/Tie-File", 396 | "repo_owner" : "Perl", 397 | "uses_rt" : false, 398 | "ver" : "1.07" 399 | }, 400 | { 401 | "auth" : "TODDR", 402 | "bugtracker" : "https://github.com/toddr/Tree-MultiNode/issues", 403 | "date" : "2021-01-22", 404 | "dist" : "Tree-MultiNode", 405 | "insecure_repo" : false, 406 | "name" : "Tree-MultiNode-1.0.14", 407 | "repo" : "https://github.com/toddr/Tree-MultiNode", 408 | "repo_def_branch" : "master", 409 | "repo_name" : "Tree-MultiNode", 410 | "repo_owner" : "toddr", 411 | "uses_rt" : false, 412 | "ver" : "v1.0.14" 413 | }, 414 | { 415 | "auth" : "TODDR", 416 | "bugtracker" : "https://github.com/toddr/XML-Parser/issues", 417 | "date" : "2023-12-29", 418 | "dist" : "XML-Parser", 419 | "insecure_repo" : true, 420 | "name" : "XML-Parser-2.47", 421 | "repo" : "http://github.com/toddr/XML-Parser", 422 | "repo_def_branch" : "master", 423 | "repo_name" : "XML-Parser", 424 | "repo_owner" : "toddr", 425 | "uses_rt" : false, 426 | "ver" : "2.47" 427 | }, 428 | { 429 | "auth" : "TODDR", 430 | "bugtracker" : "https://github.com/toddr/YAML-Syck/issues", 431 | "date" : "2020-10-26", 432 | "dist" : "YAML-Syck", 433 | "insecure_repo" : true, 434 | "name" : "YAML-Syck-1.34", 435 | "repo" : "http://github.com/toddr/YAML-Syck", 436 | "repo_def_branch" : "master", 437 | "repo_name" : "YAML-Syck", 438 | "repo_owner" : "toddr", 439 | "uses_rt" : false, 440 | "ver" : "1.34" 441 | }, 442 | { 443 | "auth" : "TODDR", 444 | "bugtracker" : "https://github.com/pjf/autodie/issues", 445 | "date" : "2023-12-28", 446 | "dist" : "autodie", 447 | "insecure_repo" : false, 448 | "name" : "autodie-2.37", 449 | "repo" : "https://github.com/pjf/autodie", 450 | "repo_def_branch" : "master", 451 | "repo_name" : "autodie", 452 | "repo_owner" : "pjf", 453 | "uses_rt" : false, 454 | "ver" : "2.37" 455 | } 456 | ], 457 | "sort" : { 458 | "column" : 0, 459 | "direction" : "asc" 460 | } 461 | } 462 | -------------------------------------------------------------------------------- /authors/data/VOEGELAS/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "author" : { 3 | "cpan" : "VOEGELAS", 4 | "github" : "voegelas", 5 | "gravatar" : "https://secure.gravatar.com/avatar/b748542b466dd73c8513245b1b609750?s=130", 6 | "name" : "Andreas Vögele" 7 | }, 8 | "ci" : { 9 | "gh_workflow_names" : [ 10 | "linux" 11 | ], 12 | "use_appveyor" : 0, 13 | "use_cirrus" : 0, 14 | "use_codecov" : 0, 15 | "use_coveralls" : 1, 16 | "use_gh_actions" : 1, 17 | "use_travis" : 0, 18 | "use_travis_com" : 0 19 | }, 20 | "modules" : [ 21 | { 22 | "auth" : "VOEGELAS", 23 | "bugtracker" : "https://github.com/voegelas/Alien-libmaxminddb/issues", 24 | "date" : "2024-07-16", 25 | "dist" : "Alien-libmaxminddb", 26 | "insecure_repo" : false, 27 | "name" : "Alien-libmaxminddb-1.015", 28 | "repo" : "https://github.com/voegelas/Alien-libmaxminddb", 29 | "repo_def_branch" : "main", 30 | "repo_name" : "Alien-libmaxminddb", 31 | "repo_owner" : "voegelas", 32 | "uses_rt" : false, 33 | "ver" : "1.015" 34 | }, 35 | { 36 | "auth" : "VOEGELAS", 37 | "bugtracker" : "https://github.com/voegelas/CPANPLUS-Dist-Debora/issues", 38 | "date" : "2024-06-30", 39 | "dist" : "CPANPLUS-Dist-Debora", 40 | "insecure_repo" : false, 41 | "name" : "CPANPLUS-Dist-Debora-0.013", 42 | "repo" : "https://github.com/voegelas/CPANPLUS-Dist-Debora", 43 | "repo_def_branch" : "main", 44 | "repo_name" : "CPANPLUS-Dist-Debora", 45 | "repo_owner" : "voegelas", 46 | "uses_rt" : false, 47 | "ver" : "0.013" 48 | }, 49 | { 50 | "auth" : "VOEGELAS", 51 | "bugtracker" : "https://github.com/voegelas/Geo-Location-TimeZoneFinder/issues", 52 | "date" : "2023-07-23", 53 | "dist" : "Geo-Location-TimeZoneFinder", 54 | "insecure_repo" : false, 55 | "name" : "Geo-Location-TimeZoneFinder-1.001", 56 | "repo" : "https://github.com/voegelas/Geo-Location-TimeZoneFinder", 57 | "repo_def_branch" : "main", 58 | "repo_name" : "Geo-Location-TimeZoneFinder", 59 | "repo_owner" : "voegelas", 60 | "uses_rt" : false, 61 | "ver" : "1.001" 62 | }, 63 | { 64 | "auth" : "VOEGELAS", 65 | "bugtracker" : "https://github.com/voegelas/IP-Geolocation-MMDB/issues", 66 | "date" : "2022-12-24", 67 | "dist" : "IP-Geolocation-MMDB", 68 | "insecure_repo" : false, 69 | "name" : "IP-Geolocation-MMDB-1.010", 70 | "repo" : "https://github.com/voegelas/IP-Geolocation-MMDB", 71 | "repo_def_branch" : "main", 72 | "repo_name" : "IP-Geolocation-MMDB", 73 | "repo_owner" : "voegelas", 74 | "uses_rt" : false, 75 | "ver" : "1.010" 76 | }, 77 | { 78 | "auth" : "VOEGELAS", 79 | "bugtracker" : "https://github.com/voegelas/Mail-Exim-ACL-Attachments/issues", 80 | "date" : "2024-06-09", 81 | "dist" : "Mail-Exim-ACL-Attachments", 82 | "insecure_repo" : false, 83 | "name" : "Mail-Exim-ACL-Attachments-1.006", 84 | "repo" : "https://github.com/voegelas/Mail-Exim-ACL-Attachments", 85 | "repo_def_branch" : "main", 86 | "repo_name" : "Mail-Exim-ACL-Attachments", 87 | "repo_owner" : "voegelas", 88 | "uses_rt" : false, 89 | "ver" : "1.006" 90 | }, 91 | { 92 | "auth" : "VOEGELAS", 93 | "bugtracker" : "https://github.com/voegelas/Mail-Exim-ACL-Geolocation/issues", 94 | "date" : "2022-12-24", 95 | "dist" : "Mail-Exim-ACL-Geolocation", 96 | "insecure_repo" : false, 97 | "name" : "Mail-Exim-ACL-Geolocation-1.004", 98 | "repo" : "https://github.com/voegelas/Mail-Exim-ACL-Geolocation", 99 | "repo_def_branch" : "main", 100 | "repo_name" : "Mail-Exim-ACL-Geolocation", 101 | "repo_owner" : "voegelas", 102 | "uses_rt" : false, 103 | "ver" : "1.004" 104 | }, 105 | { 106 | "auth" : "VOEGELAS", 107 | "bugtracker" : "https://github.com/voegelas/Mojolicious-Plugin-Geolocation-MMDB/issues", 108 | "date" : "2022-12-24", 109 | "dist" : "Mojolicious-Plugin-Geolocation-MMDB", 110 | "insecure_repo" : false, 111 | "name" : "Mojolicious-Plugin-Geolocation-MMDB-1.000", 112 | "repo" : "https://github.com/voegelas/Mojolicious-Plugin-Geolocation-MMDB", 113 | "repo_def_branch" : "main", 114 | "repo_name" : "Mojolicious-Plugin-Geolocation-MMDB", 115 | "repo_owner" : "voegelas", 116 | "uses_rt" : false, 117 | "ver" : "1.000" 118 | }, 119 | { 120 | "auth" : "VOEGELAS", 121 | "bugtracker" : "https://github.com/voegelas/Statocles-Plugin-Highlight-Kamelon/issues", 122 | "date" : "2023-08-09", 123 | "dist" : "Statocles-Plugin-Highlight-Kamelon", 124 | "insecure_repo" : false, 125 | "name" : "Statocles-Plugin-Highlight-Kamelon-1.000", 126 | "repo" : "https://github.com/voegelas/Statocles-Plugin-Highlight-Kamelon", 127 | "repo_def_branch" : "main", 128 | "repo_name" : "Statocles-Plugin-Highlight-Kamelon", 129 | "repo_owner" : "voegelas", 130 | "uses_rt" : false, 131 | "ver" : "1.000" 132 | } 133 | ], 134 | "sort" : { 135 | "column" : 0, 136 | "direction" : "asc" 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /bin/add_user: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use warnings; 5 | 6 | use JSON; 7 | use Data::Dumper; 8 | 9 | my $json = JSON->new->pretty; 10 | 11 | my $in = $json->decode($ARGV[0]); 12 | 13 | my $out = {}; 14 | 15 | for (qw[cpan github]) { 16 | $out->{author}{$_} = $in->{$_}; 17 | } 18 | 19 | for (qw[gh_actions cirrus appveyor coveralls codecov]) { 20 | $out->{ci}{"use_$_"} = $in->{"use_$_"}; 21 | } 22 | 23 | if ($out->{ci}{use_gh_actions}) { 24 | $out->{ci}{gh_workflow_names} = [ split /\s*,\s*/, $in->{gh_workflow_names} ]; 25 | } 26 | 27 | warn $json->encode($out); 28 | -------------------------------------------------------------------------------- /bin/dashboard: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use warnings; 5 | use 5.010; 6 | 7 | use File::Basename; 8 | use Getopt::Long; 9 | use Dashboard::App; 10 | 11 | my %opt; 12 | if (@ARGV) { 13 | @opt{qw[build gather]} = (0, 0); 14 | GetOptions(\%opt, 'gather', 'build', 'help'); 15 | } else { 16 | @opt{qw[build gather]} = (1, 1); 17 | } 18 | 19 | if ($opt{help}) { 20 | help(); 21 | } 22 | 23 | my $app = Dashboard::App->new(%opt); 24 | 25 | $app->run; 26 | 27 | sub help { 28 | my $me = basename $0; 29 | 30 | print <<"EOHELP"; 31 | 32 | $me [--gather] [--build] 33 | $me --help 34 | 35 | $me is the program that generates the CPAN Dashboard web site. 36 | 37 | This process is carried out in two stages. 38 | 39 | * gather - will gather all of the information about the CPAN modules 40 | that the site is configured to know about 41 | * build - will take the data gathered in the first stage and turn it 42 | into a web site 43 | 44 | Usually, you want to run both stages - so that's what happens if you 45 | don't give it any command-line options. 46 | 47 | EOHELP 48 | 49 | exit; 50 | } 51 | -------------------------------------------------------------------------------- /cpanfile: -------------------------------------------------------------------------------- 1 | requires 'Object::Pad', '0.813'; 2 | requires 'Feature::Compat::Class', '0.07'; 3 | requires 'JSON'; 4 | requires 'Path::Tiny', '0.125'; 5 | requires 'Template'; 6 | requires 'MetaCPAN::Client'; 7 | requires 'URI'; 8 | -------------------------------------------------------------------------------- /dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "static_dir" : "src", 3 | "input_dir" : "tt_lib", 4 | "output_dir" : "docs", 5 | "index_template" : "index.tt", 6 | "page_templates" : [ 7 | "add" 8 | ], 9 | "author_template" : "dashboard.tt", 10 | "wrapper" : "page.tt", 11 | "analytics" : "G-9VMMR7SVD4", 12 | "menu" : [ 13 | ], 14 | "domain" : "cpandashboard.com" 15 | } 16 | -------------------------------------------------------------------------------- /lib/Dashboard/App.pm: -------------------------------------------------------------------------------- 1 | use v5.36; 2 | use Feature::Compat::Class; 3 | 4 | no if $^V >= v5.38, warnings => 'experimental::class'; 5 | 6 | class Dashboard::App { 7 | use strict; 8 | use warnings; 9 | 10 | use Dashboard::BadgeMaker; 11 | 12 | use JSON; 13 | use Path::Tiny; 14 | use Template; 15 | use MetaCPAN::Client; 16 | use URI; 17 | use FindBin '$RealBin'; 18 | use File::Find; 19 | 20 | field $mcpan = MetaCPAN::Client->new; 21 | field $json = JSON->new->pretty->canonical->utf8; 22 | field $global_cfg = $json->decode(path('dashboard.json')->slurp_utf8); 23 | field $tt; 24 | field @authors; 25 | field @all_authors; 26 | field @urls; 27 | field $run_gather :param(gather) = 1; 28 | field $run_build :param(build) = 1; 29 | field $repo_def_branch; 30 | field $branch_cache_file = 'repo_def_branch.json'; 31 | 32 | method run { 33 | if ($run_gather) { 34 | $self->gather_data; 35 | } else { 36 | $self->load_data; 37 | } 38 | 39 | $self->build_site if $run_build; 40 | } 41 | 42 | method gather_data { 43 | 44 | say "Gathering..."; 45 | 46 | # This should be the initialiser expression for $repo_def_branch 47 | if (-f $branch_cache_file) { 48 | $repo_def_branch = $json->decode(path($branch_cache_file)->slurp_utf8); 49 | } else { 50 | $repo_def_branch = {}; 51 | } 52 | 53 | for (glob "$RealBin/../authors/*.json") { 54 | push @authors, $self->do_author($_); 55 | push @urls, "https://$global_cfg->{domain}/$authors[-1]{author}{cpan}/"; 56 | } 57 | 58 | path($branch_cache_file)->spew_utf8($json->encode($repo_def_branch)); 59 | } 60 | 61 | method do_author { 62 | my ($file) = @_; 63 | 64 | my $cfg = $json->decode(path($file)->slurp_utf8); 65 | 66 | $cfg->{modules} = []; 67 | 68 | my $mcpan_author = $mcpan->author($cfg->{author}{cpan}); 69 | my $releases = $mcpan_author->releases; 70 | 71 | my $gravatar = $mcpan_author->gravatar_url; 72 | if ($gravatar and $gravatar =~ m[^https:]) { 73 | $cfg->{author}{gravatar} = $mcpan_author->gravatar_url; 74 | } 75 | $cfg->{author}{name} = $mcpan_author->name; 76 | 77 | while ( my $rel = $releases->next ) { 78 | my $mod; 79 | $mod->{name} = $rel->name; 80 | $mod->{dist} = $rel->distribution; 81 | $mod->{ver} = $rel->version; 82 | $mod->{auth} = $rel->author; 83 | $mod->{date} = (split /T/, $rel->date)[0]; 84 | # Get the repo link. 85 | # 1. It should be in the "web" key 86 | # 2. Otherwise, check the "url" key 87 | $mod->{repo} = $rel->resources->{repository}{web} 88 | // $rel->resources->{repository}{url}; 89 | 90 | if ($rel->resources->{bugtracker}{web}) { 91 | $mod->{bugtracker} = $rel->resources->{bugtracker}{web}; 92 | $mod->{uses_rt} = $mod->{bugtracker} =~ /rt.cpan.org/; 93 | } 94 | 95 | unless ($mod->{repo}) { 96 | warn "No repo for $mod->{name}\n"; 97 | next; 98 | } 99 | 100 | unless (valid_repo($mod->{repo})) { 101 | warn "Skipping $mod->{repo}\n"; 102 | next; 103 | } 104 | 105 | $mod->{repo} =~ s[/$][]; 106 | # We need the repo's name. Try to extract it from the URL 107 | my $repo_uri = URI->new($mod->{repo}); 108 | if ($mod->{repo} =~ /^(http|git)/) { 109 | my $path = $repo_uri->path; 110 | $path =~ s|^/||; # Remove leading slash 111 | $path =~ s|\.git$||; # Remove trailing .git 112 | @$mod{qw[repo_owner repo_name]} = split m|/|, $path, 2; 113 | $mod->{repo_name} =~ s/\.git$// if $mod->{repo} =~ /^git/; 114 | $mod->{repo_def_branch} = $self->get_repo_default_branch($mod); 115 | chomp($mod->{repo_def_branch}); 116 | } else { 117 | warn "Strange repo for $mod->{name} ($mod->{repo}). Skipping.\n"; 118 | next; 119 | } 120 | $mod->{insecure_repo} = $mod->{repo} =~ m|^http:|; 121 | push @{ $cfg->{modules} }, $mod; 122 | } 123 | 124 | $cfg->{modules} = [ sort { $a->{name} cmp $b->{name} } @{$cfg->{modules}} ]; 125 | 126 | $cfg->{sort} //= {}; 127 | $cfg->{sort}{column} //= 0; 128 | $cfg->{sort}{column} = 2 if 'date' eq lc $cfg->{sort}{column}; 129 | $cfg->{sort}{direction} //= 'asc'; 130 | 131 | path("docs/$cfg->{author}{cpan}")->mkdir; 132 | path("docs/$cfg->{author}{cpan}/data.json")->spew_utf8($json->encode($cfg)); 133 | 134 | return $cfg; 135 | } 136 | 137 | method get_repo_default_branch { 138 | my ($module) = @_; 139 | 140 | my $path = "$module->{repo_owner}/$module->{repo_name}"; 141 | 142 | unless (exists $repo_def_branch->{$module->{repo_owner}} and 143 | exists $repo_def_branch->{$module->{repo_owner}}{$module->{repo_name}}) { 144 | $repo_def_branch->{$module->{repo_owner}}{$module->{repo_name}} 145 | = `gh repo view $path --json defaultBranchRef -q .defaultBranchRef.name`; 146 | chomp $repo_def_branch->{$module->{repo_owner}}{$module->{repo_name}}; 147 | } 148 | 149 | return $repo_def_branch->{$module->{repo_owner}}{$module->{repo_name}}; 150 | } 151 | 152 | method load_data { 153 | for (glob "$RealBin/../authors/data/*/data.json") { 154 | push @authors, $json->decode(path($_)->slurp_utf8); 155 | push @urls, "https://$global_cfg->{domain}/$authors[-1]{author}{cpan}/"; 156 | } 157 | } 158 | 159 | method build_site { 160 | say "Building..."; 161 | 162 | $tt = Template->new({ 163 | ENCODING => 'utf8', 164 | INCLUDE_PATH => $global_cfg->{input_dir}, 165 | OUTPUT_PATH => $global_cfg->{output_dir}, 166 | WRAPPER => $global_cfg->{wrapper}, 167 | VARIABLES => { 168 | analytics => $global_cfg->{analytics}, 169 | badges => Dashboard::BadgeMaker->new, 170 | }, 171 | }); 172 | 173 | $self->make_static_pages; 174 | $self->make_author_pages; 175 | $self->make_other_pages; 176 | $self->make_sitemap; 177 | } 178 | 179 | method make_static_pages { 180 | 181 | find { 182 | wanted => sub { 183 | return unless -f; 184 | my $file = $_; 185 | my $rel = path($file)->relative('.'); 186 | $rel =~ s|$global_cfg->{static_dir}/||g; 187 | my $out = path($global_cfg->{output_dir}, $rel); 188 | $out->parent->mkpath; 189 | path($file)->copy($out); 190 | }, 191 | no_chdir => 1, 192 | }, $global_cfg->{static_dir}; 193 | } 194 | 195 | method make_author_pages { 196 | for (@authors) { 197 | $tt->process( 198 | $global_cfg->{author_template}, 199 | $_, 200 | "$_->{author}{cpan}/index.html", 201 | { binmode => ':utf8' }, 202 | ) or die $tt->error; 203 | 204 | if (-f "authors/data/$_->{author}{cpan}/data.json") { 205 | path("docs/$_->{author}{cpan}")->mkdir; 206 | path("authors/data/$_->{author}{cpan}/data.json") 207 | ->copy("docs/$_->{author}{cpan}/data.json"); 208 | } 209 | } 210 | 211 | $tt->process( 212 | $global_cfg->{index_template}, 213 | { authors => \@authors }, 214 | 'index.html', 215 | { binmode => ':utf8' }, 216 | ); 217 | push @urls, "https://$global_cfg->{domain}/"; 218 | } 219 | 220 | method make_other_pages { 221 | for (@{ $global_cfg->{page_templates} }) { 222 | $tt->process( 223 | "$_.tt", 224 | { name => ucfirst $_ }, 225 | "$_/index.html", 226 | { binmode => ':utf8' }, 227 | ); 228 | push @urls, "https://$global_cfg->{domain}/$_/"; 229 | } 230 | } 231 | 232 | method make_sitemap { 233 | @urls = sort @urls; 234 | 235 | $tt->process( 236 | 'sitemap.tt', 237 | { urls => \@urls}, 238 | 'sitemap.xml', 239 | { binmode => ':utf8' }, 240 | ); 241 | } 242 | 243 | sub valid_repo { 244 | my ($repo_uri) = @_; 245 | 246 | return unless defined $repo_uri; 247 | 248 | # Currently we only support Github repos 249 | return $repo_uri =~ m|github\.com/|; 250 | } 251 | } 252 | 253 | 1; 254 | -------------------------------------------------------------------------------- /lib/Dashboard/Author.pm: -------------------------------------------------------------------------------- 1 | use 5.36.0; 2 | use Feature::Compat::Class; 3 | 4 | no if $^V >= v5.38, warnings => 'experimental::class'; 5 | 6 | class Dashboard::Author { 7 | use Dashboard::Distribution; 8 | use Path::Tiny; 9 | 10 | field $name :reader :param; 11 | field $cpan_name :reader :param; 12 | field $github_name :reader :param; 13 | field $gravatar_url :reader :param = '/images/gravatar.png'; 14 | field $distributions :reader :param = []; 15 | field $sort :reader :param = {}; 16 | field $ci :reader :param; 17 | 18 | method new_from_file :common { 19 | my ($file, $mcpan, $json) = @_; 20 | 21 | my $data = $json->decode(path($file)->slurp_utf8); 22 | 23 | my $mcpan_author = $mcpan->author($data->{author}{cpan}); 24 | 25 | my $sort = $data->{sort} // {}; 26 | $sort->{column} //= 0; 27 | $sort->{column} = 2 if 'date' eq lc $sort->{column}; 28 | $sort->{direction} //= 'asc'; 29 | 30 | my @distributions; 31 | 32 | if ($data->{distributions}) { 33 | @distributions = map { Dashboard::Distribution->new(%$_) } @{ $data->{distributions} }; 34 | } else { 35 | my $releases = $mcpan_author->releases; 36 | 37 | while ( my $rel = $releases->next ) { 38 | push @distributions, Dashboard::Distribution->new_from_release($rel); 39 | } 40 | 41 | @distributions = sort { $a->name cmp $b->name } @distributions; 42 | } 43 | 44 | my @ci_systems = qw[gh_actions cirrus appveyor travis travis_com coveralls codecov]; 45 | my $ci; 46 | 47 | 48 | $ci->{"use_$_"} = ($data->{ci}{"use_$_"} // 0) for @ci_systems; 49 | 50 | $ci->{gh_workflow_names} = ($data->{ci}{gh_workflow_names} // []); 51 | 52 | my $gravatar_url = $mcpan_author->gravatar_url; 53 | unless ($gravatar_url and $gravatar_url =~ m[^https:]) { 54 | undef $gravatar_url; 55 | } 56 | my $self = $class->new( 57 | name => $mcpan_author->name, 58 | gravatar_url => $gravatar_url, 59 | cpan_name => $data->{author}{cpan}, 60 | github_name => $data->{author}{github}, 61 | sort => $sort, 62 | distributions => \@distributions, 63 | ci => $ci, 64 | ); 65 | 66 | return $self; 67 | } 68 | 69 | method new_from_data :common { 70 | my ($data) = @_; 71 | 72 | $data->{distributions} = [ 73 | map { Dashboard::Distribution->new_from_data($_) } @{ $data->{distributions} } 74 | ]; 75 | 76 | return $class->new(%$data); 77 | } 78 | 79 | method dump { 80 | my $ci; 81 | 82 | for (keys %{ $self->ci }) { 83 | if (/^use_/) { 84 | $ci->{$_} = $self->ci->{$_} ? $JSON::true : $JSON::false; 85 | } else { 86 | $ci->{$_} = $self->ci->{$_}; 87 | } 88 | } 89 | 90 | my $data = { 91 | author => { 92 | cpan => $self->cpan_name, 93 | github => $self->github_name, 94 | gravatar => $self->gravatar_url, 95 | name => $self->name, 96 | }, 97 | sort => $self->sort, 98 | distributions => [ map { $_->dump } @{ $self->distributions } ], 99 | ci => $ci, 100 | }; 101 | 102 | return $data; 103 | } 104 | 105 | method as_json { 106 | return JSON->new->pretty->encode($self->dump) 107 | } 108 | 109 | method write_data_file { 110 | path('docs/' . $cpan_name)->mkdir; 111 | path('docs/' . $cpan_name . '/data.json')->spew_utf8($self->as_json); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /lib/Dashboard/BadgeMaker.pm: -------------------------------------------------------------------------------- 1 | use v5.26; 2 | use Feature::Compat::Class; 3 | 4 | no if $^V >= v5.38, warnings => 'experimental::class'; 5 | 6 | class Dashboard::BadgeMaker { 7 | use strict; 8 | use warnings; 9 | 10 | method cpan { 11 | my ($module) = @_; 12 | 13 | return $self->badge_link( 14 | "https://metacpan.org/release/$module->{dist}", 15 | "https://img.shields.io/cpan/v/$module->{dist}.svg", 16 | "CPAN version for $module->{dist}", 17 | ); 18 | } 19 | 20 | method cirrus { 21 | my ($module, $task) = @_; 22 | 23 | return $self->badge_link( 24 | "https://cirrus-ci.com/github/$module->{repo_owner}/$module->{repo_name}", 25 | "https://api.cirrus-ci.com/github/$module->{repo_owner}/$module->{repo_name}.svg?task=$task", 26 | "Cirrus task $task", 27 | ); 28 | } 29 | 30 | method gh { 31 | my ($module, $workflow) = @_; 32 | 33 | return $self->badge_link( 34 | "https://github.com/$module->{repo_owner}/$module->{repo_name}/actions?query=workflow%3A$workflow", 35 | "https://github.com/$module->{repo_owner}/$module->{repo_name}/workflows/$workflow/badge.svg", 36 | "GH Action $workflow", 37 | ); 38 | } 39 | 40 | method appveyor { 41 | my ($module) = @_; 42 | 43 | return $self->badge_link( 44 | "https://ci.appveyor.com/project/$module->{repo_owner}/$module->{repo_name}", 45 | "https://ci.appveyor.com/api/projects/status/github/$module->{repo_owner}/$module->{repo_name}?svg=true&passingText=Windows%20-%20OK&pendingText=Windows%20-%20%3F%3F%3F&failingText=Windows%20-%20broken", 46 | "Build status for $module->{dist}", 47 | ); 48 | } 49 | 50 | method travis { 51 | my ($module) = @_; 52 | 53 | return $self->badge_link( 54 | "https://travis-ci.org/$module->{repo_owner}/$module->{repo_name}?branch=$module->{repo_def_branch}", 55 | "https://travis-ci.org/$module->{repo_owner}/$module->{repo_name}.svg?branch=$module->{repo_def_branch}", 56 | "Build status for $module->{dist}", 57 | ); 58 | } 59 | 60 | method travis_com { 61 | my ($module) = @_; 62 | 63 | return $self->travis($module) =~ s/travis-ci\.org/travis-ci.com/gr; 64 | } 65 | 66 | method coveralls { 67 | my ($module, $author) = @_; 68 | 69 | return $self->badge_link( 70 | "https://coveralls.io/github/$module->{repo_owner}/$module->{repo_name}?branch=$module->{repo_def_branch}", 71 | "https://coveralls.io/repos/$module->{repo_owner}/$module->{repo_name}/badge.svg?branch=$module->{repo_def_branch}&service=github", 72 | "Test coverage for $module->{dist}", 73 | ); 74 | } 75 | 76 | method codecov { 77 | my ($module) = @_; 78 | 79 | return $self->badge_link( 80 | "https://codecov.io/gh/$module->{repo_owner}/$module->{repo_name}", 81 | "https://codecov.io/gh/$module->{repo_owner}/$module->{repo_name}/branch/$module->{repo_def_branch}/graph/badge.svg", 82 | "Test coverage for $module->{dist}", 83 | ); 84 | } 85 | 86 | method cpants { 87 | my ($module) = @_; 88 | 89 | return $self->badge_link( 90 | "https://cpants.cpanauthors.org/release/$module->{auth}/$module->{dist}-$module->{ver}", 91 | "https://cpants.cpanauthors.org/release/$module->{auth}/$module->{dist}-$module->{ver}.svg", 92 | "Kwalitee for $module->{dist}", 93 | ); 94 | } 95 | 96 | method badge_link { 97 | my ($link_url, $img_url, $alt_text) = @_; 98 | 99 | return qq[$alt_text]; 100 | } 101 | 102 | } 103 | 104 | 1; 105 | -------------------------------------------------------------------------------- /lib/Dashboard/Distribution.pm: -------------------------------------------------------------------------------- 1 | use 5.36.0; 2 | use Feature::Compat::Class; 3 | 4 | no if $^V >= v5.38, warnings => 'experimental::class'; 5 | 6 | class Dashboard::Distribution { 7 | 8 | use JSON; 9 | use URI; 10 | use Path::Tiny; 11 | 12 | field $name :param :reader; 13 | field $distribution :param :reader; 14 | field $main_module_name :param :reader; 15 | field $version :param :reader; 16 | field $author :param :reader; 17 | field $date :param :reader; 18 | field $repo :param :reader; 19 | field $uses_rt :param :reader; 20 | field $is_github :param :reader; 21 | field $repo_name :param :reader; 22 | field $repo_owner :param :reader; 23 | field $repo_def_branch :param :reader; 24 | field $is_insecure_repo :param :reader; 25 | field $bugtracker :param :reader; 26 | 27 | method new_from_release :common { 28 | my ($release) = @_; 29 | 30 | my %dist_data; 31 | $dist_data{name} = $release->name; 32 | $dist_data{distribution} = $release->distribution; 33 | $dist_data{main_module_name} = $release->main_module; 34 | $dist_data{version} = $release->version; 35 | $dist_data{author} = $release->author; 36 | $dist_data{date} = (split /T/, $release->date)[0]; 37 | 38 | # Get the repo link. 39 | # 1. It should be in the "web" key 40 | # 2. Otherwise, check the "url" key 41 | $dist_data{repo} = $release->resources->{repository}{web} 42 | // $release->resources->{repository}{url}; 43 | 44 | $dist_data{bugtracker} = ''; 45 | if ($release->resources->{bugtracker}{web}) { 46 | $dist_data{bugtracker} = $release->resources->{bugtracker}{web}; 47 | } 48 | $dist_data{uses_rt} = $dist_data{bugtracker} =~ /rt.cpan.org/; 49 | 50 | unless ($dist_data{repo}) { 51 | warn "No repo for $dist_data{name}\n"; 52 | return; 53 | } 54 | 55 | $dist_data{is_github} = is_github_repo($dist_data{repo}); 56 | 57 | $dist_data{repo} =~ s[/$][]; 58 | 59 | my $repo_data; 60 | if ($dist_data{is_github} and $repo_data = $class->get_github_data($dist_data{author}, $dist_data{distribution})) { 61 | for (qw[repo_owner repo_name repo_def_branch]) { 62 | $dist_data{$_} = $repo_data->{$_}; 63 | } 64 | $dist_data{repo} = $repo_data->{url}; 65 | } else { 66 | warn "No repo data for $dist_data{distribution} ($dist_data{repo}). Skipping.\n"; 67 | 68 | # We need the repo's name. Try to extract it from the URL 69 | my $repo_uri = URI->new($dist_data{repo}); 70 | if ($dist_data{repo} =~ /^(http|git)/) { 71 | my $path = $repo_uri->path; 72 | $path =~ s|^/||; # Remove leading slash 73 | $path =~ s|\.git$||; # Remove trailing .git 74 | @dist_data{qw[repo_owner repo_name]} = split m|/|, $path, 2; 75 | $dist_data{repo_name} =~ s/\.git$// if $dist_data{repo} =~ /^git/; 76 | $dist_data{repo_def_branch} = get_repo_default_branch(\%dist_data); 77 | } else { 78 | warn "Strange repo for $dist_data{name} (%dist_data{repo}). Skipping.\n"; 79 | return; 80 | } 81 | } 82 | 83 | $dist_data{is_insecure_repo} = $dist_data{repo} =~ m|^http:|; 84 | 85 | return $class->new(%dist_data); 86 | } 87 | 88 | method new_from_data :common { 89 | my ($data) = @_; 90 | 91 | return $class->new(%$data); 92 | } 93 | 94 | method dump { 95 | my $data = { 96 | author => $self->author, 97 | bugtracker => $self->bugtracker, 98 | date => $self->date, 99 | distribution => $self->distribution, 100 | is_insecure_repo => ($self->is_insecure_repo ? $JSON::true : $JSON::false ), 101 | name => $self->name, 102 | main_module_name => $self->main_module_name, 103 | version => $self->version, 104 | repo => $self->repo, 105 | uses_rt => ($self->uses_rt ? $JSON::true : $JSON::false ), 106 | is_github => ($self->is_github ? $JSON::true : $JSON::false), 107 | repo_name => $self->repo_name, 108 | repo_owner => $self->repo_owner, 109 | repo_def_branch => $self->repo_def_branch, 110 | }; 111 | 112 | return $data; 113 | } 114 | 115 | sub is_github_repo { 116 | my ($repo_uri) = @_; 117 | 118 | return unless defined $repo_uri; 119 | 120 | # Currently we only support Github repos 121 | return $repo_uri =~ m|github\.com/|; 122 | } 123 | 124 | method get_github_data :common { 125 | my ($author, $distribution) = @_; 126 | 127 | warn "Getting github data for $author/$distribution\n"; 128 | 129 | return unless -f 'github_repo.json'; 130 | 131 | my $data = JSON->new->decode(path('github_repo.json')->slurp_utf8); 132 | 133 | if ($data->{$author} and $data->{$author}{$distribution}) { 134 | use Data::Printer; 135 | p $data->{$author}{$distribution}; 136 | return $data->{$author}{$distribution}; 137 | } else { 138 | return; 139 | } 140 | } 141 | 142 | 143 | sub get_repo_default_branch { 144 | my ($dist_data) = @_; 145 | 146 | state $branch_cache_file = 'repo_def_branch.json'; 147 | state $repo_def_branch = -f $branch_cache_file ? JSON->new->decode(path($branch_cache_file)->slurp_utf8) : {}; 148 | 149 | my $path = "$dist_data->{repo_owner}/$dist_data->{repo_name}"; 150 | 151 | unless (exists $repo_def_branch->{$dist_data->{repo_owner}} and 152 | exists $repo_def_branch->{$dist_data->{repo_owner}}{$dist_data->{repo_name}}) { 153 | $repo_def_branch->{$dist_data->{repo_owner}}{$dist_data->{repo_name}} 154 | = ``; 155 | chomp $repo_def_branch->{$dist_data->{repo_owner}}{$dist_data->{repo_name}}; 156 | } 157 | 158 | return $repo_def_branch->{$dist_data->{repo_owner}}{$dist_data->{repo_name}}; 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /refresh_branch_cache: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use strict; 4 | use warnings; 5 | use feature 'say'; 6 | 7 | use Path::Tiny; 8 | use JSON; 9 | 10 | my $json = JSON->new->pretty->canonical->utf8; 11 | my $branch_cache_file = 'repo_def_branch.json'; 12 | 13 | unless (-f $branch_cache_file) { 14 | die "Cache file ($branch_cache_file) doesn't exist. Stopping.\n"; 15 | } 16 | 17 | my $repo_def_branch = $json->decode(path($branch_cache_file)->slurp_utf8); 18 | 19 | OWNER: 20 | for my $owner (keys %$repo_def_branch) { 21 | for my $repo (keys %{ $repo_def_branch->{$owner} }) { 22 | warn "$owner/$repo\n"; 23 | my $branch = 24 | `gh repo view "$owner/$repo" --json defaultBranchRef -q .defaultBranchRef.name`; 25 | 26 | # last OWNER if $?; 27 | 28 | chomp $branch; 29 | $repo_def_branch->{$owner}{$repo} = $branch; 30 | } 31 | } 32 | 33 | path($branch_cache_file)->spew_utf8($json->encode($repo_def_branch)); 34 | -------------------------------------------------------------------------------- /src/CNAME: -------------------------------------------------------------------------------- 1 | cpandashboard.com -------------------------------------------------------------------------------- /src/add/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | 20 | 23 | 24 | 25 | 26 | CPAN Dashboard - Add 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 47 | 48 |
49 |

Add your modules

50 | 51 |

It's pretty simple to add yourself to the list of CPAN authors on our front 52 | page. Currently we only support code repos on Github and a limited number of 53 | CI services (but we plan to add support for more services in the future).

54 | 55 |

Here are the steps to follow:

56 | 57 |
    58 |
  1. Decide which of the supported CI services you want to use and configure 59 | them correctly. (More details on the various services below.)
  2. 60 |
  3. Take a fork of the CPAN Dashboard repo.
  4. 61 |
  5. Add a file in the authors directory. Copy 62 | this file and 63 | name the new file using your CPAN author name.
  6. 64 |
  7. Update the file to contain the correct information about your CPAN and Github usenames and 65 | the CI services that you use. Switch the various ci.use_XXX flags to 0 for services 66 | that you don't use.
  8. 67 |
  9. Send a pull request adding your file 68 | to my repo.
  10. 69 |
  11. Sit back and wait for me to merge your PR.
  12. 70 |
71 | 72 |

Supported CI services

73 | 74 |

We currently support the following CI services:

75 | 76 |
77 |
78 |
79 |

80 | 84 |

85 |
86 |
87 |
88 |

Github Actions can do many things. But we're just using it to run tests on each commit 89 | and report on the success or failure of the test run. Add a directory called 90 | .github/workflows to your code repository and in that directory create a YAML 91 | file that runs the processes that you want to run. A basic workflow file for testing a 92 | CPAN module might look 93 | something like this.

94 |

You can track as many Github Actions as you like and the badges will stack on top of 95 | each other in your dashboard (this isn't currently as pretty as I'd like it, but we're 96 | working on it). Remember the values of the name keys in your YAML files as you'll 97 | need to add those to the ci.gh_workflow_names option in your new configuration 98 | file. We currently expect all of your modules to run the same set of Github Actions.

99 |
100 |
101 |
102 | 103 |
104 |
105 |

106 | 110 |

111 |
112 |
113 |
114 |

Coveralls.io measures your test coverage. Log in 115 | with your Github credentials and turn on the repos that you want to use. You also have to 116 | find a way to feed coverage data to your Coveralls.io account. For example, using GitHub 117 | Actions, I define a job like this: 118 |

119 |   coverage:
120 |     runs-on: ubuntu-latest
121 |     container: davorg/perl-coveralls:latest
122 |     name: Test coverage
123 |     steps:
124 |       - uses: actions/checkout@v4
125 |       - name: Install modules
126 |         run: cpanm -n --installdeps .
127 |       - name: Coverage
128 |         env:
129 |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
130 |         run: cover -test -report Coveralls
131 |         
132 |

Next time you commit something to one of your repos, you will also get coverage 133 | information appearing at Coveralls.io.

134 |
135 |
136 |
137 | 138 |
139 |
140 |

141 | 145 |

146 |
147 | 148 |
149 |
150 |

We support Codecov.io, but haven't written instructions 151 | for it yet.

152 |
153 |
154 |
155 | 156 |
157 |
158 |

159 | 163 |

164 |
165 | 166 |
167 |
168 |

We support Cirrus CI, but haven't written instructions 169 | for it yet.

170 |
171 |
172 |
173 | 174 |
175 |
176 |

177 | 181 |

182 |
183 | 184 |
185 |
186 |

We support AppVeyor, but haven't written instructions 187 | for it yet.

188 |
189 |
190 |
191 |
192 | 193 |

Fixing issues

194 | 195 | A number of issue that could be discovered by the CPAN Dashboard and how to fix them. 196 | 197 | 204 | 205 |
206 | 212 | 213 | 214 | 215 | 218 | 219 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /src/css/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 70px; 3 | padding-bottom: 50px; 4 | } 5 | footer { 6 | padding: 10px; 7 | border-top: solid 1px black; 8 | position: fixed; 9 | bottom: 0; 10 | width: 100%; 11 | height: 40px; 12 | background-color: #f5f5f5; 13 | } 14 | img.header { 15 | max-width: 100%; 16 | min-width: 100%; 17 | max-height: 15%; 18 | object-fit: cover; 19 | } 20 | 21 | .warn { 22 | color: red; 23 | } 24 | 25 | img.gravatar { 26 | width: 130px; 27 | height: 130px; 28 | object-fit: scale-down; 29 | } 30 | 31 | .author.card { 32 | max-width: 130px; 33 | min-width: 130px; 34 | width: 130px; 35 | margin: 1rem; 36 | } 37 | 38 | .card-deck { 39 | margin-bottom: 1rem; 40 | } 41 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerlToolsTeam/dashboard/31614b1199a525a166ffe1a94059e2c52396086e/src/favicon.ico -------------------------------------------------------------------------------- /src/images/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerlToolsTeam/dashboard/31614b1199a525a166ffe1a94059e2c52396086e/src/images/dashboard.png -------------------------------------------------------------------------------- /src/images/gravatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerlToolsTeam/dashboard/31614b1199a525a166ffe1a94059e2c52396086e/src/images/gravatar.png -------------------------------------------------------------------------------- /src/images/gravatar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerlToolsTeam/dashboard/31614b1199a525a166ffe1a94059e2c52396086e/src/images/gravatar.webp -------------------------------------------------------------------------------- /src/images/missing_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PerlToolsTeam/dashboard/31614b1199a525a166ffe1a94059e2c52396086e/src/images/missing_image.png -------------------------------------------------------------------------------- /src/js/dashboard.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() 2 | { 3 | $(".backup_picture").on("error", function(){ 4 | $(this).attr('src', '/images/missing_image.png'); 5 | }); 6 | 7 | // See https://datatables.net/ for how this works 8 | 9 | $('#sort_table').DataTable({ 10 | "paging": true, 11 | "columnDefs": [ 12 | { "targets": [0, 3], "orderable": true }, 13 | { "targets": "_all", "orderable": false }, 14 | ], 15 | "order": [[ column, direction ]] 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /src/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /tt_lib/add.tt: -------------------------------------------------------------------------------- 1 |

Add your modules

2 | 3 |

It's pretty simple to add yourself to the list of CPAN authors on our front 4 | page. Currently we only support code repos on Github and a limited number of 5 | CI services (but we plan to add support for more services in the future).

6 | 7 |

Here are the steps to follow:

8 | 9 |
    10 |
  1. Decide which of the supported CI services you want to use and configure 11 | them correctly. (More details on the various services below.)
  2. 12 |
  3. Take a fork of the CPAN Dashboard repo.
  4. 13 |
  5. Add a file in the authors directory. Copy 14 | this file and 15 | name the new file using your CPAN author name.
  6. 16 |
  7. Update the file to contain the correct information about your CPAN and Github usenames and 17 | the CI services that you use. Switch the various ci.use_XXX flags to 0 for services 18 | that you don't use.
  8. 19 |
  9. Send a pull request adding your file 20 | to my repo.
  10. 21 |
  11. Sit back and wait for me to merge your PR.
  12. 22 |
23 | 24 |

Supported CI services

25 | 26 |

We currently support the following CI services:

27 | 28 |
29 |
30 |
31 |

32 | 36 |

37 |
38 |
39 |
40 |

Github Actions can do many things. But we're just using it to run tests on each commit 41 | and report on the success or failure of the test run. Add a directory called 42 | .github/workflows to your code repository and in that directory create a YAML 43 | file that runs the processes that you want to run. A basic workflow file for testing a 44 | CPAN module might look 45 | something like this.

46 |

You can track as many Github Actions as you like and the badges will stack on top of 47 | each other in your dashboard (this isn't currently as pretty as I'd like it, but we're 48 | working on it). Remember the values of the name keys in your YAML files as you'll 49 | need to add those to the ci.gh_workflow_names option in your new configuration 50 | file. We currently expect all of your modules to run the same set of Github Actions.

51 |
52 |
53 |
54 | 55 |
56 |
57 |

58 | 62 |

63 |
64 |
65 |
66 |

Coveralls.io measures your test coverage. Log in 67 | with your Github credentials and turn on the repos that you want to use. You also have to 68 | find a way to feed coverage data to your Coveralls.io account. For example, using GitHub 69 | Actions, I define a job like this: 70 |

 71 |   coverage:
 72 |     runs-on: ubuntu-latest
 73 |     container: davorg/perl-coveralls:latest
 74 |     name: Test coverage
 75 |     steps:
 76 |       - uses: actions/checkout@v4
 77 |       - name: Install modules
 78 |         run: cpanm -n --installdeps .
 79 |       - name: Coverage
 80 |         env:
 81 |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 82 |         run: cover -test -report Coveralls
 83 |         
84 |

Next time you commit something to one of your repos, you will also get coverage 85 | information appearing at Coveralls.io.

86 |
87 |
88 |
89 | 90 |
91 |
92 |

93 | 97 |

98 |
99 | 100 |
101 |
102 |

We support Codecov.io, but haven't written instructions 103 | for it yet.

104 |
105 |
106 |
107 | 108 |
109 |
110 |

111 | 115 |

116 |
117 | 118 |
119 |
120 |

We support Cirrus CI, but haven't written instructions 121 | for it yet.

122 |
123 |
124 |
125 | 126 |
127 |
128 |

129 | 133 |

134 |
135 | 136 |
137 |
138 |

We support AppVeyor, but haven't written instructions 139 | for it yet.

140 |
141 |
142 |
143 |
144 | 145 |

Fixing issues

146 | 147 | A number of issue that could be discovered by the CPAN Dashboard and how to fix them. 148 | 149 | 156 | 157 | -------------------------------------------------------------------------------- /tt_lib/dashboard.tt: -------------------------------------------------------------------------------- 1 | [% MACRO good_bugtracker BLOCK -%] 2 | 🐞 3 | [% END -%] 4 | [% MACRO rt_bugtracker BLOCK -%] 5 | RT 6 | [% END -%] 7 | [% MACRO no_bugtracker BLOCK -%] 8 | 9 | [% END -%] 10 | [% META author_page = 1 -%] 11 | 15 |

CPAN Dashboard - [% author.cpan %]

16 |

[% author.cpan %]

17 |

A dashboard to see the state of 18 | [% author.cpan %]'s CPAN modules.

19 |

You can download this data as JSON.

20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | [% IF ci.use_gh_actions -%] 29 | 30 | [% END -%] 31 | [% IF ci.use_travis -%] 32 | 33 | [% END -%] 34 | [% IF ci.use_travis_com -%] 35 | 36 | [% END -%] 37 | [% IF ci.use_cirrus -%] 38 | 39 | [% END -%] 40 | [% IF ci.use_appveyor -%] 41 | 42 | [% END -%] 43 | [% IF ci.use_coveralls -%] 44 | 45 | [% END -%] 46 | [% IF ci.use_codecov -%] 47 | 48 | [% END -%] 49 | 50 | 51 | 52 | [% FOREACH m IN modules -%] 53 | 54 | 55 | 56 | 57 | 58 | 59 | [% IF ci.use_gh_actions -%] 60 | 63 | [% END -%] 64 | [% IF ci.use_travis -%] 65 | 66 | [% END -%] 67 | [% IF ci.use_travis_com -%] 68 | 69 | [% END -%] 70 | [% IF ci.use_cirrus -%] 71 | 74 | [% END -%] 75 | [% IF ci.use_appveyor -%] 76 | 77 | [% END -%] 78 | [% IF ci.use_coveralls -%] 79 | 80 | [% END -%] 81 | [% IF ci.use_codecov -%] 82 | 83 | [% END -%] 84 | 85 | [% END -%] 86 | 87 |
Name / RepoMetaCPANCPANTSDateBugsGH ActionsTravis CI (.org)Travis CI (.com)Cirrus CIAppveyor CICoverallsCodecov
[% m.dist %][% IF m.insecure_repo %] [% END %][% badges.cpan(m) %][% badges.cpants(m) %][% m.date %][% IF m.bugtracker %][% good_bugtracker %][% ELSE; no_bugtracker; END %][%- FOREACH workflow_name IN ci.gh_workflow_names -%] 61 | [% badges.gh(m, workflow_name) %][% UNLESS loop.last %]
[% END -%] 62 | [%- END %]
[% badges.travis(m) %][% badges.travis_com(m) %][%- FOREACH task_name IN ci.cirrus_task_names -%] 72 | [% badges.cirrus(m, task_name) %][% UNLESS loop.last %]
[% END -%] 73 | [%- END %]
[% badges.appveyor(m) %][% badges.coveralls(m, author) %][% badges.codecov(m) %]
88 | -------------------------------------------------------------------------------- /tt_lib/index.tt: -------------------------------------------------------------------------------- 1 |

2 |

CPAN Dashboard

3 |

A dashboard to see the state of various people's 4 | CPAN modules.

5 | 6 |

Current authors

7 |
8 | [% FOR author IN authors.sort(cpan) -%] 9 |
10 | [% author.author.cpan %] 11 | 14 |
15 | [% END -%] 16 |
17 |

Add yourself to the list

18 | -------------------------------------------------------------------------------- /tt_lib/page.tt: -------------------------------------------------------------------------------- 1 | [% IF no_wrapper OR template.no_wrapper; content; ELSE -%] 2 | 3 | 4 | 5 | [% IF author_page OR template.author_page; 6 | desc = "Monitoring the continuous integration for " _ author.cpan _ "'s CPAN modules."; 7 | ELSE; 8 | desc = "Monitor the continuous integration for your CPAN modules."; 9 | END -%] 10 | [% IF analytics -%] 11 | 12 | 13 | 20 | [% END -%] 21 | 22 | 23 | 24 | 25 | 29 | 32 | 33 | 34 | 35 | [% title = 'CPAN Dashboard: Monitoring CI for CPAN modules'; 36 | url = 'https://cpandashboard.com/'; 37 | IF author_page OR template.author_page; 38 | title = title _ ' - ' _ author.cpan; 39 | url = url _ author.cpan _ '/'; 40 | ELSIF name; 41 | title = title _ ' - ' _ name; 42 | url = url _ name.lower _ '/'; 43 | END -%] 44 | [% title %] 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 77 | 78 |
79 | [% content -%] 80 |
81 | 87 | 88 | 89 | 90 | 93 | 94 | 95 | 96 | 97 | 98 | [% END -%] 99 | -------------------------------------------------------------------------------- /tt_lib/sitemap.tt: -------------------------------------------------------------------------------- 1 | [% META no_wrapper = 1 -%] 2 | [% USE Date -%] 3 | 4 | 5 | [% FOR url IN urls -%] 6 | 7 | [% url %] 8 | [% Date.format(Date.now, '%Y-%m-%d') %] 9 | 10 | [% END -%] 11 | 12 | --------------------------------------------------------------------------------