Compare commits

...

118 Commits

Author SHA1 Message Date
chris48s
f45d25c2cc two fixes for [packagist] schemas (#7782)
* never check for 'require' key in [packagist] /v badge

always use `schema`
closes #7779

* accept str '__unset' for 'require' key in [packagist] /php-v badge

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-28 17:46:17 +00:00
chris48s
ca1e77436b allow requireCloudflare setting to work when hosted on fly.io (#7781) 2022-03-26 20:08:22 +00:00
dependabot[bot]
9cc950bf3e chore(deps): bump simple-icons from 6.14.0 to 6.15.0 (#7775)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.14.0 to 6.15.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.14.0...6.15.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-26 03:46:00 +00:00
dependabot[bot]
507f912183 chore(deps): bump @fontsource/lekton from 4.5.4 to 4.5.6 (#7773)
Bumps [@fontsource/lekton](https://github.com/fontsource/fontsource/tree/HEAD/fonts/google/lekton) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/HEAD/fonts/google/lekton)

---
updated-dependencies:
- dependency-name: "@fontsource/lekton"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-26 03:32:28 +00:00
dependabot[bot]
9df4c8e97b chore(deps): bump @sentry/node from 6.18.2 to 6.19.2 (#7772)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.18.2 to 6.19.2.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.18.2...6.19.2)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-26 03:24:48 +00:00
dependabot[bot]
ab427f2603 chore(deps-dev): bump prettier from 2.6.0 to 2.6.1 (#7768)
Bumps [prettier](https://github.com/prettier/prettier) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.6.0...2.6.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 23:07:29 +00:00
dependabot[bot]
694ac48acb chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7765)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.15.0 to 5.16.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.16.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 22:58:58 +00:00
dependabot[bot]
c169134ba6 chore(deps-dev): bump typescript from 4.6.2 to 4.6.3 (#7769)
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.6.2 to 4.6.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.6.2...v4.6.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:53:03 +00:00
chris48s
eb0ee6a9a1 fix [pypi] badges when package has null license (#7761)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:44:47 +00:00
dependabot[bot]
e60f359c8f chore(deps-dev): bump @babel/core from 7.17.7 to 7.17.8 (#7774)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.17.7 to 7.17.8.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.17.8/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:37:50 +00:00
dependabot[bot]
ba5d9ce793 chore(deps-dev): bump minimist from 1.2.5 to 1.2.6 (#7767)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:31:21 +00:00
Paul Melnikow
203afbc9d1 Use new CircleCI "convenience" images (#7726)
* Use new CircleCI "convenience" images

Closes #7724

* update image for package build

Co-authored-by: chris48s <chris.shaw480@gmail.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:25:03 +00:00
dependabot[bot]
62e501da90 chore(deps-dev): bump styled-components from 5.3.3 to 5.3.5 (#7778)
Bumps [styled-components](https://github.com/styled-components/styled-components) from 5.3.3 to 5.3.5.
- [Release notes](https://github.com/styled-components/styled-components/releases)
- [Changelog](https://github.com/styled-components/styled-components/blob/main/CHANGELOG.md)
- [Commits](https://github.com/styled-components/styled-components/compare/v5.3.3...v5.3.5)

---
updated-dependencies:
- dependency-name: styled-components
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:18:44 +00:00
dependabot[bot]
91e08f71a4 chore(deps): bump @fontsource/lato from 4.5.3 to 4.5.5 (#7764)
Bumps [@fontsource/lato](https://github.com/fontsource/fontsource/tree/HEAD/fonts/google/lato) from 4.5.3 to 4.5.5.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/HEAD/fonts/google/lato)

---
updated-dependencies:
- dependency-name: "@fontsource/lato"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-25 18:13:11 +00:00
dependabot[bot]
3493cc224f chore(deps-dev): bump eslint-plugin-jsdoc from 38.0.4 to 38.0.6 (#7770)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 38.0.4 to 38.0.6.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v38.0.4...v38.0.6)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-25 18:07:01 +00:00
chris48s
7ca6411d96 cache [pub] publisher badge for an hour (#7762) 2022-03-24 17:08:53 -05:00
dependabot[bot]
027940ce15 chore(deps): bump fast-xml-parser from 4.0.6 to 4.0.7 (#7751)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.0.6 to 4.0.7.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.0.6...v4.0.7)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-20 21:06:59 +00:00
dependabot[bot]
14fd2865ad chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7746)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.14.0 to 5.15.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.15.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-19 16:48:29 +00:00
Devon Carew
92173a8ca4 Add a [pub] publisher badge (#7715)
* add a pub publisher badge

* use a real publisher name in the badge example

* update based on review comments

* Apply suggestions from code review

Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com>

* run js prettier

* use the render() method in the example

Co-authored-by: Caleb Cartwright <calebcartwright@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-19 11:41:33 -05:00
dependabot[bot]
79e52afbe6 chore(deps-dev): bump gatsby-plugin-react-helmet from 5.2.0 to 5.10.0 (#7748)
Bumps [gatsby-plugin-react-helmet](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-react-helmet) from 5.2.0 to 5.10.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-react-helmet/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-react-helmet@5.10.0/packages/gatsby-plugin-react-helmet)

---
updated-dependencies:
- dependency-name: gatsby-plugin-react-helmet
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 19:28:20 +00:00
dependabot[bot]
6eb29fb9bd chore(deps-dev): bump lint-staged from 12.3.5 to 12.3.7 (#7750)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.3.5 to 12.3.7.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.3.5...v12.3.7)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 19:22:42 +00:00
dependabot[bot]
fafbdc89dc chore(deps-dev): bump prettier from 2.5.1 to 2.6.0 (#7747)
Bumps [prettier](https://github.com/prettier/prettier) from 2.5.1 to 2.6.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.5.1...2.6.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 19:15:01 +00:00
dependabot[bot]
73d15aeb06 chore(deps-dev): bump @typescript-eslint/parser from 5.10.0 to 5.15.0 (#7740)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.10.0 to 5.15.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.15.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 19:09:10 +00:00
dependabot[bot]
f1c1afea82 chore(deps): bump simple-icons from 6.13.0 to 6.14.0 (#7745)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.13.0 to 6.14.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.13.0...6.14.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 19:02:17 +00:00
dependabot[bot]
ed3479e896 chore(deps-dev): bump eslint-plugin-react from 7.29.3 to 7.29.4 (#7738)
Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.29.3 to 7.29.4.
- [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases)
- [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.29.3...v7.29.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 18:31:07 +00:00
dependabot[bot]
980f5fb164 chore(deps): bump @fontsource/lekton from 4.5.3 to 4.5.4 (#7741)
Bumps [@fontsource/lekton](https://github.com/fontsource/fontsource/tree/HEAD/packages/lekton) from 4.5.3 to 4.5.4.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/HEAD/packages/lekton)

---
updated-dependencies:
- dependency-name: "@fontsource/lekton"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-18 13:24:16 -05:00
dependabot[bot]
465f341418 chore(deps): bump @fontsource/lato from 4.5.2 to 4.5.3 (#7736)
Bumps [@fontsource/lato](https://github.com/fontsource/fontsource/tree/HEAD/packages/lato) from 4.5.2 to 4.5.3.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/HEAD/packages/lato)

---
updated-dependencies:
- dependency-name: "@fontsource/lato"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 17:18:04 +00:00
dependabot[bot]
054ecdb85c chore(deps-dev): bump @babel/core from 7.17.5 to 7.17.7 (#7734)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.17.5 to 7.17.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.17.7/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-18 17:03:51 +00:00
dependabot[bot]
a0e9d03919 chore(deps-dev): bump @babel/register from 7.17.0 to 7.17.7 (#7733)
Bumps [@babel/register](https://github.com/babel/babel/tree/HEAD/packages/babel-register) from 7.17.0 to 7.17.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.17.7/packages/babel-register)

---
updated-dependencies:
- dependency-name: "@babel/register"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 16:57:30 +00:00
dependabot[bot]
94ec3b0244 chore(deps-dev): bump cypress from 9.5.1 to 9.5.2 (#7743)
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.5.1 to 9.5.2.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.5.1...v9.5.2)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-18 11:46:09 -05:00
dependabot[bot]
2b9adb3002 chore(deps-dev): bump eslint-plugin-jsdoc from 37.9.7 to 38.0.4 (#7732)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 37.9.7 to 38.0.4.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v37.9.7...v38.0.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-18 16:34:25 +00:00
dependabot[bot]
5c610e5777 chore(deps): bump got from 12.0.1 to 12.0.2 (#7731)
Bumps [got](https://github.com/sindresorhus/got) from 12.0.1 to 12.0.2.
- [Release notes](https://github.com/sindresorhus/got/releases)
- [Commits](https://github.com/sindresorhus/got/compare/v12.0.1...v12.0.2)

---
updated-dependencies:
- dependency-name: got
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-18 16:28:18 +00:00
dependabot[bot]
a5704239c9 chore(deps-dev): bump mocha from 9.2.1 to 9.2.2 (#7730)
Bumps [mocha](https://github.com/mochajs/mocha) from 9.2.1 to 9.2.2.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v9.2.1...v9.2.2)

---
updated-dependencies:
- dependency-name: mocha
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-18 11:12:42 -05:00
Pierre-Yves Bigourdan
81dcf9cb36 Update number of badges served each month (#7723) 2022-03-13 17:27:13 +01:00
Pierre-Yves Bigourdan
0d6873b1c3 Switch Steam file size badge to informational color (#7722) 2022-03-13 17:13:26 +01:00
Pierre-Yves Bigourdan
aa9f7fe205 Make W3C and Youtube documentation links clickable (#7721) 2022-03-13 17:06:23 +01:00
Pierre-Yves Bigourdan
ccd23f9bd2 Improve Wercker examples (#7720) 2022-03-13 17:01:19 +01:00
Pierre-Yves Bigourdan
f957c1ce6a Improve Cirrus CI examples (#7719) 2022-03-13 16:56:02 +01:00
Pierre-Yves Bigourdan
facd0d69be Support [CodeClimate] responses with multiple data items (#7716) 2022-03-12 19:08:04 +01:00
Pierre-Yves Bigourdan
5a31a906e3 Delete [TeamCityCoverage] and [BowerVersion] redirectors (#7718)
* Delete [TeamCityCoverage] and [BowerVersion] redirectors

* Fix ESM import
2022-03-12 19:02:18 +01:00
Pierre-Yves Bigourdan
1c1a14b2f8 Deprecate [Shippable] service (#7717) 2022-03-12 18:47:39 +01:00
Caleb Cartwright
800a4b07ea fix: restore version comparison updates from #4173 (#4254)
Co-authored-by: Pierre-Yves Bigourdan <10694593+PyvesB@users.noreply.github.com>
2022-03-12 10:37:07 +00:00
dependabot[bot]
2cea986362 chore(deps-dev): bump caller from 1.0.1 to 1.1.0 (#7713)
Bumps [caller](https://github.com/totherik/caller) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/totherik/caller/releases)
- [Changelog](https://github.com/krakenjs/caller/blob/master/CHANGELOG.md)
- [Commits](https://github.com/totherik/caller/compare/v1.0.1...v1.1.0)

---
updated-dependencies:
- dependency-name: caller
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:46:54 +00:00
dependabot[bot]
f1b27c5acc chore(deps): bump fast-xml-parser from 4.0.4 to 4.0.6 (#7700)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.0.4 to 4.0.6.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.0.4...v4.0.6)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:40:28 +00:00
dependabot[bot]
108cd603e3 chore(deps-dev): bump lint-staged from 12.3.4 to 12.3.5 (#7703)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.3.4 to 12.3.5.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.3.4...v12.3.5)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:33:15 +00:00
dependabot[bot]
5e459d28f5 chore(deps): bump @sentry/node from 6.18.1 to 6.18.2 (#7705)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.18.1 to 6.18.2.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.18.1...6.18.2)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:27:26 +00:00
dependabot[bot]
76f1dcf09f chore(deps-dev): bump eslint-plugin-jsdoc from 37.9.6 to 37.9.7 (#7704)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 37.9.6 to 37.9.7.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v37.9.6...v37.9.7)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:21:42 +00:00
dependabot[bot]
7e41b7d0f7 chore(deps): bump chalk from 5.0.0 to 5.0.1 (#7701)
Bumps [chalk](https://github.com/chalk/chalk) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/chalk/chalk/releases)
- [Commits](https://github.com/chalk/chalk/compare/v5.0.0...v5.0.1)

---
updated-dependencies:
- dependency-name: chalk
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:14:37 +00:00
dependabot[bot]
5955c17162 chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7712)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.13.0 to 5.14.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.14.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 20:07:04 +00:00
dependabot[bot]
3a2929669b chore(deps): bump simple-icons from 6.12.0 to 6.13.0 (#7711)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.12.0 to 6.13.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.12.0...6.13.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-11 19:58:30 +00:00
dependabot[bot]
e90844af52 chore(deps): bump emojic from 1.1.16 to 1.1.17 (#7699)
Bumps [emojic](https://github.com/IonicaBizau/emojic) from 1.1.16 to 1.1.17.
- [Release notes](https://github.com/IonicaBizau/emojic/releases)
- [Commits](https://github.com/IonicaBizau/emojic/compare/1.1.16...1.1.17)

---
updated-dependencies:
- dependency-name: emojic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-11 19:51:02 +00:00
chris48s
7c524325b4 [piwheels], filter out versions with no files (#7696) 2022-03-10 16:27:52 +00:00
chris48s
53cb1da830 set a longer cacheLength on [librariesio] badges (#7692)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-07 20:10:10 +00:00
chris48s
9186f0d262 improve python version formatting (#7682) 2022-03-06 20:25:29 +00:00
Pierre-Yves Bigourdan
2cf35912c1 Clarify GitHub All Contributors badge (#7690)
* Clarify GitHub All Contributors badge

* Add documentation text
2022-03-06 18:52:17 +00:00
Pierre-Yves Bigourdan
98c98efd45 Fix GitHub Deployments example color (#7691) 2022-03-06 10:53:09 -06:00
Pierre-Yves Bigourdan
03111e955e Support [HexPM] packages with no stable release (#7685)
* Support [HexPM] packages with no stable release

* Run Prettier a second time
2022-03-05 19:40:10 +01:00
Pierre-Yves Bigourdan
bd1bca6096 Fix [SnykVulnerability] test (#7686) 2022-03-05 19:34:56 +01:00
dependabot[bot]
fd2ff813ba chore(deps-dev): bump gatsby-plugin-typescript from 4.6.0 to 4.9.0 (#7676)
Bumps [gatsby-plugin-typescript](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-typescript) from 4.6.0 to 4.9.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-typescript/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-typescript@4.9.0/packages/gatsby-plugin-typescript)

---
updated-dependencies:
- dependency-name: gatsby-plugin-typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 18:20:11 +00:00
dependabot[bot]
3cf3e43ef0 chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7671)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.12.1 to 5.13.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.13.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 18:12:32 +00:00
dependabot[bot]
f2d74f514b chore(deps-dev): bump babel-preset-gatsby from 2.6.0 to 2.9.0 (#7667)
Bumps [babel-preset-gatsby](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/babel-preset-gatsby) from 2.6.0 to 2.9.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/babel-preset-gatsby/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/babel-preset-gatsby@2.9.0/packages/babel-preset-gatsby)

---
updated-dependencies:
- dependency-name: babel-preset-gatsby
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 18:07:03 +00:00
dependabot[bot]
6ced7da581 chore(deps-dev): bump eslint-config-prettier from 8.4.0 to 8.5.0 (#7673)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 8.4.0 to 8.5.0.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v8.4.0...v8.5.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 11:38:10 +00:00
dependabot[bot]
f3bfbd11fa chore(deps-dev): bump cypress from 9.5.0 to 9.5.1 (#7677)
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.5.0 to 9.5.1.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.5.0...v9.5.1)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-05 11:02:22 +00:00
dependabot[bot]
c34419f1a0 chore(deps-dev): bump eslint-plugin-jsdoc from 37.9.4 to 37.9.6 (#7672)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 37.9.4 to 37.9.6.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v37.9.4...v37.9.6)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 10:31:45 +00:00
dependabot[bot]
aa0d8c5cd1 chore(deps): bump fast-xml-parser from 4.0.3 to 4.0.4 (#7679)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.0.3...v4.0.4)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 10:19:38 +00:00
dependabot[bot]
ad16fc149f chore(deps-dev): bump typescript from 4.5.5 to 4.6.2 (#7666)
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.5.5 to 4.6.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.5.5...v4.6.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 02:27:01 +00:00
dependabot[bot]
979b959d7a chore(deps): bump @sentry/node from 6.18.0 to 6.18.1 (#7665)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.18.0 to 6.18.1.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.18.0...6.18.1)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 02:18:43 +00:00
dependabot[bot]
fc02e1b633 chore(deps-dev): bump gatsby-plugin-remove-trailing-slashes (#7668)
Bumps [gatsby-plugin-remove-trailing-slashes](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-remove-trailing-slashes) from 4.7.0 to 4.9.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-remove-trailing-slashes@4.9.0/packages/gatsby-plugin-remove-trailing-slashes)

---
updated-dependencies:
- dependency-name: gatsby-plugin-remove-trailing-slashes
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 02:13:03 +00:00
Nevil Macwan
5ae9fd7380 Support for Test at Scale Badge, run [TAS] (#7612)
* added support for TAS application

* Added prod url. Fixed test-case

* fixed label

* updated tests

* streamlining of test badge

* mock test cases

* updated tests to make it live

* updated schema validation

* updated example

Co-authored-by: Saurabh Prakash <saurabhp@lambdatest.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 02:06:28 +00:00
dependabot[bot]
5b8e5605a7 chore(deps): bump simple-icons from 6.11.0 to 6.12.0 (#7664)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.11.0 to 6.12.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.11.0...6.12.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 01:58:55 +00:00
dependabot[bot]
7c909c9fb8 chore(deps-dev): bump @types/styled-components from 5.1.23 to 5.1.24 (#7663)
Bumps [@types/styled-components](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/styled-components) from 5.1.23 to 5.1.24.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/styled-components)

---
updated-dependencies:
- dependency-name: "@types/styled-components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 01:51:54 +00:00
dependabot[bot]
28d30855c1 chore(deps-dev): bump gatsby-plugin-catch-links from 4.5.0 to 4.9.0 (#7662)
Bumps [gatsby-plugin-catch-links](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-catch-links) from 4.5.0 to 4.9.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-catch-links/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-catch-links@4.9.0/packages/gatsby-plugin-catch-links)

---
updated-dependencies:
- dependency-name: gatsby-plugin-catch-links
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 01:43:25 +00:00
chris48s
dcc7e28fd0 [packagist] api v2 support (#7681)
* Update Packagist service to use v2 api

Packagist deprecated the original `packagist.org/p/username/package` endpoint in favor of v2 `packagist.org/p2/username/package` endpoint. Because of this, new packages aren't being found using v1.

This PR updates the Packagist service to use the new endpoint.

* Adjust validation schema

Some packages don't return the same data structure as others with the new api endpoints. This changes the validation schema to account for the potential differences.

* Fix typo

* Throw NotFound when license not found

* Expand response and find the correct release

* Address issues raised by reviewer

Address issues raised by @chris48s in #6508, which this PR is base on.
Includes:

* Remove getDefaultBranch() from base class for it is no longer used.
* Change try-catch statement syntax to align code style.
* Rename findRelease() to findLatestRelease() for clarity.

* remove unusued param

* throw if no version found

* require version key

* use a single consistent method for identifying the latest (tagged) release

* don't throw in render()

* rename method (this is not really 'transform' in our usual parlance)

* Improve BasePackagistService testing

* Change BasePackagistService.decompressResponse to static
  method BasePackagistService.expandPackageVersions.
* Fix expandPackageVersions implementation.
* Add unit test for the function.

* Extend BasePackagistService.findLatestRelease

* extend BasePackagistService.findLatestRelease to also handle
  PackagistVersion.
* remove PackagistVersion.transform.

* Improve BasePackagistService.findLatestRelease

* Update findLatestRelease to throw NotFound itself.
* Update PackagistLicense and PackagistVersion and remove the
  NotFound throwing logics.

* Revert unneeded change

* Corrected packagist php version spec

* The test was on a false assumption that '__unset' might appear
  inside an array leaf while the composer's MetadataMinifier::minify
  never does thing recursively. The '__unset' should be value of the
  top level key.

Co-authored-by: Geoff Selby <geoff@geoffcodesthings.com>
Co-authored-by: Koala Yeung <koalay@gmail.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-05 01:36:31 +00:00
dependabot[bot]
f81fe2051c chore(deps-dev): bump eslint-plugin-react from 7.29.1 to 7.29.3 (#7661)
Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.29.1 to 7.29.3.
- [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases)
- [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.29.1...v7.29.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-03-04 19:28:14 -06:00
chris48s
76a64a7896 Add [piwheels] version badge (#7656)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-02 20:58:23 +00:00
github-actions[bot]
d0c57c4aa1 Changelog for Release server-2022-03-01 (#7659)
* Update Changelog

Co-authored-by: release[bot] <actions@users.noreply.github.com>
Co-authored-by: chris48s <chris48s@users.noreply.github.com>
2022-03-02 20:38:40 +00:00
Jacob Bandes-Storch
814aa30da4 Add [Conan] version service (#7460)
* Add [Conan] version service

* Rework to use conan-center-index GitHub repo

* Conditional mock based on presence of github token

* Refactor yaml parsing into a helper function, move tests to .spec.js

* remove custom version parsing

* improve test data

* updates from review

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-03-01 06:08:45 +00:00
dependabot[bot]
4ccee50ce2 chore(deps): bump url-parse from 1.5.7 to 1.5.10 (#7657)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.7 to 1.5.10.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.7...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-28 23:50:19 -06:00
chris48s
d3ca453712 remove suspended [github] tokens from the pool (#7654)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-27 22:28:49 +00:00
chris48s
c602c1d07b generate links without trailing : if port not set (#7655)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-27 22:22:31 +00:00
chris48s
e358cc54fe note in SECURITY.md that svg-to-image-proxy is deprecated (#7653) 2022-02-27 22:14:14 +00:00
Caleb Cartwright
6e803367e0 tests(snyk): fix github manifest target (#7629)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-26 16:37:23 +00:00
dependabot[bot]
9c2453df3f chore(deps): bump @fontsource/lekton from 4.5.2 to 4.5.3 (#7636)
Bumps [@fontsource/lekton](https://github.com/fontsource/fontsource/tree/HEAD/packages/lekton) from 4.5.2 to 4.5.3.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/HEAD/packages/lekton)

---
updated-dependencies:
- dependency-name: "@fontsource/lekton"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-26 00:14:11 +00:00
dependabot[bot]
b23ea32088 chore(deps-dev): bump eslint-plugin-react from 7.28.0 to 7.29.0 (#7642)
* chore(deps-dev): bump eslint-plugin-react from 7.28.0 to 7.29.0

Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.28.0 to 7.29.0.
- [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases)
- [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.28.0...v7.29.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump eslint-plugin-react to latest

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Caleb Cartwright <caleb.cartwright@outlook.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 23:51:10 +00:00
dependabot[bot]
b85beedd9e chore(deps): bump @fontsource/lato from 4.5.1 to 4.5.2 (#7640)
Bumps [@fontsource/lato](https://github.com/fontsource/fontsource/tree/HEAD/packages/lato) from 4.5.1 to 4.5.2.
- [Release notes](https://github.com/fontsource/fontsource/releases)
- [Changelog](https://github.com/fontsource/fontsource/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/fontsource/commits/@fontsource/rasa@4.5.2/packages/lato)

---
updated-dependencies:
- dependency-name: "@fontsource/lato"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 22:02:17 +00:00
dependabot[bot]
1370fc6087 chore(deps-dev): bump mocha from 9.2.0 to 9.2.1 (#7650)
Bumps [mocha](https://github.com/mochajs/mocha) from 9.2.0 to 9.2.1.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v9.2.0...v9.2.1)

---
updated-dependencies:
- dependency-name: mocha
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 21:56:20 +00:00
dependabot[bot]
4d860a19ed chore(deps): bump simple-icons from 6.10.0 to 6.11.0 (#7638)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.10.0 to 6.11.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.10.0...6.11.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 21:49:31 +00:00
dependabot[bot]
d7c1e98ea1 chore(deps): bump @sentry/node from 6.17.9 to 6.18.0 (#7649)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.17.9 to 6.18.0.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.17.9...6.18.0)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 21:43:33 +00:00
dependabot[bot]
7ce3c0f528 chore(deps-dev): bump eslint-config-prettier from 8.3.0 to 8.4.0 (#7643)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 8.3.0 to 8.4.0.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v8.3.0...v8.4.0)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-25 21:37:57 +00:00
dependabot[bot]
88ff47920a chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7641)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.12.0 to 5.12.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.12.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-25 21:32:26 +00:00
Caleb Cartwright
b751cc6c57 fix: github pipenv service test (#7627)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-20 17:12:47 +00:00
Nemo157
3dc56134d9 Use the latest build status when checking docs.rs (#7613)
When documentation for a crate is rebuilt the `builds.json` can return
multiple results, ordered latest first, so we must take the first
element of the array rather than the last.

Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-20 01:15:40 +00:00
Caleb Cartwright
d3638b1b97 tests(securityheaders): increase timeout (#7628) 2022-02-19 21:53:43 +00:00
dependabot[bot]
59b42184f4 chore(deps-dev): bump @types/styled-components from 5.1.22 to 5.1.23 (#7622)
Bumps [@types/styled-components](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/styled-components) from 5.1.22 to 5.1.23.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/styled-components)

---
updated-dependencies:
- dependency-name: "@types/styled-components"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-19 11:54:18 -06:00
dependabot[bot]
b7ddc1e24a chore(deps): bump pretty-bytes from 5.6.0 to 6.0.0 (#7619)
Bumps [pretty-bytes](https://github.com/sindresorhus/pretty-bytes) from 5.6.0 to 6.0.0.
- [Release notes](https://github.com/sindresorhus/pretty-bytes/releases)
- [Commits](https://github.com/sindresorhus/pretty-bytes/compare/v5.6.0...v6.0.0)

---
updated-dependencies:
- dependency-name: pretty-bytes
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 22:03:10 +00:00
dependabot[bot]
64aad09d03 chore(deps): bump @sentry/node from 6.17.6 to 6.17.9 (#7616)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.17.6 to 6.17.9.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.17.6...6.17.9)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:56:45 +00:00
dependabot[bot]
893a59f6af chore(deps-dev): bump cypress from 9.4.1 to 9.5.0 (#7626)
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.4.1 to 9.5.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.4.1...v9.5.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:49:08 +00:00
dependabot[bot]
4a68590a23 chore(deps): bump fast-xml-parser from 4.0.2 to 4.0.3 (#7615)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.0.2 to 4.0.3.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:43:18 +00:00
dependabot[bot]
bf39dba8d7 chore(deps): bump url-parse from 1.5.1 to 1.5.7 (#7614)
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.7.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.7)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:37:40 +00:00
dependabot[bot]
0666584b03 chore(deps-dev): bump lint-staged from 12.3.3 to 12.3.4 (#7625)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.3.3 to 12.3.4.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.3.3...v12.3.4)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:31:48 +00:00
dependabot[bot]
484e5a0559 chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7618)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.11.0 to 5.12.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.12.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:25:59 +00:00
dependabot[bot]
14cbe2968e chore(deps-dev): bump @babel/core from 7.17.2 to 7.17.5 (#7623)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.17.2 to 7.17.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.17.5/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:18:10 +00:00
dependabot[bot]
c88315f183 chore(deps): bump simple-icons from 6.9.0 to 6.10.0 (#7621)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.9.0 to 6.10.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.9.0...6.10.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-18 21:12:25 +00:00
dependabot[bot]
acf2f6de6b chore(deps-dev): bump eslint-plugin-jsdoc from 37.8.2 to 37.9.4 (#7617)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 37.8.2 to 37.9.4.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v37.8.2...v37.9.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-18 21:03:08 +00:00
Pierre-Yves Bigourdan
a1885cdd37 Remove no download handling and add API warning to [Wordpress] badges (#7606) 2022-02-13 16:17:03 +00:00
dependabot[bot]
567e284ffb chore(deps): bump follow-redirects from 1.14.4 to 1.14.8 (#7604)
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 18:02:08 +00:00
dependabot[bot]
d16cc9c8ce chore(deps-dev): bump @typescript-eslint/eslint-plugin (#7592)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.10.2 to 5.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.11.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 17:56:18 +00:00
dependabot[bot]
0f1890be82 chore(deps): bump simple-icons from 6.8.0 to 6.9.0 (#7599)
Bumps [simple-icons](https://github.com/simple-icons/simple-icons) from 6.8.0 to 6.9.0.
- [Release notes](https://github.com/simple-icons/simple-icons/releases)
- [Commits](https://github.com/simple-icons/simple-icons/compare/6.8.0...6.9.0)

---
updated-dependencies:
- dependency-name: simple-icons
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 17:50:30 +00:00
dependabot[bot]
6f63341acb chore(deps-dev): bump eslint-plugin-jsdoc from 37.7.1 to 37.8.2 (#7601)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 37.7.1 to 37.8.2.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v37.7.1...v37.8.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 10:00:53 +00:00
dependabot[bot]
9f958a02ca chore(deps): bump ioredis from 4.28.4 to 4.28.5 (#7597)
Bumps [ioredis](https://github.com/luin/ioredis) from 4.28.4 to 4.28.5.
- [Release notes](https://github.com/luin/ioredis/releases)
- [Changelog](https://github.com/luin/ioredis/blob/master/Changelog.md)
- [Commits](https://github.com/luin/ioredis/compare/v4.28.4...v4.28.5)

---
updated-dependencies:
- dependency-name: ioredis
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 09:54:58 +00:00
dependabot[bot]
060b65e3d5 chore(deps-dev): bump @babel/core from 7.17.0 to 7.17.2 (#7598)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.17.0 to 7.17.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.17.2/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 09:49:17 +00:00
dependabot[bot]
805b80015f chore(deps): bump @sentry/node from 6.17.4 to 6.17.6 (#7602)
Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 6.17.4 to 6.17.6.
- [Release notes](https://github.com/getsentry/sentry-javascript/releases)
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md)
- [Commits](https://github.com/getsentry/sentry-javascript/compare/6.17.4...6.17.6)

---
updated-dependencies:
- dependency-name: "@sentry/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-12 09:43:15 +00:00
dependabot[bot]
9c4656ad5e chore(deps-dev): bump gatsby-plugin-remove-trailing-slashes (#7590)
Bumps [gatsby-plugin-remove-trailing-slashes](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-remove-trailing-slashes) from 4.2.0 to 4.7.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-remove-trailing-slashes@4.7.0/packages/gatsby-plugin-remove-trailing-slashes)

---
updated-dependencies:
- dependency-name: gatsby-plugin-remove-trailing-slashes
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-11 17:50:48 -06:00
dependabot[bot]
be1e4f639f chore(deps-dev): bump gatsby-plugin-page-creator from 4.6.0 to 4.7.0 (#7589)
Bumps [gatsby-plugin-page-creator](https://github.com/gatsbyjs/gatsby/tree/HEAD/packages/gatsby-plugin-page-creator) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/gatsbyjs/gatsby/releases)
- [Changelog](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-plugin-page-creator/CHANGELOG.md)
- [Commits](https://github.com/gatsbyjs/gatsby/commits/gatsby-plugin-page-creator@4.7.0/packages/gatsby-plugin-page-creator)

---
updated-dependencies:
- dependency-name: gatsby-plugin-page-creator
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-11 17:27:17 -06:00
chris48s
ace5e03221 set a higher default cacheLength on rating/star category (#7587)
Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
2022-02-10 21:02:22 +00:00
chris48s
d8aab9895c Update [amo] to use v4 API, set custom cacheLengths (#7586)
* switch to v4 API

* set custom cacheLengths on amo badges
2022-02-10 20:56:00 +00:00
Caleb Cartwright
68021e16a6 fix(amo): include trailing slash in API call (#7585) 2022-02-10 18:59:12 +00:00
chris48s
5fa18e173a fix docker image user agent (#7582) 2022-02-09 18:40:56 +00:00
80 changed files with 2663 additions and 1453 deletions

View File

@@ -143,7 +143,7 @@ package_steps: &package_steps
jobs:
main:
docker:
- image: circleci/node:16
- image: cimg/node:16.14
environment:
NPM_CONFIG_ENGINE_STRICT: 'true'
NPM_CONFIG_STRICT_PEER_DEPS: 'true'
@@ -152,13 +152,13 @@ jobs:
main@node-17:
docker:
- image: circleci/node:17
- image: cimg/node:17.7
<<: *main_steps
integration:
docker:
- image: circleci/node:16
- image: cimg/node:16.14
environment:
NPM_CONFIG_ENGINE_STRICT: 'true'
NPM_CONFIG_STRICT_PEER_DEPS: 'true'
@@ -168,14 +168,14 @@ jobs:
integration@node-17:
docker:
- image: circleci/node:17
- image: cimg/node:17.7
- image: redis
<<: *integration_steps
danger:
docker:
- image: circleci/node:16
- image: cimg/node:16.14
steps:
- checkout
@@ -195,7 +195,7 @@ jobs:
frontend:
docker:
- image: circleci/node:16
- image: cimg/node:16.14
environment:
NPM_CONFIG_ENGINE_STRICT: 'true'
NPM_CONFIG_STRICT_PEER_DEPS: 'true'
@@ -235,13 +235,14 @@ jobs:
command: npm run build
package:
machine: true
machine:
image: 'ubuntu-2004:202111-02'
<<: *package_steps
services:
docker:
- image: circleci/node:16
- image: cimg/node:16.14
environment:
NPM_CONFIG_ENGINE_STRICT: 'true'
NPM_CONFIG_STRICT_PEER_DEPS: 'true'
@@ -250,7 +251,7 @@ jobs:
services@node-17:
docker:
- image: circleci/node:17
- image: cimg/node:17.7
<<: *services_steps

View File

@@ -12,6 +12,9 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Set Git Short SHA
run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV
- name: Build
uses: docker/build-push-action@v2
with:
@@ -19,4 +22,4 @@ jobs:
push: false
tags: shieldsio/shields:pr-validation
build-args: |
version=${GITHUB_SHA::7}
version=${{ env.SHORT_SHA }}

View File

@@ -20,6 +20,9 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set Git Short SHA
run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV
- name: Build and push
uses: docker/build-push-action@v2
with:
@@ -27,4 +30,4 @@ jobs:
push: true
tags: shieldsio/shields:next
build-args: |
version=${GITHUB_SHA::7}
version=${{ env.SHORT_SHA }}

View File

@@ -4,6 +4,22 @@ Note: this changelog is for the shields.io server. The changelog for the badge-m
---
## server-2022-03-01
- Add [Conan] version service (#7460)
- remove suspended [github] tokens from the pool [#7654](https://github.com/badges/shields/issues/7654)
- generate links without trailing : if port not set [#7655](https://github.com/badges/shields/issues/7655)
- Use the latest build status when checking docs.rs [#7613](https://github.com/badges/shields/issues/7613)
- Remove no download handling and add API warning to [Wordpress] badges [#7606](https://github.com/badges/shields/issues/7606)
- set a higher default cacheLength on rating/star category [#7587](https://github.com/badges/shields/issues/7587)
- Update [amo] to use v4 API, set custom `cacheLength`s [#7586](https://github.com/badges/shields/issues/7586)
- fix(amo): include trailing slash in API call [#7585](https://github.com/badges/shields/issues/7585)
- fix docker image user agent [#7582](https://github.com/badges/shields/issues/7582)
- Delete deprecated Codetally and continuousphp services [#7572](https://github.com/badges/shields/issues/7572)
- Deprecate [Requires] service [#7571](https://github.com/badges/shields/issues/7571)
- [AUR] Fix RPC URL [#7570](https://github.com/badges/shields/issues/7570)
- Dependency updates
## server-2022-02-01
- [Depfu] Add support for Gitlab [#7475](https://github.com/badges/shields/issues/7475)

View File

@@ -35,7 +35,7 @@ and legible badges in SVG and raster format, which can easily be included in
GitHub readmes or any other web page. The service supports dozens of
continuous integration services, package registries, distributions, app
stores, social networks, code coverage services, and code analysis services.
Every month it serves over 770 million images and is used by some of the
Every month it serves over 870 million images and is used by some of the
world's most popular open-source projects, [VS Code][vscode], [Vue.js][vue]
and [Bootstrap][bootstrap] to name a few.

View File

@@ -10,7 +10,7 @@ Please follow this guidance when reporting security issues affecting:
- The [squint](https://github.com/badges/squint) raster proxy
- The [badge-maker](https://www.npmjs.com/package/badge-maker) NPM package
The [gh-badges](https://www.npmjs.com/package/gh-badges) NPM package is now deprecated and will no longer receive fixes for bugs or security issues.
The [gh-badges](https://www.npmjs.com/package/gh-badges) and [svg-to-image-proxy](https://www.npmjs.com/package/svg-to-image-proxy) NPM packages are now deprecated and will no longer receive fixes for bugs or security issues.
## Reporting a Vulnerability

View File

@@ -147,6 +147,7 @@ class BaseService {
version: 300,
debug: 60,
downloads: 900,
rating: 900,
social: 900,
}
return cacheLengths[this.category]

View File

@@ -201,6 +201,14 @@ function addHandlerAtIndex(camp, index, handlerFn) {
camp.stack.splice(index, 0, handlerFn)
}
function isOnHeroku() {
return !!process.env.DYNO
}
function isOnFly() {
return !!process.env.FLY_APP_NAME
}
/**
* The Server is based on the web framework Scoutcamp. It creates
* an http server, sets up helpers for token persistence and monitoring.
@@ -301,13 +309,19 @@ class Server {
// Set `req.ip`, which is expected by `cloudflareMiddleware()`. This is set
// by Express but not Scoutcamp.
addHandlerAtIndex(this.camp, 0, function (req, res, next) {
// On Heroku, `req.socket.remoteAddress` is the Heroku router. However,
// the router ensures that the last item in the `X-Forwarded-For` header
// is the real origin.
// https://stackoverflow.com/a/18517550/893113
req.ip = process.env.DYNO
? req.headers['x-forwarded-for'].split(', ').pop()
: req.socket.remoteAddress
if (isOnHeroku()) {
// On Heroku, `req.socket.remoteAddress` is the Heroku router. However,
// the router ensures that the last item in the `X-Forwarded-For` header
// is the real origin.
// https://stackoverflow.com/a/18517550/893113
req.ip = req.headers['x-forwarded-for'].split(', ').pop()
} else if (isOnFly()) {
// On Fly we can use the Fly-Client-IP header
// https://fly.io/docs/reference/runtime-environment/#request-headers
req.ip = req.headers['fly-client-ip']
} else {
req.ip = req.socket.remoteAddress
}
next()
})
addHandlerAtIndex(this.camp, 1, cloudflareMiddleware())

View File

@@ -25,6 +25,9 @@ export function getBaseUrl(): string {
if (['shields.io', 'www.shields.io'].includes(hostname)) {
return 'https://img.shields.io'
}
if (!port) {
return `${protocol}//${hostname}`
}
return `${protocol}//${hostname}:${port}`
} catch (e) {
// server-side rendering

2202
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -21,28 +21,29 @@
"url": "https://github.com/badges/shields"
},
"dependencies": {
"@fontsource/lato": "^4.5.1",
"@fontsource/lekton": "^4.5.2",
"@sentry/node": "^6.17.4",
"@fontsource/lato": "^4.5.5",
"@fontsource/lekton": "^4.5.6",
"@renovate/pep440": "^1.0.0",
"@sentry/node": "^6.19.2",
"@shields_io/camp": "^18.1.1",
"badge-maker": "file:badge-maker",
"bytes": "^3.1.2",
"camelcase": "^6.3.0",
"chalk": "^5.0.0",
"chalk": "^5.0.1",
"check-node-version": "^4.2.1",
"cloudflare-middleware": "^1.0.4",
"config": "^3.3.7",
"cross-env": "^7.0.3",
"decamelize": "^3.2.0",
"emojic": "^1.1.16",
"emojic": "^1.1.17",
"escape-string-regexp": "^4.0.0",
"fast-xml-parser": "^4.0.2",
"fast-xml-parser": "^4.0.7",
"glob": "^7.2.0",
"global-agent": "^3.0.0",
"got": "^12.0.1",
"got": "^12.0.2",
"graphql": "^15.6.1",
"graphql-tag": "^2.12.6",
"ioredis": "4.28.4",
"ioredis": "4.28.5",
"joi": "17.6.0",
"joi-extension-semver": "5.0.0",
"js-yaml": "^4.1.0",
@@ -54,13 +55,13 @@
"node-env-flag": "^0.1.0",
"parse-link-header": "^2.0.0",
"path-to-regexp": "^6.2.0",
"pretty-bytes": "^5.6.0",
"pretty-bytes": "^6.0.0",
"priorityqueuejs": "^2.0.0",
"prom-client": "^14.0.1",
"qs": "^6.10.3",
"query-string": "^7.1.1",
"semver": "~7.3.5",
"simple-icons": "6.8.0",
"simple-icons": "6.15.0",
"webextension-store-meta": "^1.0.5",
"xmldom": "~0.6.0",
"xpath": "~0.0.32"
@@ -140,9 +141,9 @@
]
},
"devDependencies": {
"@babel/core": "^7.17.0",
"@babel/core": "^7.17.8",
"@babel/polyfill": "^7.12.1",
"@babel/register": "7.17.0",
"@babel/register": "7.17.7",
"@istanbuljs/schema": "^0.1.3",
"@mapbox/react-click-to-select": "^2.2.1",
"@types/chai": "^4.3.0",
@@ -153,13 +154,13 @@
"@types/react-helmet": "^6.1.5",
"@types/react-modal": "^3.13.1",
"@types/react-select": "^4.0.17",
"@types/styled-components": "5.1.22",
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.10.0",
"@types/styled-components": "5.1.24",
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.15.0",
"babel-plugin-inline-react-svg": "^2.0.1",
"babel-preset-gatsby": "^2.5.1",
"babel-preset-gatsby": "^2.9.0",
"c8": "^7.11.0",
"caller": "^1.0.1",
"caller": "^1.1.0",
"chai": "^4.3.6",
"chai-as-promised": "^7.1.1",
"chai-datetime": "^1.8.0",
@@ -167,46 +168,46 @@
"child-process-promise": "^2.2.1",
"clipboard-copy": "^4.0.1",
"concurrently": "^7.0.0",
"cypress": "^9.4.1",
"cypress": "^9.5.2",
"danger": "^11.0.2",
"danger-plugin-no-test-shortcuts": "^2.0.0",
"deepmerge": "^4.2.2",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-standard": "^16.0.3",
"eslint-config-standard-jsx": "^10.0.0",
"eslint-config-standard-react": "^11.0.1",
"eslint-plugin-chai-friendly": "^0.7.2",
"eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jsdoc": "^37.7.1",
"eslint-plugin-jsdoc": "^38.0.6",
"eslint-plugin-mocha": "^10.0.3",
"eslint-plugin-no-extension-in-require": "^0.2.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react": "^7.29.4",
"eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-sort-class-members": "^1.14.1",
"fetch-ponyfill": "^7.1.0",
"form-data": "^4.0.0",
"gatsby": "4.6.2",
"gatsby-plugin-catch-links": "^4.5.0",
"gatsby-plugin-page-creator": "^4.3.0",
"gatsby-plugin-react-helmet": "^5.2.0",
"gatsby-plugin-remove-trailing-slashes": "^4.2.0",
"gatsby-plugin-catch-links": "^4.9.0",
"gatsby-plugin-page-creator": "^4.7.0",
"gatsby-plugin-react-helmet": "^5.10.0",
"gatsby-plugin-remove-trailing-slashes": "^4.9.0",
"gatsby-plugin-styled-components": "^5.2.0",
"gatsby-plugin-typescript": "^4.2.0",
"gatsby-plugin-typescript": "^4.9.0",
"humanize-string": "^2.1.0",
"icedfrisby": "4.0.0",
"icedfrisby-nock": "^2.1.0",
"is-svg": "^4.3.2",
"js-yaml-loader": "^1.2.2",
"jsdoc": "^3.6.10",
"lint-staged": "^12.3.3",
"lint-staged": "^12.3.7",
"lodash.debounce": "^4.0.8",
"lodash.difference": "^4.5.0",
"minimist": "^1.2.5",
"mocha": "^9.2.0",
"minimist": "^1.2.6",
"mocha": "^9.2.2",
"mocha-env-reporter": "^4.0.0",
"mocha-junit-reporter": "^2.0.2",
"mocha-yaml-loader": "^1.0.3",
@@ -216,7 +217,7 @@
"npm-run-all": "^4.1.5",
"open-cli": "^7.0.1",
"portfinder": "^1.0.28",
"prettier": "2.5.1",
"prettier": "2.6.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-error-overlay": "^6.0.10",
@@ -233,10 +234,10 @@
"sinon-chai": "^3.7.0",
"snap-shot-it": "^7.9.6",
"start-server-and-test": "1.14.0",
"styled-components": "^5.3.3",
"styled-components": "^5.3.5",
"ts-mocha": "^9.0.2",
"tsd": "^0.19.1",
"typescript": "^4.5.5",
"typescript": "^4.6.3",
"url": "^0.11.0"
},
"engines": {

View File

@@ -21,7 +21,7 @@ class BaseAmoService extends BaseJsonService {
async fetch({ addonId }) {
return this._requestJson({
schema,
url: `https://addons.mozilla.org/api/v3/addons/addon/${addonId}`,
url: `https://addons.mozilla.org/api/v4/addons/addon/${addonId}/`,
})
}
}

View File

@@ -24,6 +24,8 @@ class AmoWeeklyDownloads extends BaseAmoService {
},
]
static _cacheLength = 21600
static defaultBadgeData = { label: 'downloads' }
static render({ downloads }) {

View File

@@ -23,6 +23,8 @@ export default class AmoRating extends BaseAmoService {
},
]
static _cacheLength = 7200
static render({ format, rating }) {
rating = Math.round(rating)
return {

View File

@@ -14,6 +14,8 @@ export default class AmoUsers extends BaseAmoService {
},
]
static _cacheLength = 21600
static defaultBadgeData = { label: 'users' }
static render({ users: downloads }) {

View File

@@ -1,13 +1,13 @@
import Joi from 'joi'
import { renderVersionBadge } from '../version.js'
import { InvalidResponse, redirector } from '../index.js'
import { InvalidResponse } from '../index.js'
import BaseBowerService from './bower-base.js'
const queryParamSchema = Joi.object({
include_prereleases: Joi.equal(''),
}).required()
class BowerVersion extends BaseBowerService {
export default class BowerVersion extends BaseBowerService {
static category = 'version'
static route = { base: 'bower/v', pattern: ':packageName', queryParamSchema }
@@ -47,18 +47,3 @@ class BowerVersion extends BaseBowerService {
return renderVersionBadge({ version })
}
}
const BowerVersionRedirect = redirector({
category: 'version',
route: {
base: 'bower/vpre',
pattern: ':packageName',
},
transformPath: ({ packageName }) => `/bower/v/${packageName}`,
transformQueryParams: params => ({
include_prereleases: null,
}),
dateAdded: new Date('2019-12-15'),
})
export { BowerVersion, BowerVersionRedirect }

View File

@@ -4,7 +4,7 @@ import nock from 'nock'
import { cleanUpNockAfterEach, defaultContext } from '../test-helpers.js'
import { InvalidResponse } from '../index.js'
import LibrariesIoApiProvider from '../librariesio/librariesio-api-provider.js'
import { BowerVersion } from './bower-version.service.js'
import BowerVersion from './bower-version.service.js'
describe('BowerVersion', function () {
test(BowerVersion.transform, () => {

View File

@@ -33,7 +33,3 @@ t.create('Pre Version for Invalid Package')
.timeout(10000)
.get('/v/it-is-a-invalid-package-should-error.json?include_prereleases')
.expectBadge({ label: 'bower', message: 'package not found' })
t.create('Version (legacy redirect: vpre)')
.get('/vpre/bootstrap.svg')
.expectRedirect('/bower/v/bootstrap.svg?include_prereleases')

View File

@@ -26,31 +26,29 @@ export default class Cirrus extends BaseJsonService {
title: 'Cirrus CI - Base Branch Build Status',
namedParams: { user: 'flutter', repo: 'flutter' },
pattern: 'github/:user/:repo',
queryParams: { task: 'analyze', script: 'test' },
staticPreview: this.render({ status: 'passing' }),
},
{
title: 'Cirrus CI - Specific Branch Build Status',
pattern: 'github/:user/:repo/:branch',
namedParams: { user: 'flutter', repo: 'flutter', branch: 'master' },
queryParams: { task: 'analyze', script: 'test' },
staticPreview: this.render({ status: 'passing' }),
},
{
title: 'Cirrus CI - Specific Task Build Status',
pattern: 'github/:user/:repo',
queryParams: { task: 'analyze' },
namedParams: { user: 'flutter', repo: 'flutter' },
staticPreview: this.render({ subject: 'analyze', status: 'passing' }),
queryParams: { task: 'build_docker' },
namedParams: { user: 'flutter', repo: 'cocoon' },
staticPreview: this.render({
subject: 'build_docker',
status: 'passing',
}),
},
{
title: 'Cirrus CI - Task and Script Build Status',
pattern: 'github/:user/:repo',
queryParams: { task: 'analyze', script: 'test' },
namedParams: {
user: 'flutter',
repo: 'flutter',
},
queryParams: { task: 'build_docker', script: 'test' },
namedParams: { user: 'flutter', repo: 'cocoon' },
staticPreview: this.render({ subject: 'test', status: 'passing' }),
},
]

View File

@@ -138,15 +138,19 @@ export default class CodeclimateAnalysis extends BaseJsonService {
}
async fetch({ user, repo }) {
const repoInfos = await fetchRepo(this, { user, repo })
const repoInfosWithSnapshot = repoInfos.filter(
repoInfo => repoInfo.relationships.latest_default_branch_snapshot.data
)
if (repoInfosWithSnapshot.length === 0) {
throw new NotFound({ prettyMessage: 'snapshot not found' })
}
const {
id: repoId,
relationships: {
latest_default_branch_snapshot: { data: snapshotInfo },
},
} = await fetchRepo(this, { user, repo })
if (snapshotInfo === null) {
throw new NotFound({ prettyMessage: 'snapshot not found' })
}
} = repoInfosWithSnapshot[0]
const { data } = await this._requestJson({
schema,
url: `https://api.codeclimate.com/v1/repos/${repoId}/snapshots/${snapshotInfo.id}`,

View File

@@ -32,6 +32,47 @@ t.create('maintainability letter')
message: Joi.equal('A', 'B', 'C', 'D', 'E', 'F'),
})
t.create('issues when outer user repos query returns multiple items')
.get('/issues/angular/angular.json')
.intercept(nock =>
nock('https://api.codeclimate.com', { allowUnmocked: true })
.get('/v1/repos?github_slug=angular%2Fangular')
.reply(200, {
data: [
{
id: '54fd4e6b6956804a10003df4',
relationships: {
latest_default_branch_snapshot: {
data: null,
},
latest_default_branch_test_report: {
data: null,
},
},
},
{
id: '54fd4e6b6956804a10003df3',
relationships: {
latest_default_branch_snapshot: {
data: {
id: '620e2b491b6a72000100ca1d',
type: 'snapshots',
},
},
latest_default_branch_test_report: {
data: null,
},
},
},
],
})
)
.networkOn() // Combined with allowUnmocked: true, this allows the inner snapshots query to go through.
.expectBadge({
label: 'issues',
message: Joi.number().integer().positive(),
})
t.create('maintainability letter for non-existent repo')
.get('/maintainability/unknown/unknown.json')
.expectBadge({

View File

@@ -7,7 +7,6 @@ const isLetterGrade = Joi.equal('A', 'B', 'C', 'D', 'E', 'F').required()
const repoSchema = Joi.object({
data: Joi.array()
.max(1)
.items(
Joi.object({
id: Joi.string().required(),
@@ -29,17 +28,15 @@ const repoSchema = Joi.object({
}).required()
async function fetchRepo(serviceInstance, { user, repo }) {
const {
data: [repoInfo],
} = await serviceInstance._requestJson({
const { data: repoInfos } = await serviceInstance._requestJson({
schema: repoSchema,
url: 'https://api.codeclimate.com/v1/repos',
options: { searchParams: { github_slug: `${user}/${repo}` } },
})
if (repoInfo === undefined) {
if (repoInfos.length === 0) {
throw new NotFound({ prettyMessage: 'repo not found' })
}
return repoInfo
return repoInfos
}
export { keywords, isLetterGrade, fetchRepo }

View File

@@ -53,15 +53,19 @@ export default class CodeclimateCoverage extends BaseJsonService {
}
async fetch({ user, repo }) {
const repoInfos = await fetchRepo(this, { user, repo })
const repoInfosWithTestReport = repoInfos.filter(
repoInfo => repoInfo.relationships.latest_default_branch_test_report.data
)
if (repoInfosWithTestReport.length === 0) {
throw new NotFound({ prettyMessage: 'test report not found' })
}
const {
id: repoId,
relationships: {
latest_default_branch_test_report: { data: testReportInfo },
},
} = await fetchRepo(this, { user, repo })
if (testReportInfo === null) {
throw new NotFound({ prettyMessage: 'test report not found' })
}
} = repoInfosWithTestReport[0]
const { data } = await this._requestJson({
schema,
url: `https://api.codeclimate.com/v1/repos/${repoId}/test_reports/${testReportInfo.id}`,

View File

@@ -20,6 +20,47 @@ t.create('test coverage letter')
message: Joi.equal('A', 'B', 'C', 'D', 'E', 'F'),
})
t.create('test coverage when outer user repos query returns multiple items')
.get('/coverage/codeclimate/codeclimate.json')
.intercept(nock =>
nock('https://api.codeclimate.com', { allowUnmocked: true })
.get('/v1/repos?github_slug=codeclimate%2Fcodeclimate')
.reply(200, {
data: [
{
id: '558479d6e30ba034120008a8',
relationships: {
latest_default_branch_snapshot: {
data: null,
},
latest_default_branch_test_report: {
data: null,
},
},
},
{
id: '558479d6e30ba034120008a9',
relationships: {
latest_default_branch_snapshot: {
data: null,
},
latest_default_branch_test_report: {
data: {
id: '62110434a7160b00010b4b59',
type: 'test_reports',
},
},
},
},
],
})
)
.networkOn() // Combined with allowUnmocked: true, this allows the inner test reports query to go through.
.expectBadge({
label: 'coverage',
message: isIntegerPercentage,
})
t.create('test coverage percentage for non-existent repo')
.get('/coverage/unknown/unknown.json')
.expectBadge({

View File

@@ -3,6 +3,7 @@
* including colours based off download count, version number, etc.
*/
import moment from 'moment'
import pep440 from '@renovate/pep440'
function version(version) {
if (typeof version !== 'string' && typeof version !== 'number') {
@@ -20,6 +21,17 @@ function version(version) {
}
}
function pep440VersionColor(version) {
if (!pep440.valid(version)) {
return 'lightgrey'
}
const parsedVersion = pep440.explain(version)
if (parsedVersion.is_prerelease || parsedVersion.public.startsWith('0.')) {
return 'orange'
}
return 'blue'
}
function floorCount(value, yellow, yellowgreen, green) {
if (value <= 0) {
return 'red'
@@ -106,6 +118,7 @@ function age(date) {
export {
version,
pep440VersionColor,
downloadCount,
coveragePercentage,
floorCount,

View File

@@ -6,6 +6,7 @@ import {
letterScore,
age,
version,
pep440VersionColor,
} from './color-formatters.js'
describe('Color formatters', function () {
@@ -106,4 +107,45 @@ describe('Color formatters', function () {
"Can't generate a version color for [object Object]"
)
})
test(pep440VersionColor, () => {
forCases([
given('1.0.1'),
given('v2.1.6'),
given('1.0.1+abcd'),
given('1.0'),
given('v1'),
given(9),
given(1.0),
]).expect('blue')
forCases([
given('1.0.1-rc1'),
given('1.0.1rc1'),
given('1.0.0-Beta'),
given('1.0.0Beta'),
given('1.1.0-alpha'),
given('1.1.0alpha'),
given('1.0.1-dev'),
given('1.0.1dev'),
given('2.1.6-b1'),
given('2.1.6b1'),
given('0.1.0'),
given('v0.1.0'),
given('v2.1.6-b1'),
given('0.1.0+abcd'),
given('2.1.6-b1+abcd'),
given('0.0.0'),
given(0.1),
given('0.9'),
]).expect('orange')
forCases([
given('6.0.0-SNAPSHOT'),
given('2.1.6-prerelease'),
given(true),
given(null),
given('cheese'),
]).expect('lightgrey')
})
})

View File

@@ -0,0 +1,21 @@
import yaml from 'js-yaml'
import { NotFound, InvalidResponse } from '../index.js'
import { latest } from '../version.js'
export function parseLatestVersionFromConfig(configYaml) {
let versions
try {
const config = yaml.load(configYaml)
versions = Object.keys(config.versions)
} catch (err) {
throw new InvalidResponse({
prettyMessage: 'invalid config.yml',
underlyingError: err,
})
}
const version = latest(versions)
if (version == null) {
throw new NotFound({ prettyMessage: 'no versions found' })
}
return version
}

View File

@@ -0,0 +1,33 @@
import { expect } from 'chai'
import { NotFound, InvalidResponse } from '../index.js'
import { parseLatestVersionFromConfig } from './conan-version-helpers.js'
describe('parseLatestVersionFromConfig', function () {
it('returns latest available version', function () {
expect(
parseLatestVersionFromConfig(`
versions:
1.68.0:
folder: all
1.70.0:
folder: all
1.69.0:
folder: all
`)
).to.equal('1.70.0')
})
it('rejects invalid yaml', function () {
expect(() => parseLatestVersionFromConfig('[')).to.throw(InvalidResponse)
})
it('treats no results array as invalid', function () {
expect(() =>
parseLatestVersionFromConfig('somethingElse: whatever')
).to.throw(InvalidResponse)
})
it('treats empty results array as not found', function () {
expect(() => parseLatestVersionFromConfig('versions: []')).to.throw(
NotFound
)
})
})

View File

@@ -0,0 +1,34 @@
import { renderVersionBadge } from '../version.js'
import { ConditionalGithubAuthV3Service } from '../github/github-auth-service.js'
import { fetchRepoContent } from '../github/github-common-fetch.js'
import { parseLatestVersionFromConfig } from './conan-version-helpers.js'
export default class ConanVersion extends ConditionalGithubAuthV3Service {
static category = 'version'
static route = { base: 'conan/v', pattern: ':packageName' }
static examples = [
{
title: 'Conan Center',
namedParams: { packageName: 'boost' },
staticPreview: renderVersionBadge({ version: '1.78.0' }),
keywords: ['c++'],
},
]
static defaultBadgeData = { label: 'conan' }
async handle({ packageName }) {
const configContent = await fetchRepoContent(this, {
user: 'conan-io',
repo: 'conan-center-index',
branch: 'master',
filename: `recipes/${packageName}/config.yml`,
})
const version = parseLatestVersionFromConfig(configContent)
return renderVersionBadge({ version })
}
}

View File

@@ -0,0 +1,17 @@
import { isSemver } from '../test-validators.js'
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('gets the package version of zeromq')
.get('/zeromq.json')
.expectBadge({ label: 'conan', message: isSemver })
t.create('returns not found for invalid package')
.get('/this package does not exist - shields test.json')
.expectBadge({
label: 'conan',
color: 'red',
message:
'repo not found, branch not found, or recipes/this package does not exist - shields test/config.yml missing',
})

View File

@@ -52,9 +52,7 @@ export default class DocsRs extends BaseJsonService {
}
async handle({ crate, version = 'latest' }) {
const { build_status: buildStatus } = (
await this.fetch({ crate, version })
).pop()
const [{ build_status: buildStatus }] = await this.fetch({ crate, version })
return this.constructor.render({ version, buildStatus })
}
}

View File

@@ -10,6 +10,10 @@ t.create('Failing docs')
.get('/tensorflow/0.16.1.json')
.expectBadge({ label: 'docs@0.16.1', message: 'failing' })
t.create('Multiple builds, latest passing')
.get('/bevy_tweening/0.3.1.json')
.expectBadge({ label: 'docs@0.3.1', message: 'passing' })
t.create('Getting latest version works')
.get('/rand/latest.json')
.expectBadge({

View File

@@ -2,7 +2,17 @@ import Joi from 'joi'
import { renderContributorBadge } from '../contributor-count.js'
import { ConditionalGithubAuthV3Service } from './github-auth-service.js'
import { fetchJsonFromRepo } from './github-common-fetch.js'
import { documentation } from './github-helpers.js'
import { documentation as commonDocumentation } from './github-helpers.js'
const documentation = `
<p>
The All Contributors service allows you to recognize all your project
contributors, including those that don't push code. See
<a href="https://allcontributors.org">https://allcontributors.org</a>
for more information.
</p>
${commonDocumentation}
`
const schema = Joi.object({
contributors: Joi.array().required(),
@@ -17,7 +27,7 @@ export default class GithubAllContributorsService extends ConditionalGithubAuthV
static examples = [
{
title: 'Github All Contributors',
title: 'GitHub contributors (via allcontributors.org)',
namedParams: {
repo: 'all-contributors',
user: 'all-contributors',

View File

@@ -77,8 +77,7 @@ class GithubApiProvider {
}
getV4RateLimitFromBody(body) {
const parsedBody = JSON.parse(body)
const b = Joi.attempt(parsedBody, bodySchema)
const b = Joi.attempt(body, bodySchema)
return {
rateLimit: b.data.rateLimit.limit,
totalUsesRemaining: b.data.rateLimit.remaining,
@@ -90,8 +89,17 @@ class GithubApiProvider {
let rateLimit, totalUsesRemaining, nextReset
if (url.startsWith('/graphql')) {
try {
const parsedBody = JSON.parse(res.body)
if ('message' in parsedBody && !('data' in parsedBody)) {
if (parsedBody.message === 'Sorry. Your account was suspended.') {
this.invalidateToken(token)
return
}
}
;({ rateLimit, totalUsesRemaining, nextReset } =
this.getV4RateLimitFromBody(res.body))
this.getV4RateLimitFromBody(parsedBody))
} catch (e) {
console.error(
`Could not extract rate limit info from response body ${res.body}`

View File

@@ -126,14 +126,35 @@ describe('Github API provider', function () {
})
})
context('an unauthorized response', function () {
it('should invoke the callback and update the token with the expected values', async function () {
context('unauthorized API responses', function () {
it('should invoke the callback and update the token with the expected values (unauthorized, v3)', async function () {
const mockResponse = { res: { statusCode: 401, headers: {} } }
const mockRequest = sinon.stub().resolves(mockResponse)
await provider.fetch(mockRequest, '/foo', {})
expect(mockStandardToken.invalidate).to.have.been.calledOnce
expect(mockStandardToken.update).not.to.have.been.called
})
it('should invoke the callback and update the token with the expected values (unauthorized, v4)', async function () {
const mockResponse = { res: { statusCode: 401, body: {} } }
const mockRequest = sinon.stub().resolves(mockResponse)
await provider.fetch(mockRequest, '/graphql', {})
expect(mockGraphqlToken.invalidate).to.have.been.calledOnce
expect(mockGraphqlToken.update).not.to.have.been.called
})
it('should invoke the callback and update the token with the expected values (suspended, v4)', async function () {
const mockResponse = {
res: {
statusCode: 200,
body: '{ "message": "Sorry. Your account was suspended." }',
},
}
const mockRequest = sinon.stub().resolves(mockResponse)
await provider.fetch(mockRequest, '/graphql', {})
expect(mockGraphqlToken.invalidate).to.have.been.calledOnce
expect(mockGraphqlToken.update).not.to.have.been.called
})
})
context('a connection error', function () {

View File

@@ -58,7 +58,7 @@ export default class GithubDeployments extends GithubAuthV4Service {
environment: 'shields-staging',
},
staticPreview: this.render({
state: 'success',
state: 'SUCCESS',
}),
documentation,
},

View File

@@ -1,3 +1,4 @@
import { pep440VersionColor } from '../color-formatters.js'
import { renderVersionBadge } from '../version.js'
import { isLockfile, getDependencyVersion } from '../pipenv-helpers.js'
import { addv } from '../text-formatters.js'
@@ -80,6 +81,7 @@ class GithubPipenvLockedPythonVersion extends ConditionalGithubAuthV3Service {
version,
tag: branch,
defaultLabel: 'python',
versionFormatter: pep440VersionColor,
})
}
@@ -147,7 +149,7 @@ class GithubPipenvLockedDependencyVersion extends ConditionalGithubAuthV3Service
return {
label: dependency,
message: version ? addv(version) : ref,
color: 'blue',
color: version ? pep440VersionColor(version) : 'blue',
}
}

View File

@@ -82,10 +82,8 @@ t.create('Locked version of unknown dependency')
})
t.create('Locked version of VCS dependency')
.get(
'/locked/dependency-version/DemocracyClub/aggregator-api/dc-base-theme.json'
)
.get('/locked/dependency-version/GSS-Cogs/databaker-docker/databaker.json')
.expectBadge({
label: 'dc-base-theme',
label: 'databaker',
message: isShortSha,
})

View File

@@ -1,7 +1,7 @@
import Joi from 'joi'
import { renderDownloadsBadge } from '../downloads.js'
import { addv, maybePluralize } from '../text-formatters.js'
import { version as versionColor } from '../color-formatters.js'
import { maybePluralize } from '../text-formatters.js'
import { renderVersionBadge } from '../version.js'
import { BaseJsonService } from '../index.js'
const hexSchema = Joi.object({
@@ -14,7 +14,8 @@ const hexSchema = Joi.object({
meta: Joi.object({
licenses: Joi.array().required(),
}).required(),
latest_stable_version: Joi.string().required(),
latest_stable_version: Joi.string(),
latest_version: Joi.string().required(),
}).required()
class BaseHexPmService extends BaseJsonService {
@@ -84,12 +85,14 @@ class HexPmVersion extends BaseHexPmService {
]
static render({ version }) {
return { message: addv(version), color: versionColor(version) }
return renderVersionBadge({ version })
}
async handle({ packageName }) {
const json = await this.fetch({ packageName })
return this.constructor.render({ version: json.latest_stable_version })
return this.constructor.render({
version: json.latest_stable_version || json.latest_version,
})
}
}

View File

@@ -1,8 +1,10 @@
import Joi from 'joi'
import { ServiceTester } from '../tester.js'
import { isMetric, isMetricOverTimePeriod } from '../test-validators.js'
const isHexpmVersion = Joi.string().regex(/^v\d+.\d+.?\d?$/)
import {
isMetric,
isMetricOverTimePeriod,
isVPlusDottedVersionNClausesWithOptionalSuffix,
} from '../test-validators.js'
export const t = new ServiceTester({ id: 'hexpm', title: 'Hex.pm' })
@@ -22,6 +24,7 @@ t.create('downloads (zero for period)')
.reply(200, {
downloads: { all: 100 }, // there is no 'day' key here
latest_stable_version: '1.0',
latest_version: '1.0',
meta: { licenses: ['MIT'] },
})
)
@@ -35,9 +38,26 @@ t.create('downloads (not found)')
.get('/dt/this-package-does-not-exist.json')
.expectBadge({ label: 'downloads', message: 'not found' })
t.create('version')
.get('/v/cowboy.json')
.expectBadge({ label: 'hex', message: isHexpmVersion })
t.create('version').get('/v/cowboy.json').expectBadge({
label: 'hex',
message: isVPlusDottedVersionNClausesWithOptionalSuffix,
})
t.create('version (no stable version)')
.get('/v/prima_opentelemetry_ex.json')
.intercept(nock =>
nock('https://hex.pm/')
.get('/api/packages/prima_opentelemetry_ex')
.reply(200, {
downloads: { all: 100 },
latest_version: '1.0.0-rc.3',
meta: { licenses: ['MIT'] },
})
)
.expectBadge({
label: 'hex',
message: isVPlusDottedVersionNClausesWithOptionalSuffix,
})
t.create('version (not found)')
.get('/v/this-package-does-not-exist.json')
@@ -57,6 +77,7 @@ t.create('license (multiple licenses)')
.reply(200, {
downloads: { all: 100 },
latest_stable_version: '1.0',
latest_version: '1.0',
meta: { licenses: ['GPLv2', 'MIT'] },
})
)
@@ -74,6 +95,7 @@ t.create('license (no license)')
.reply(200, {
downloads: { all: 100 },
latest_stable_version: '1.0',
latest_version: '1.0',
meta: { licenses: [] },
})
)

View File

@@ -81,6 +81,8 @@ class LibrariesIoProjectDependencies extends LibrariesIoBase {
},
]
static _cacheLength = 900
async handle({ platform, scope, packageName, version = 'latest' }) {
const url = `/${encodeURIComponent(platform)}/${
scope ? encodeURIComponent(`${scope}/`) : ''
@@ -116,6 +118,8 @@ class LibrariesIoRepoDependencies extends LibrariesIoBase {
},
]
static _cacheLength = 900
async handle({ user, repo }) {
const url = `/github/${encodeURIComponent(user)}/${encodeURIComponent(
repo

View File

@@ -32,6 +32,8 @@ export default class LibrariesIoDependentRepos extends LibrariesIoBase {
},
]
static _cacheLength = 900
static defaultBadgeData = {
label: 'dependent repos',
}

View File

@@ -32,6 +32,8 @@ export default class LibrariesIoDependents extends LibrariesIoBase {
},
]
static _cacheLength = 900
static defaultBadgeData = {
label: 'dependents',
}

View File

@@ -1,18 +1,18 @@
import Joi from 'joi'
import { BaseJsonService } from '../index.js'
import { BaseJsonService, NotFound } from '../index.js'
import { isStable, latest } from '../php-version.js'
const packageSchema = Joi.object()
.pattern(
/^/,
Joi.object({
'default-branch': Joi.bool(),
version: Joi.string(),
require: Joi.object({
const packageSchema = Joi.array().items(
Joi.object({
version: Joi.string().required(),
require: Joi.alternatives(
Joi.object({
php: Joi.string(),
}),
}).required()
)
.required()
}).required(),
Joi.string().valid('__unset')
),
})
)
const allVersionsSchema = Joi.object({
packages: Joi.object().pattern(/^/, packageSchema).required(),
@@ -36,7 +36,31 @@ class BasePackagistService extends BaseJsonService {
* @returns {object} Parsed response
*/
async fetch({ user, repo, schema, server = 'https://packagist.org' }) {
const url = `${server}/p/${user.toLowerCase()}/${repo.toLowerCase()}.json`
const url = `${server}/p2/${user.toLowerCase()}/${repo.toLowerCase()}.json`
return this._requestJson({
schema,
url,
})
}
/**
* Fetch dev releases method.
*
* This method utilize composer metadata API which
* "... is the preferred way to access the data as it is always up to date,
* and dumped to static files so it is very efficient on our end." (comment from official documentation).
* For more information please refer to https://packagist.org/apidoc#get-package-data.
*
* @param {object} attrs Refer to individual attrs
* @param {string} attrs.user package user
* @param {string} attrs.repo package repository
* @param {Joi} attrs.schema Joi schema to validate the response transformed to JSON
* @param {string} attrs.server URL for the packagist registry server (Optional)
* @returns {object} Parsed response
*/
async fetchDev({ user, repo, schema, server = 'https://packagist.org' }) {
const url = `${server}/p2/${user.toLowerCase()}/${repo.toLowerCase()}~dev.json`
return this._requestJson({
schema,
@@ -73,16 +97,74 @@ class BasePackagistService extends BaseJsonService {
})
}
getDefaultBranch(json, user, repo) {
const packageName = this.getPackageName(user, repo)
return Object.values(json.packages[packageName]).find(
b => b['default-branch'] === true
)
}
getPackageName(user, repo) {
return `${user.toLowerCase()}/${repo.toLowerCase()}`
}
/**
* Extract the array of minified versions of the given packageName,
* expand them back to their original format then return.
*
* @param {object} json The response of Packagist v2 API.
* @param {string} packageName The package name.
*
* @returns {object[]} An array of version metadata object.
*
* @see https://github.com/composer/metadata-minifier/blob/c549d23829536f0d0e984aaabbf02af91f443207/src/MetadataMinifier.php#L16-L46
*/
static expandPackageVersions(json, packageName) {
const versions = json.packages[packageName]
const expanded = []
let expandedVersion = null
for (const i in versions) {
const versionData = versions[i]
if (!expandedVersion) {
expandedVersion = { ...versionData }
expanded.push(expandedVersion)
continue
}
expandedVersion = { ...expandedVersion, ...versionData }
for (const key in expandedVersion) {
if (expandedVersion[key] === '__unset') {
delete expandedVersion[key]
}
}
expanded.push(expandedVersion)
}
return expanded
}
/**
* Find the object representation of the latest release.
*
* @param {object[]} versions An array of object representing a version.
* @param {boolean} includePrereleases Includes pre-release semver for the search.
*
* @returns {object} The object of the latest version.
* @throws {NotFound} Thrown if there is no item from the version array.
*/
findLatestRelease(versions, includePrereleases = false) {
// Find the latest version string, if not found, throw NotFound.
const versionStrings = versions
.filter(
version =>
typeof version.version === 'string' ||
version.version instanceof String
)
.map(version => version.version)
if (versionStrings.length < 1) {
throw new NotFound({ prettyMessage: 'no released version found' })
}
let release = latest(versionStrings)
if (!includePrereleases) {
release = latest(versionStrings.filter(isStable)) || release
}
return versions.filter(version => version.version === release)[0]
}
}
const customServerDocumentationFragment = `

View File

@@ -0,0 +1,77 @@
import { strict as assert } from 'assert'
import { describe, it } from 'mocha'
import { BasePackagistService } from './packagist-base.js'
// @reference: https://github.com/composer/metadata-minifier/blob/c549d23829536f0d0e984aaabbf02af91f443207/tests/MetadataMinifierTest.php#L36-L40
const minifiedSample = [
{
name: 'foo/bar',
version: '2.0.0',
version_normalized: '2.0.0.0',
type: 'library',
scripts: {
foo: 'bar',
},
license: ['MIT'],
},
{
version: '1.2.0',
version_normalized: '1.2.0.0',
license: ['GPL'],
homepage: 'https://example.org',
scripts: '__unset',
},
{
version: '1.0.0',
version_normalized: '1.0.0.0',
homepage: '__unset',
},
]
const expandedSample = [
{
name: 'foo/bar',
version: '2.0.0',
version_normalized: '2.0.0.0',
type: 'library',
scripts: {
foo: 'bar',
},
license: ['MIT'],
},
{
name: 'foo/bar',
version: '1.2.0',
version_normalized: '1.2.0.0',
type: 'library',
license: ['GPL'],
homepage: 'https://example.org',
},
{
name: 'foo/bar',
version: '1.0.0',
version_normalized: '1.0.0.0',
type: 'library',
license: ['GPL'],
},
]
describe('BasePackagistService', function () {
describe('expandPackageVersions', function () {
const expanded = BasePackagistService.expandPackageVersions(
{
packages: {
'foobar/foobar': minifiedSample,
},
},
'foobar/foobar'
)
it('should expand the minified package array to match the expanded sample', function () {
assert.deepStrictEqual(
expanded,
expandedSample,
'The expanded array should match the sample'
)
})
})
})

View File

@@ -8,12 +8,11 @@ import {
customServerDocumentationFragment,
} from './packagist-base.js'
const packageSchema = Joi.object()
.pattern(
/^/,
const packageSchema = Joi.array()
.items(
Joi.object({
'default-branch': Joi.bool(),
license: Joi.array().required(),
version: Joi.string(),
license: Joi.array(),
}).required()
)
.required()
@@ -57,17 +56,27 @@ export default class PackagistLicense extends BasePackagistService {
}
transform({ json, user, repo }) {
const branch = this.getDefaultBranch(json, user, repo)
if (!branch) {
throw new NotFound({ prettyMessage: 'default branch not found' })
const packageName = this.getPackageName(user, repo)
const versions = BasePackagistService.expandPackageVersions(
json,
packageName
)
const version = this.findLatestRelease(versions)
const license = version.license
if (!license) {
throw new NotFound({ prettyMessage: 'license not found' })
}
const { license } = branch
return { license }
}
async handle({ user, repo }, { server }) {
const json = await this.fetch({ user, repo, schema, server })
const { license } = this.transform({ json, user, repo })
return renderLicenseBadge({ license })
}
}

View File

@@ -3,42 +3,22 @@ import { NotFound } from '../index.js'
import PackagistLicense from './packagist-license.service.js'
describe('PackagistLicense', function () {
it('should throw NotFound when default branch is missing', function () {
it('should return the license of the most recent release', function () {
const json = {
packages: {
'frodo/the-one-package': {
'1.0.x-dev': { license: 'MIT' },
'1.1.x-dev': { license: 'MIT' },
'2.0.x-dev': { license: 'MIT' },
'2.1.x-dev': { license: 'MIT' },
},
},
}
expect(() =>
PackagistLicense.prototype.transform({
json,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'default branch not found')
})
it('should return default branch when default branch is found', function () {
const json = {
packages: {
'frodo/the-one-package': {
'1.0.x-dev': { license: 'MIT' },
'1.1.x-dev': { license: 'MIT' },
'2.0.x-dev': {
license: 'MIT-default-branch',
'default-branch': true,
'frodo/the-one-package': [
{
version: '1.2.4',
license: 'MIT-latest',
},
'2.1.x-dev': { license: 'MIT' },
},
{
version: '1.2.3',
license: 'MIT',
},
],
},
}
expect(
PackagistLicense.prototype.transform({
json,
@@ -47,6 +27,85 @@ describe('PackagistLicense', function () {
})
)
.to.have.property('license')
.that.equals('MIT-default-branch')
.that.equals('MIT-latest')
})
it('should return the license of the most recent stable release', function () {
const json = {
packages: {
'frodo/the-one-package': [
{
version: '1.2.4-RC1', // Pre-release
license: 'MIT-latest',
},
{
version: '1.2.3', // Stable release
license: 'MIT',
},
],
},
}
expect(
PackagistLicense.prototype.transform({
json,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.have.property('license')
.that.equals('MIT')
})
it('should return the license of the most recent pre-release if no stable releases', function () {
const json = {
packages: {
'frodo/the-one-package': [
{
version: '1.2.4-RC2',
license: 'MIT-latest',
},
{
version: '1.2.4-RC1',
license: 'MIT',
},
],
},
}
expect(
PackagistLicense.prototype.transform({
json,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.have.property('license')
.that.equals('MIT-latest')
})
it('should throw NotFound when license key not in response', function () {
const json = {
packages: {
'frodo/the-one-package': [
{
version: '1.2.4',
},
{
version: '1.2.3',
},
],
},
}
expect(() =>
PackagistLicense.prototype.transform({
json,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'license not found')
})
})

View File

@@ -66,11 +66,58 @@ export default class PackagistPhpVersion extends BasePackagistService {
}
}
transform({ json, user, repo, version = '' }) {
const packageVersion =
version === ''
? this.getDefaultBranch(json, user, repo)
: json.packages[this.getPackageName(user, repo)][version]
findVersionIndex(json, version) {
return json.findIndex(v => v.version === version)
}
async findSpecifiedVersion(json, user, repo, version, server) {
let release
if ((release = json[this.findVersionIndex(json, version)])) {
return release
} else {
try {
const allData = await this.fetchDev({
user,
repo,
schema: allVersionsSchema,
server,
})
const versions = BasePackagistService.expandPackageVersions(
allData,
this.getPackageName(user, repo)
)
return versions[this.findVersionIndex(versions, version)]
} catch (e) {
return release
}
}
}
async getPhpVersion({ json, user, repo, version = '', server }) {
let packageVersion
const versions = BasePackagistService.expandPackageVersions(
json,
this.getPackageName(user, repo)
)
if (version === '') {
packageVersion = this.findLatestRelease(versions)
} else {
try {
packageVersion = await this.findSpecifiedVersion(
versions,
user,
repo,
version,
server
)
} catch (e) {
packageVersion = null
}
}
if (!packageVersion) {
throw new NotFound({ prettyMessage: 'invalid version' })
@@ -90,11 +137,12 @@ export default class PackagistPhpVersion extends BasePackagistService {
schema: allVersionsSchema,
server,
})
const { phpVersion } = this.transform({
const { phpVersion } = await this.getPhpVersion({
json: allData,
user,
repo,
version,
server,
})
return this.constructor.render({ php: phpVersion })
}

View File

@@ -1,99 +1,115 @@
import { expect } from 'chai'
import { NotFound } from '../index.js'
import PackagistPhpVersion from './packagist-php-version.service.js'
describe('PackagistPhpVersion', function () {
const json = {
packages: {
'frodo/the-one-package': {
'1.0.0': { require: { php: '^5.6 || ^7' } },
'2.0.0': { require: { php: '^7.2' } },
'3.0.0': { require: { php: '^7.4 || 8' } },
'dev-main': { require: { php: '^8' }, 'default-branch': true },
},
'samwise/gardening': {
'1.0.x-dev': {},
'2.0.x-dev': {},
},
'pippin/mischief': {
'1.0.0': {},
'dev-main': { require: {}, 'default-branch': true },
},
'frodo/the-one-package': [
{
version: '3.0.0',
require: { php: '^7.4 || 8' },
},
{
version: '2.0.0',
require: { php: '^7.2' },
},
{
version: '1.0.0',
require: { php: '^5.6 || ^7' },
},
],
},
}
it('should throw NotFound when package version is missing', function () {
expect(() =>
PackagistPhpVersion.prototype.transform({
it('should throw NotFound when package version is missing', async function () {
await expect(
PackagistPhpVersion.prototype.getPhpVersion({
json,
user: 'frodo',
repo: 'the-one-package',
version: '4.0.0',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'invalid version')
).to.be.rejectedWith('invalid version')
})
it('should throw NotFound when version not specified and no default branch found', function () {
expect(() =>
PackagistPhpVersion.prototype.transform({
json,
user: 'samwise',
repo: 'gardening',
it('should throw NotFound when PHP version not found on package when using default release', async function () {
const specJson = {
packages: {
'frodo/the-one-package': [
{
version: '3.0.0',
},
{
version: '2.0.0',
require: { php: '^7.2' },
},
{
version: '1.0.0',
require: { php: '^5.6 || ^7' },
},
],
},
}
await expect(
PackagistPhpVersion.prototype.getPhpVersion({
json: specJson,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'invalid version')
).to.be.rejectedWith('version requirement not found')
})
it('should throw NotFound when PHP version not found on package when using default branch', function () {
expect(() =>
PackagistPhpVersion.prototype.transform({
json,
user: 'pippin',
repo: 'mischief',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'version requirement not found')
})
it('should throw NotFound when PHP version not found on package when using specified version', function () {
expect(() =>
PackagistPhpVersion.prototype.transform({
json,
user: 'pippin',
repo: 'mischief',
it('should throw NotFound when PHP version not found on package when using specified release', async function () {
const specJson = {
packages: {
'frodo/the-one-package': [
{
version: '3.0.0',
require: { php: '^7.4 || 8' },
},
{
version: '2.0.0',
require: { php: '^7.2' },
},
{
version: '1.0.0',
require: '__unset',
},
],
},
}
await expect(
PackagistPhpVersion.prototype.getPhpVersion({
json: specJson,
user: 'frodo',
repo: 'the-one-package',
version: '1.0.0',
})
)
.to.throw(NotFound)
.with.property('prettyMessage', 'version requirement not found')
).to.be.rejectedWith('version requirement not found')
})
it('should return PHP version for the default branch', function () {
it('should return PHP version for the default release', async function () {
expect(
PackagistPhpVersion.prototype.transform({
await PackagistPhpVersion.prototype.getPhpVersion({
json,
user: 'frodo',
repo: 'the-one-package',
})
)
.to.have.property('phpVersion')
.that.equals('^8')
})
it('should return PHP version for the specified branch', function () {
expect(
PackagistPhpVersion.prototype.transform({
json,
user: 'frodo',
repo: 'the-one-package',
version: '3.0.0',
})
)
.to.have.property('phpVersion')
.that.equals('^7.4 || 8')
})
it('should return PHP version for the specified release', async function () {
expect(
await PackagistPhpVersion.prototype.getPhpVersion({
json,
user: 'frodo',
repo: 'the-one-package',
version: '2.0.0',
})
)
.to.have.property('phpVersion')
.that.equals('^7.2')
})
})

View File

@@ -6,8 +6,8 @@ t.create('gets the package version of symfony')
.get('/symfony/symfony.json')
.expectBadge({ label: 'php', message: isComposerVersion })
t.create('gets the package version of symfony 2.8')
.get('/symfony/symfony/v2.8.0.json')
t.create('gets the package version of symfony 5.2.3')
.get('/symfony/symfony/v5.2.3.json')
.expectBadge({ label: 'php', message: isComposerVersion })
t.create('package with no requirements')

View File

@@ -1,26 +1,18 @@
import Joi from 'joi'
import { renderVersionBadge } from '../version.js'
import { compare, isStable, latest } from '../php-version.js'
import { optionalUrl } from '../validators.js'
import { NotFound, redirector } from '../index.js'
import { redirector } from '../index.js'
import {
allVersionsSchema,
keywords,
BasePackagistService,
customServerDocumentationFragment,
} from './packagist-base.js'
const packageSchema = Joi.object()
.pattern(
/^/,
Joi.object({
version: Joi.string(),
extra: Joi.object({
'branch-alias': Joi.object().pattern(/^/, Joi.string()),
}),
}).required()
)
.required()
const packageSchema = Joi.array().items(
Joi.object({
version: Joi.string().required(),
})
)
const schema = Joi.object({
packages: Joi.object().pattern(/^/, packageSchema).required(),
@@ -80,45 +72,9 @@ class PackagistVersion extends BasePackagistService {
}
static render({ version }) {
if (version === undefined) {
throw new NotFound({ prettyMessage: 'no released version found' })
}
return renderVersionBadge({ version })
}
transform({ includePrereleases, json, user, repo }) {
const versionsData = json.packages[this.getPackageName(user, repo)]
let versions = Object.keys(versionsData)
const aliasesMap = {}
versions.forEach(version => {
const versionData = versionsData[version]
if (
versionData.extra &&
versionData.extra['branch-alias'] &&
versionData.extra['branch-alias'][version]
) {
// eg, version is 'dev-master', mapped to '2.0.x-dev'.
const validVersion = versionData.extra['branch-alias'][version]
if (
aliasesMap[validVersion] === undefined ||
compare(aliasesMap[validVersion], validVersion) < 0
) {
versions.push(validVersion)
aliasesMap[validVersion] = version
}
}
})
versions = versions.filter(version => !/^dev-/.test(version))
if (includePrereleases) {
return { version: latest(versions) }
} else {
const stableVersion = latest(versions.filter(isStable))
return { version: stableVersion || latest(versions) }
}
}
async handle(
{ user, repo },
{ include_prereleases: includePrereleases, server }
@@ -127,10 +83,11 @@ class PackagistVersion extends BasePackagistService {
const json = await this.fetch({
user,
repo,
schema: includePrereleases ? schema : allVersionsSchema,
schema,
server,
})
const { version } = this.transform({ includePrereleases, json, user, repo })
const versions = json.packages[this.getPackageName(user, repo)]
const { version } = this.findLatestRelease(versions, includePrereleases)
return this.constructor.render({ version })
}
}

View File

@@ -0,0 +1,98 @@
import Joi from 'joi'
import { BaseJsonService, InvalidResponse } from '../index.js'
import { renderVersionBadge } from '../version.js'
import { pep440VersionColor } from '../color-formatters.js'
const schema = Joi.object({
releases: Joi.object()
.pattern(
Joi.string(),
Joi.object({
prerelease: Joi.boolean().required(),
yanked: Joi.boolean().required(),
files: Joi.object().required(),
})
)
.required(),
}).required()
const queryParamSchema = Joi.object({
include_prereleases: Joi.equal(''),
}).required()
const keywords = ['python', 'arm', 'raspberry pi']
export default class PiWheelsVersion extends BaseJsonService {
static category = 'version'
static route = { base: 'piwheels/v', pattern: ':wheel', queryParamSchema }
static examples = [
{
title: 'piwheels',
namedParams: { wheel: 'numpy' },
staticPreview: this.render({ version: '1.22.2' }),
keywords,
},
{
title: 'piwheels (including prereleases)',
namedParams: { wheel: 'flask' },
queryParams: {
include_prereleases: null,
},
staticPreview: this.render({ version: '2.0.0rc2' }),
keywords,
},
]
static defaultBadgeData = { label: 'piwheels' }
static render({ version }) {
return renderVersionBadge({ version, versionFormatter: pep440VersionColor })
}
async fetch({ wheel }) {
return this._requestJson({
schema,
url: `https://www.piwheels.org/project/${wheel}/json/`,
errorMessages: { 404: 'package not found' },
})
}
static transform(releases, includePrereleases) {
const allReleases = Object.keys(releases)
.reduce(
(acc, key) =>
acc.concat({
version: key,
prerelease: releases[key].prerelease,
yanked: releases[key].yanked,
hasFiles: Object.keys(releases[key].files).length > 0,
}),
[]
)
.filter(release => !release.yanked) // exclude any yanked releases
.filter(release => release.hasFiles) // exclude any releases with no wheels
if (allReleases.length === 0) {
throw new InvalidResponse({ prettyMessage: 'no versions found' })
}
if (includePrereleases) {
return allReleases[0].version
}
const stableReleases = allReleases.filter(release => !release.prerelease)
if (stableReleases.length > 0) {
return stableReleases[0].version
}
return allReleases[0].version
}
async handle({ wheel }, queryParams) {
const includePrereleases = queryParams.include_prereleases !== undefined
const { releases } = await this.fetch({ wheel })
const version = this.constructor.transform(releases, includePrereleases)
return this.constructor.render({ version })
}
}

View File

@@ -0,0 +1,65 @@
import { expect } from 'chai'
import { test, given } from 'sazerac'
import { InvalidResponse } from '../index.js'
import PiWheelsVersion from './piwheels-version.service.js'
describe('PiWheelsVersion', function () {
test(PiWheelsVersion.transform, () => {
given(
{
'2.0.0rc1': { prerelease: true, yanked: false, files: { foobar: {} } },
'1.9.0': { prerelease: false, yanked: false, files: { foobar: {} } },
},
false
).expect('1.9.0')
given(
{
'2.0.0rc1': { prerelease: true, yanked: false, files: { foobar: {} } },
'1.9.0': { prerelease: false, yanked: false, files: { foobar: {} } },
},
true
).expect('2.0.0rc1')
given(
{
'2.0.0': { prerelease: false, yanked: true, files: { foobar: {} } },
'1.9.0': { prerelease: false, yanked: false, files: { foobar: {} } },
},
false
).expect('1.9.0')
given(
{
'2.0.0': { prerelease: false, yanked: false, files: {} },
'1.9.0': { prerelease: false, yanked: false, files: { foobar: {} } },
},
false
).expect('1.9.0')
given(
{
'2.0.0': { prerelease: false, yanked: false, files: { foobar: {} } },
'1.9.0': { prerelease: false, yanked: false, files: { foobar: {} } },
},
false
).expect('2.0.0')
given(
{
'2.0.0rc2': { prerelease: true, yanked: false, files: { foobar: {} } },
'2.0.0rc1': { prerelease: true, yanked: false, files: { foobar: {} } },
},
false
).expect('2.0.0rc2')
})
it('throws `no releases` InvalidResponse if no versions', function () {
expect(() =>
PiWheelsVersion.transform(
{
'1.0.1': { prerelease: false, yanked: false, files: {} },
'1.0.0': { prerelease: false, yanked: true, files: { foobar: {} } },
},
false
)
)
.to.throw(InvalidResponse)
.with.property('prettyMessage', 'no versions found')
})
})

View File

@@ -0,0 +1,13 @@
import { isVPlusDottedVersionNClauses } from '../test-validators.js'
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('version (valid)').get('/flask.json').expectBadge({
label: 'piwheels',
message: isVPlusDottedVersionNClauses,
})
t.create('version (does not exist)').get('/doesn-not-exist.json').expectBadge({
label: 'piwheels',
message: 'package not found',
})

View File

@@ -0,0 +1,49 @@
import Joi from 'joi'
import { BaseJsonService } from '../index.js'
const schema = Joi.object({
publisherId: Joi.string().allow(null).required(),
}).required()
export class PubPublisher extends BaseJsonService {
static category = 'other'
static route = {
base: 'pub/publisher',
pattern: ':packageName',
}
static examples = [
{
title: 'Pub Publisher',
namedParams: { packageName: 'path' },
staticPreview: this.render({ publisher: 'dart.dev' }),
keywords: ['dart', 'dartlang'],
},
]
static _cacheLength = 3600
static defaultBadgeData = { label: 'publisher' }
static render({ publisher }) {
return {
label: 'publisher',
message: publisher == null ? 'unverified' : publisher,
color: publisher == null ? 'lightgrey' : 'blue',
}
}
async fetch({ packageName }) {
return this._requestJson({
schema,
url: `https://pub.dev/api/packages/${packageName}/publisher`,
})
}
async handle({ packageName }) {
const data = await this.fetch({ packageName })
const publisher = data.publisherId
return this.constructor.render({ publisher })
}
}

View File

@@ -0,0 +1,18 @@
import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('package publisher').get('/path.json').expectBadge({
label: 'publisher',
message: 'dart.dev',
})
t.create('package not verified publisher').get('/utf.json').expectBadge({
label: 'publisher',
message: 'unverified',
color: 'lightgrey',
})
t.create('package not found').get('/does-not-exist.json').expectBadge({
label: 'publisher',
message: 'not found',
})

View File

@@ -5,7 +5,8 @@ const schema = Joi.object({
info: Joi.object({
version: Joi.string().required(),
// https://github.com/badges/shields/issues/2022
license: Joi.string().allow(''),
// https://github.com/badges/shields/issues/7728
license: Joi.string().allow('').allow(null),
classifiers: Joi.array().items(Joi.string()).required(),
}).required(),
releases: Joi.object()

View File

@@ -104,6 +104,12 @@ describe('PyPI helpers', function () {
'MIT',
])
forCases([
given({
info: {
license: null,
classifiers: ['License :: OSI Approved :: MIT License'],
},
}),
given({
info: {
license: '',

View File

@@ -1,3 +1,4 @@
import { pep440VersionColor } from '../color-formatters.js'
import { renderVersionBadge } from '../version.js'
import PypiBase from './pypi-base.js'
@@ -19,7 +20,7 @@ export default class PypiVersion extends PypiBase {
static defaultBadgeData = { label: 'pypi' }
static render({ version }) {
return renderVersionBadge({ version })
return renderVersionBadge({ version, versionFormatter: pep440VersionColor })
}
async handle({ egg }) {

View File

@@ -2,9 +2,11 @@ import { createServiceTester } from '../tester.js'
export const t = await createServiceTester()
t.create('grade of https://shields.io')
.timeout(15000)
.get('/security-headers.json?url=https://shields.io')
.expectBadge({ label: 'security headers', message: 'F', color: 'red' })
t.create('grade of https://httpstat.us/301 as redirect')
.timeout(15000)
.get('/security-headers.json?ignoreRedirects&url=https://httpstat.us/301')
.expectBadge({ label: 'security headers', message: 'R', color: 'blue' })

View File

@@ -1,80 +1,11 @@
import Joi from 'joi'
import { renderBuildStatusBadge } from '../build-status.js'
import { BaseJsonService, NotFound, redirector } from '../index.js'
import { deprecatedService } from '../index.js'
// source: https://github.com/badges/shields/pull/1362#discussion_r161693830
const statusCodes = {
0: 'waiting',
10: 'queued',
20: 'processing',
30: 'success',
40: 'skipped',
50: 'unstable',
60: 'timeout',
70: 'cancelled',
80: 'failed',
90: 'stopped',
}
const schema = Joi.array()
.items(
Joi.object({
branchName: Joi.string().required(),
statusCode: Joi.number()
.valid(...Object.keys(statusCodes).map(key => parseInt(key)))
.required(),
}).required()
)
.required()
class Shippable extends BaseJsonService {
static category = 'build'
static route = {
base: 'shippable',
pattern: ':projectId/:branch+',
}
static examples = [
{
title: 'Shippable',
namedParams: {
projectId: '5444c5ecb904a4b21567b0ff',
branch: 'master',
},
staticPreview: this.render({ code: 30 }),
},
]
static defaultBadgeData = { label: 'shippable' }
static render({ code }) {
return renderBuildStatusBadge({ label: 'build', status: statusCodes[code] })
}
async fetch({ projectId }) {
const url = `https://api.shippable.com/projects/${projectId}/branchRunStatus`
return this._requestJson({ schema, url })
}
async handle({ projectId, branch }) {
const data = await this.fetch({ projectId })
const builds = data.filter(result => result.branchName === branch)
if (builds.length === 0) {
throw new NotFound({ prettyMessage: 'branch not found' })
}
return this.constructor.render({ code: builds[0].statusCode })
}
}
const ShippableRedirect = redirector({
export default deprecatedService({
category: 'build',
route: {
base: 'shippable',
pattern: ':projectId',
format: '(?:.+?)',
},
transformPath: ({ projectId }) => `/shippable/${projectId}/master`,
dateAdded: new Date('2020-07-18'),
label: 'shippable',
dateAdded: new Date('2022-03-12'),
})
export { Shippable, ShippableRedirect }

View File

@@ -1,35 +1,20 @@
import { isBuildStatus } from '../build-status.js'
import { ServiceTester } from '../tester.js'
export const t = new ServiceTester({
id: 'Shippable',
id: 'shippable',
title: 'Shippable',
pathPrefix: '/shippable',
})
t.create('build status (valid)')
t.create('no longer available (previously build status with branch)')
.get('/5444c5ecb904a4b21567b0ff/master.json')
.expectBadge({
label: 'build',
message: isBuildStatus,
label: 'shippable',
message: 'no longer available',
})
t.create('build status (branch not found)')
.get('/5444c5ecb904a4b21567b0ff/not-a-branch.json')
.expectBadge({ label: 'shippable', message: 'branch not found' })
t.create('build status (build not found)')
.get('/not-a-build/master.json')
.expectBadge({ label: 'shippable', message: 'not found' })
t.create('build status (unexpected status code)')
.get('/5444c5ecb904a4b21567b0ff/master.json')
.intercept(nock =>
nock('https://api.shippable.com/')
.get('/projects/5444c5ecb904a4b21567b0ff/branchRunStatus')
.reply(200, '[{ "branchName": "master", "statusCode": 63 }]')
)
.expectBadge({ label: 'shippable', message: 'invalid response data' })
t.create('build status (no branch redirect)')
.get('/5444c5ecb904a4b21567b0ff.svg')
.expectRedirect('/shippable/5444c5ecb904a4b21567b0ff/master.svg')
t.create('no longer available (previously build status without branch)')
.get('/5444c5ecb904a4b21567b0ff.json')
.expectBadge({
label: 'shippable',
message: 'no longer available',
})

View File

@@ -20,7 +20,7 @@ t.create('non existent repo')
})
t.create('valid target manifest path')
.get('/snyk/vulndb-fixtures/packages/cli/0.1.0/package.json.json')
.get('/snyk/snyk/test/fixtures/demo-os/package.json.json')
.timeout(20000)
.expectBadge({
label: 'vulnerabilities',

View File

@@ -205,7 +205,7 @@ class SteamFileSize extends SteamFileService {
}
static render({ fileSize }) {
return { message: prettyBytes(fileSize), color: 'brightgreen' }
return { message: prettyBytes(fileSize), color: 'informational' }
}
async onRequest({ response }) {

View File

@@ -0,0 +1,111 @@
import Joi from 'joi'
import { BaseJsonService } from '../index.js'
import {
testResultQueryParamSchema,
renderTestResultBadge,
} from '../test-results.js'
import { nonNegativeInteger } from '../../services/validators.js'
const commonAttrs = {
namedParams: {
provider: 'github',
org: 'tasdemo',
repo: 'axios',
},
queryParams: {
passed_label: 'passed',
failed_label: 'failed',
skipped_label: 'skipped',
compact_message: null,
},
}
const schema = Joi.object({
badge: Joi.object({
passed: nonNegativeInteger,
failed: nonNegativeInteger,
skipped: nonNegativeInteger,
total_tests: nonNegativeInteger,
status: Joi.string().required(),
}).required(),
}).required()
export default class TasBuildStatus extends BaseJsonService {
static category = 'test-results'
static route = {
base: 'tas/tests',
pattern: ':provider/:org/:repo',
queryParamSchema: testResultQueryParamSchema,
}
static examples = [
{
title: 'TAS Tests',
staticPreview: this.render({
passed: 20,
failed: 1,
skipped: 1,
total: 22,
}),
...commonAttrs,
},
]
static defaultBadgeData = { label: 'tests' }
static render({
passed,
failed,
skipped,
total,
passedLabel,
failedLabel,
skippedLabel,
isCompact,
}) {
return renderTestResultBadge({
passed,
failed,
skipped,
total,
passedLabel,
failedLabel,
skippedLabel,
isCompact,
})
}
async fetch({ provider, org, repo }) {
return this._requestJson({
schema,
url: `https://api.tas.lambdatest.com/repo/badge?git_provider=${provider}&org=${org}&repo=${repo}`,
errorMessages: {
401: 'private project not supported',
404: 'project not found',
},
})
}
async handle(
{ provider, org, repo },
{
compact_message: compactMessage,
passed_label: passedLabel,
failed_label: failedLabel,
skipped_label: skippedLabel,
}
) {
const { badge } = await this.fetch({ provider, org, repo })
return this.constructor.render({
passed: badge.passed,
failed: badge.failed,
skipped: badge.skipped,
total: badge.total_tests,
passedLabel,
failedLabel,
skippedLabel,
isCompact: compactMessage !== undefined,
})
}
}

View File

@@ -0,0 +1,52 @@
import { createServiceTester } from '../tester.js'
import {
isDefaultTestTotals,
isCustomTestTotals,
isCustomCompactTestTotals,
} from '../test-validators.js'
export const t = await createServiceTester()
t.create('Test status')
.get('/github/tasdemo/axios.json')
.expectBadge({ label: 'tests', message: isDefaultTestTotals })
t.create('Test status with custom labels')
.get('/github/tasdemo/axios.json', {
qs: {
passed_label: 'good',
failed_label: 'bad',
skipped_label: 'n/a',
},
})
.expectBadge({ label: 'tests', message: isCustomTestTotals })
t.create('Test status with compact message and custom labels')
.get('/github/tasdemo/axios.json', {
qs: {
compact_message: null,
passed_label: '💃',
failed_label: '🤦‍♀️',
skipped_label: '🤷',
},
})
.expectBadge({
label: 'tests',
message: isCustomCompactTestTotals,
})
t.create('Test status on project that does not exist')
.get('/github/tasdemo/doesntexist.json')
.expectBadge({
label: 'tests',
message: 'project not found',
color: 'red',
})
t.create('Test status on private project')
.get('/github/tasdemo/nexe-private.json')
.expectBadge({
label: 'tests',
message: 'private project not supported',
color: 'lightgrey',
})

View File

@@ -1,16 +0,0 @@
import { redirector } from '../index.js'
export default [
redirector({
category: 'coverage',
route: {
base: 'teamcity/coverage',
pattern: ':protocol(http|https)/:hostAndPath(.+)/:buildId',
},
transformPath: ({ buildId }) => `/teamcity/coverage/${buildId}`,
transformQueryParams: ({ protocol, hostAndPath }) => ({
server: `${protocol}://${hostAndPath}`,
}),
dateAdded: new Date('2019-09-15'),
}),
]

View File

@@ -1,15 +0,0 @@
import { ServiceTester } from '../tester.js'
export const t = new ServiceTester({
id: 'TeamCityCoverageRedirect',
title: 'TeamCityCoverageRedirect',
pathPrefix: '/teamcity/coverage',
})
t.create('coverage')
.get('/https/teamcity.jetbrains.com/ReactJSNet_PullRequests.svg')
.expectRedirect(
`/teamcity/coverage/ReactJSNet_PullRequests.svg?server=${encodeURIComponent(
'https://teamcity.jetbrains.com'
)}`
)

View File

@@ -74,12 +74,12 @@ function latestMaybeSemVer(versions, pre) {
try {
// coerce to string then lowercase otherwise alpha > RC
version = versions.sort((a, b) =>
semver.rcompare(
semver.compareBuild(
`${a}`.toLowerCase(),
`${b}`.toLowerCase(),
/* loose */ true
)
)[0]
)[versions.length - 1]
} catch (e) {
version = latestDottedVersion(versions)
}
@@ -152,11 +152,16 @@ function rangeStart(v) {
return range.set[0][0].semver.version
}
function renderVersionBadge({ version, tag, defaultLabel }) {
function renderVersionBadge({
version,
tag,
defaultLabel,
versionFormatter = versionColor,
}) {
return {
label: tag ? `${defaultLabel}@${tag}` : undefined,
message: addv(version),
color: versionColor(version),
color: versionFormatter(version),
}
}

View File

@@ -118,6 +118,9 @@ describe('Version helpers', function () {
given(['1.0.0', '1.0.2', '1.1', '1.0', 'notaversion2', '12bcde4']).expect(
'1.1'
)
// build qualifiers - https://github.com/badges/shields/issues/4172
given(['0.3.9', '0.4.0+1', '0.4.0+9']).expect('0.4.0+9')
})
test(slice, () => {

View File

@@ -99,7 +99,8 @@ const documentation = `
</ul>
</p>
<p>
This badge relies on the https://validator.nu/ service to perform the validation. Please refer to https://about.validator.nu/ for the full documentation and Terms of service.
This badge relies on the <a target="_blank" href="https://validator.nu/">https://validator.nu/</a> service to perform the validation.
Please refer to <a target="_blank" href="https://about.validator.nu/">https://about.validator.nu/</a> for the full documentation and Terms of service.
The following are required from the consumer for the badge to function.
<ul class="note">

View File

@@ -49,7 +49,7 @@ export default class Wercker extends BaseJsonService {
documentation: werckerCIDocumentation,
},
{
title: `Wercker CI Run`,
title: `Wercker CI Run (branch)`,
pattern: 'ci/:applicationId/:branch',
namedParams: {
applicationId: '559e33c8e982fc615500b357',
@@ -68,7 +68,7 @@ export default class Wercker extends BaseJsonService {
staticPreview: this.render({ result: 'passed' }),
},
{
title: `Wercker Build branch`,
title: `Wercker Build (branch)`,
pattern: 'build/:userName/:applicationName/:branch',
namedParams: {
userName: 'wercker',

View File

@@ -41,7 +41,7 @@ const notFoundSchema = Joi.object()
const pluginSchemas = Joi.alternatives(pluginSchema, notFoundSchema)
const themeSchemas = Joi.alternatives(themeSchema, notFoundSchema)
export default class BaseWordpress extends BaseJsonService {
export class BaseWordpress extends BaseJsonService {
async fetch({ extensionType, slug }) {
const url = `https://api.wordpress.org/${extensionType}s/info/1.2/`
let schemas
@@ -84,3 +84,12 @@ export default class BaseWordpress extends BaseJsonService {
return json
}
}
export const documentation = `
<p>
These badges rely on an API that is no longer supported by Wordpress. You are
still free to use them, simply bear in mind that Shields.io cannot guarantee
that they'll keep on working in the future. Please also double-check the
provided slug, as an incorrect value may lead to unexpected results.
</p>
`

View File

@@ -1,7 +1,6 @@
import Joi from 'joi'
import { renderDownloadsBadge } from '../downloads.js'
import { NotFound } from '../index.js'
import BaseWordpress from './wordpress-base.js'
import { documentation, BaseWordpress } from './wordpress-base.js'
const dateSchema = Joi.object()
.pattern(Joi.date().iso(), Joi.number().integer())
@@ -58,6 +57,7 @@ function DownloadsForExtensionType(extensionType) {
title: `WordPress ${capt} Downloads`,
namedParams: { interval: 'dm', slug: exampleSlug },
staticPreview: this.render({ interval: 'dm', downloads: 200000 }),
documentation,
},
]
@@ -91,17 +91,9 @@ function DownloadsForExtensionType(extensionType) {
},
},
})
const size = Object.keys(json).length
downloads = Object.values(json).reduce(
(a, b) => parseInt(a) + parseInt(b)
)
// This check is for non-existent and brand-new plugins both having new stats.
// Non-Existent plugins results are the same as a brandspanking new plugin with no downloads.
if (downloads <= 0 && size <= 1) {
throw new NotFound({
prettyMessage: `${extensionType} not found or too new`,
})
}
}
return this.constructor.render({ interval, downloads })
@@ -127,6 +119,7 @@ function InstallsForExtensionType(extensionType) {
title: `WordPress ${capt} Active Installs`,
namedParams: { slug: exampleSlug },
staticPreview: renderDownloadsBadge({ downloads: 300000 }),
documentation,
},
]

View File

@@ -98,34 +98,6 @@ t.create('Plugin Downloads - Active | Not Found')
message: 'not found',
})
t.create('Plugin Downloads - Day | Not Found')
.get('/plugin/dd/100.json')
.expectBadge({
label: 'downloads',
message: 'plugin not found or too new',
})
t.create('Plugin Downloads - Week | Not Found')
.get('/plugin/dw/100.json')
.expectBadge({
label: 'downloads',
message: 'plugin not found or too new',
})
t.create('Plugin Downloads - Month | Not Found')
.get('/plugin/dm/100.json')
.expectBadge({
label: 'downloads',
message: 'plugin not found or too new',
})
t.create('Plugin Downloads - Year | Not Found')
.get('/plugin/dy/100.json')
.expectBadge({
label: 'downloads',
message: 'plugin not found or too new',
})
t.create('Theme Downloads - Total | Not Found')
.get('/theme/dt/100.json')
.expectBadge({
@@ -139,31 +111,3 @@ t.create('Theme Downloads - Active | Not Found')
label: 'active installs',
message: 'not found',
})
t.create('Theme Downloads - Day | Not Found')
.get('/theme/dd/100.json')
.expectBadge({
label: 'downloads',
message: 'theme not found or too new',
})
t.create('Theme Downloads - Week | Not Found')
.get('/theme/dw/100.json')
.expectBadge({
label: 'downloads',
message: 'theme not found or too new',
})
t.create('Theme Downloads - Month | Not Found')
.get('/theme/dm/100.json')
.expectBadge({
label: 'downloads',
message: 'theme not found or too new',
})
t.create('Theme Downloads - Year | Not Found')
.get('/theme/dy/100.json')
.expectBadge({
label: 'downloads',
message: 'theme not found or too new',
})

View File

@@ -2,7 +2,7 @@ import moment from 'moment'
import { InvalidResponse } from '../index.js'
import { formatDate } from '../text-formatters.js'
import { age as ageColor } from '../color-formatters.js'
import BaseWordpress from './wordpress-base.js'
import { documentation, BaseWordpress } from './wordpress-base.js'
const extensionData = {
plugin: {
@@ -35,6 +35,7 @@ function LastUpdateForType(extensionType) {
title: `WordPress ${capt} Last Updated`,
namedParams: { slug: exampleSlug },
staticPreview: this.render({ lastUpdated: '2020-08-11' }),
documentation,
},
]

View File

@@ -1,7 +1,7 @@
import { NotFound } from '../index.js'
import { addv } from '../text-formatters.js'
import { version as versionColor } from '../color-formatters.js'
import BaseWordpress from './wordpress-base.js'
import { documentation, BaseWordpress } from './wordpress-base.js'
import { versionColorForWordpressVersion } from './wordpress-version-color.js'
const extensionData = {
@@ -33,6 +33,7 @@ function WordpressRequiresVersion(extensionType) {
title: `WordPress ${capt}: Required WP Version`,
namedParams: { slug: exampleSlug },
staticPreview: this.render({ wordpressVersion: '4.8' }),
documentation,
},
]
@@ -77,6 +78,7 @@ class WordpressPluginTestedVersion extends BaseWordpress {
staticPreview: this.renderStaticPreview({
testedVersion: '4.9.8',
}),
documentation,
},
]
@@ -128,6 +130,7 @@ function RequiresPHPVersionForType(extensionType) {
title: `WordPress ${capt} Required PHP Version`,
namedParams: { slug: exampleSlug },
staticPreview: this.render({ version: '5.5' }),
documentation,
},
]

View File

@@ -1,6 +1,6 @@
import { starRating, metric } from '../text-formatters.js'
import { floorCount } from '../color-formatters.js'
import BaseWordpress from './wordpress-base.js'
import { documentation, BaseWordpress } from './wordpress-base.js'
const extensionData = {
plugin: {
@@ -38,6 +38,7 @@ function RatingForExtensionType(extensionType) {
rating: 80,
numRatings: 100,
}),
documentation,
},
]
@@ -78,7 +79,7 @@ function StarsForExtensionType(extensionType) {
staticPreview: this.render({
rating: 80,
}),
documentation: 'There is an alias <code>/r/:slug.svg</code> as well.',
documentation,
},
]

View File

@@ -1,6 +1,6 @@
import { addv } from '../text-formatters.js'
import { version as versionColor } from '../color-formatters.js'
import BaseWordpress from './wordpress-base.js'
import { documentation, BaseWordpress } from './wordpress-base.js'
function VersionForExtensionType(extensionType) {
const { capt, exampleSlug } = {
@@ -29,6 +29,7 @@ function VersionForExtensionType(extensionType) {
title: `WordPress ${capt} Version`,
namedParams: { slug: exampleSlug },
staticPreview: this.render({ version: 2.5 }),
documentation,
},
]

View File

@@ -5,7 +5,7 @@ import { nonNegativeInteger } from '../validators.js'
const documentation = `
<p>By using the YouTube badges provided by Shields.io, you are agreeing to be bound by the YouTube Terms of Service. These can be found here:
<code>https://www.youtube.com/t/terms</code></p>`
<a target="_blank" href="https://www.youtube.com/t/terms">https://www.youtube.com/t/terms</a></p>`
const schema = Joi.object({
pageInfo: Joi.object({