From d066e55a5d42c40f34c31ef55d8eac1fdd3179c8 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 9 Aug 2021 15:53:44 +0200 Subject: [PATCH 001/164] fix: improve text in config (#114) alter text to avoid using double 'and' --- templates/repository/common/.github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 6c091c8..8811046 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -5,7 +5,7 @@ contact_links: about: Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: Hang out with other Ory community members and ask and answer questions. + about: Hang out with other Ory community members to ask and answer questions. - name: Ory Support for Business url: https://github.com/ory/open-source-support/blob/master/README.md about: Buy professional support for Ory $PROJECT. From 7f8a3988a0233d92f657afa65fcba96eae8a79e3 Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 24 Aug 2021 11:16:46 +0200 Subject: [PATCH 002/164] docs: add adopter (#115) --- static/adopters/padis.svg | 9 +++++++++ templates/repository/common/ADOPTERS.md | 6 ++++++ 2 files changed, 15 insertions(+) create mode 100644 static/adopters/padis.svg diff --git a/static/adopters/padis.svg b/static/adopters/padis.svg new file mode 100644 index 0000000..062c640 --- /dev/null +++ b/static/adopters/padis.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index dbc903c..da9d876 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -109,6 +109,12 @@ that your company deserves a spot here, reach out to Zero Project Zero by Commit getzero.dev + + + Adopter * + Padis + Padis + padis.io Sponsor From ed8a36281e6aeb1680630c97a66b691d04ed7457 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 30 Aug 2021 14:35:47 +0200 Subject: [PATCH 003/164] fix: missing link (#116) --- templates/repository/common/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 9869d4c..c57b0b2 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -102,7 +102,7 @@ a few things you can do to help out: - **Reviewing documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info - on contributing to documentation here. + on contributing to documentation [here](#documentation). - **Help with tests.** Some pull requests may lack proper tests or test plans. These are needed for the change to be implemented safely. From e424c0a0a2dd85c585c0be32e8ada257c3fe8021 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 20 Sep 2021 12:48:01 +0200 Subject: [PATCH 004/164] feat: refactor stale action --- .../common/.github/workflows/stale.yml | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index 3017170..9bf76f7 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -13,13 +13,21 @@ jobs: with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: | - Thank you for opening this issue. It appears that the request for more information (e.g. providing the software version, providing logs, ...) has not yet been completed. Therefore this issue will be automatically - closed in 7 days, assuming that the issue has been resolved. - stale-pr-message: | - Thank you for opening this pull request. It appears that a request for e.g. information has not yet been completed. Therefore this issue will be automatically - closed in 7 days, assuming that the proposed change is no longer required or has otherwise been resolved. + I am marking this issue as stale as it has not received any engagement from the community or maintainers in over half a year. That does not imply that the issue has no merit! If you feel strongly about this issue + + - open a PR referencing and resolving the issue; + - leave a comment on it and discuss ideas how you could contribute towards resolving it; + - open a new issue with updated details and a plan on resolving the issue. + + We are cleaning up issues every now and then, primarily to keep the 4000+ issues in our backlog in check and to [prevent](https://www.jeffgeerling.com/blog/2020/saying-no-burnout-open-source-maintainer) [maintainer](https://www.jeffgeerling.com/blog/2016/why-i-close-prs-oss-project-maintainer-notes) [burnout](https://docs.brew.sh/Maintainers-Avoiding-Burnout). Burnout in open source maintainership is a [widespread](https://opensource.guide/best-practices/#its-okay-to-hit-pause) and serious issue. It can lead to severe personal and health issues as well as [enabling catastrophic](https://haacked.com/archive/2019/05/28/maintainer-burnout/) [attack vectors](https://www.gradiant.org/en/blog/open-source-maintainer-burnout-as-an-attack-surface/). + + Thank you for your understanding and to anyone who participated in the issue! 🙏✌️ + + If you feel strongly about this issues and have ideas on resolving it, please comment. Otherwise it will be closed in 30 days! stale-issue-label: 'stale' - stale-pr-label: 'stale' - only-labels: 'needs more info' - days-before-stale: 7 - days-before-close: 7 + exempt-issue-labels: 'bug,blocking,docs' + days-before-stale: 180 + days-before-close: 30 + exempt-milestones: true + exempt-assignees: true + only-pr-labels: 'stale' From f62edfea9c162e724a286224e34d84cc3bef6807 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 20 Sep 2021 13:15:25 +0200 Subject: [PATCH 005/164] feat: todo should only listen to @todo --- templates/repository/common/.github/config.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 templates/repository/common/.github/config.yml diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml new file mode 100644 index 0000000..3a2be72 --- /dev/null +++ b/templates/repository/common/.github/config.yml @@ -0,0 +1,2 @@ +todo: + keyword: "@todo" From ec210015daa04f26c81a639228ace6f6e8abaf11 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 20 Sep 2021 13:26:47 +0200 Subject: [PATCH 006/164] fix: use correct label --- templates/repository/common/.github/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml index 3a2be72..b39894f 100644 --- a/templates/repository/common/.github/config.yml +++ b/templates/repository/common/.github/config.yml @@ -1,2 +1,3 @@ todo: keyword: "@todo" + label: todo \ No newline at end of file From 455ef8896cd7ddfa08f4c2b8325c528bcdb65762 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 21 Sep 2021 07:08:43 +0200 Subject: [PATCH 007/164] fix: upgrade stale version to respect milestones and assignees an dupdate message --- .../common/.github/workflows/stale.yml | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index 9bf76f7..7463e4e 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -9,24 +9,35 @@ jobs: if: github.repository_owner == 'ory' runs-on: ubuntu-latest steps: - - uses: actions/stale@v3 + - uses: actions/stale@v4 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: | - I am marking this issue as stale as it has not received any engagement from the community or maintainers in over half a year. That does not imply that the issue has no merit! If you feel strongly about this issue + Hello contributors! + + I am marking this issue as stale as it has not received any engagement from the community or maintainers a year. That does not imply that the issue has no merit! If you feel strongly about this issue - open a PR referencing and resolving the issue; - leave a comment on it and discuss ideas how you could contribute towards resolving it; + - leave a comment and describe in detail why this issue is critical for your use case; - open a new issue with updated details and a plan on resolving the issue. - We are cleaning up issues every now and then, primarily to keep the 4000+ issues in our backlog in check and to [prevent](https://www.jeffgeerling.com/blog/2020/saying-no-burnout-open-source-maintainer) [maintainer](https://www.jeffgeerling.com/blog/2016/why-i-close-prs-oss-project-maintainer-notes) [burnout](https://docs.brew.sh/Maintainers-Avoiding-Burnout). Burnout in open source maintainership is a [widespread](https://opensource.guide/best-practices/#its-okay-to-hit-pause) and serious issue. It can lead to severe personal and health issues as well as [enabling catastrophic](https://haacked.com/archive/2019/05/28/maintainer-burnout/) [attack vectors](https://www.gradiant.org/en/blog/open-source-maintainer-burnout-as-an-attack-surface/). + Throughout its lifetime, Ory has received over 10.000 issues and PRs. To sustain that growth, we need to prioritize and focus on issues that are important to the community. A good indication of importance, and thus priority, is activity on a topic. + + Unfortunately, [burnout](https://www.jeffgeerling.com/blog/2016/why-i-close-prs-oss-project-maintainer-notes) has become a [topic](https://opensource.guide/best-practices/#its-okay-to-hit-pause) of [concern](https://docs.brew.sh/Maintainers-Avoiding-Burnout) amongst open-source projects. + + It can lead to severe personal and health issues as well as [opening](https://haacked.com/archive/2019/05/28/maintainer-burnout/) catastrophic [attack vectors](https://www.gradiant.org/en/blog/open-source-maintainer-burnout-as-an-attack-surface/). + + The motivation for this automation is to help prioritize issues in the backlog and not ignore, reject, or belittle anyone. + + If this issue was marked as stale erroneous you can exempt it by adding the `backlog` label, assigning someone, or setting a milestone for it. - Thank you for your understanding and to anyone who participated in the issue! 🙏✌️ + Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you! - If you feel strongly about this issues and have ideas on resolving it, please comment. Otherwise it will be closed in 30 days! + Thank you 🙏✌️ stale-issue-label: 'stale' - exempt-issue-labels: 'bug,blocking,docs' - days-before-stale: 180 + exempt-issue-labels: 'bug,blocking,docs,backlog' + days-before-stale: 365 days-before-close: 30 exempt-milestones: true exempt-assignees: true From eab2dee1a96773379f2bc04ad053e1625b7ddc78 Mon Sep 17 00:00:00 2001 From: vinckr Date: Thu, 14 Oct 2021 13:50:44 +0200 Subject: [PATCH 008/164] fix: remove thoughtworks sponsor --- templates/repository/common/ADOPTERS.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index da9d876..3b2c12a 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -38,12 +38,6 @@ that your company deserves a spot here, reach out to Kyma Project kyma-project.io - - Sponsor - ThoughtWorks - ThoughtWorks - thoughtworks.com - Sponsor Tulip From 8ac84b7fb421cf330a4458897d7a6266de39ef08 Mon Sep 17 00:00:00 2001 From: vinckr Date: Thu, 14 Oct 2021 13:54:17 +0200 Subject: [PATCH 009/164] fix: remove 3rein sponsor --- templates/repository/common/ADOPTERS.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 3b2c12a..094a590 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -50,12 +50,6 @@ that your company deserves a spot here, reach out to All My Funds cashdeck.com.au - - Sponsor - 3Rein - 3Rein - 3rein.com - Contributor Hootsuite From f0344cdfd0b29c622c902e15286e14f850488dc5 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Fri, 15 Oct 2021 08:36:10 +0200 Subject: [PATCH 010/164] fix: sync files to all SDK repos --- .github/workflows/sync.yml | 183 +++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 5947305..6316f71 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -170,3 +170,186 @@ jobs: run: ./scripts/sync-server.sh ory-corp/cloud master "Ory SaaS" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-dotnet + run: ./scripts/sync-library.sh ory/keto-client-dotnet master "Ory Keto Dotnet Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-java + run: ./scripts/sync-library.sh ory/keto-client-java master "Ory Keto Java Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-rust + run: ./scripts/sync-library.sh ory/keto-client-rust master "Ory Keto Rust Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-dart + run: ./scripts/sync-library.sh ory/keto-client-dart master "Ory Keto Dart Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-js + run: ./scripts/sync-library.sh ory/keto-client-js master "Ory Keto JavaScript Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-php + run: ./scripts/sync-library.sh ory/keto-client-php master "Ory Keto PHP Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-go + run: ./scripts/sync-library.sh ory/keto-client-go master "Ory Keto Go Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-ruby + run: ./scripts/sync-library.sh ory/keto-client-ruby master "Ory Keto Ruby Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize keto-client-python + run: ./scripts/sync-library.sh ory/keto-client-python master "Ory Keto Python Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + + - name: Synchronize kratos-client-dotnet + run: ./scripts/sync-library.sh ory/kratos-client-dotnet master "Ory Kratos Dotnet Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-java + run: ./scripts/sync-library.sh ory/kratos-client-java master "Ory Kratos Java Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-rust + run: ./scripts/sync-library.sh ory/kratos-client-rust master "Ory Kratos Rust Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-dart + run: ./scripts/sync-library.sh ory/kratos-client-dart master "Ory Kratos Dart Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-js + run: ./scripts/sync-library.sh ory/kratos-client-js master "Ory Kratos JavaScript Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-php + run: ./scripts/sync-library.sh ory/kratos-client-php master "Ory Kratos PHP Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-go + run: ./scripts/sync-library.sh ory/kratos-client-go master "Ory Kratos Go Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-ruby + run: ./scripts/sync-library.sh ory/kratos-client-ruby master "Ory Kratos Ruby Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize kratos-client-python + run: ./scripts/sync-library.sh ory/kratos-client-python master "Ory Kratos Python Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + + - name: Synchronize hydra-client-dotnet + run: ./scripts/sync-library.sh ory/hydra-client-dotnet master "Ory Hydra Dotnet Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-java + run: ./scripts/sync-library.sh ory/hydra-client-java master "Ory Hydra Java Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-rust + run: ./scripts/sync-library.sh ory/hydra-client-rust master "Ory Hydra Rust Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-dart + run: ./scripts/sync-library.sh ory/hydra-client-dart master "Ory Hydra Dart Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-js + run: ./scripts/sync-library.sh ory/hydra-client-js master "Ory Hydra JavaScript Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-php + run: ./scripts/sync-library.sh ory/hydra-client-php master "Ory Hydra PHP Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-go + run: ./scripts/sync-library.sh ory/hydra-client-go master "Ory Hydra Go Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-ruby + run: ./scripts/sync-library.sh ory/hydra-client-ruby master "Ory Hydra Ruby Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize hydra-client-python + run: ./scripts/sync-library.sh ory/hydra-client-python master "Ory Hydra Python Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + + - name: Synchronize oathkeeper-client-dotnet + run: ./scripts/sync-library.sh ory/oathkeeper-client-dotnet master "Ory Oathkeeper Dotnet Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-java + run: ./scripts/sync-library.sh ory/oathkeeper-client-java master "Ory Oathkeeper Java Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-rust + run: ./scripts/sync-library.sh ory/oathkeeper-client-rust master "Ory Oathkeeper Rust Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-dart + run: ./scripts/sync-library.sh ory/oathkeeper-client-dart master "Ory Oathkeeper Dart Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-js + run: ./scripts/sync-library.sh ory/oathkeeper-client-js master "Ory Oathkeeper JavaScript Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-php + run: ./scripts/sync-library.sh ory/oathkeeper-client-php master "Ory Oathkeeper PHP Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-go + run: ./scripts/sync-library.sh ory/oathkeeper-client-go master "Ory Oathkeeper Go Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-ruby + run: ./scripts/sync-library.sh ory/oathkeeper-client-ruby master "Ory Oathkeeper Ruby Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + + - name: Synchronize oathkeeper-client-python + run: ./scripts/sync-library.sh ory/oathkeeper-client-python master "Ory Oathkeeper Python Client" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} From f413570526ef9d1a0592df89bd5f6521a5c09030 Mon Sep 17 00:00:00 2001 From: HeroCC Date: Mon, 25 Oct 2021 09:40:02 -0400 Subject: [PATCH 011/164] fix: limit OpenCollective contributor image size (#124) --- templates/repository/common/ADOPTERS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 094a590..53e78d6 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -80,7 +80,7 @@ that your company deserves a spot here, reach out to Sainsbury's sainsburys.co.uk - + Adopter * Contraste Contraste @@ -127,7 +127,7 @@ that your company deserves a spot here, reach out to We also want to thank all individual contributors - + as well as all of our backers From 6989295f43aa448ef3131766fd13eaaac2905f1d Mon Sep 17 00:00:00 2001 From: Divyansh Bansal Date: Mon, 25 Oct 2021 19:10:22 +0530 Subject: [PATCH 012/164] docs: grammatical errors (#121) --- templates/repository/common/PROJECTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repository/common/PROJECTS.md b/templates/repository/common/PROJECTS.md index 4d4e30c..4c9c9b1 100644 --- a/templates/repository/common/PROJECTS.md +++ b/templates/repository/common/PROJECTS.md @@ -8,7 +8,7 @@ design: - Scales without effort - Minimize room for human and network errors -Ory's architecture designed to run best on a Container Orchestration Systems +Ory's architecture is designed to run best on a Container Orchestration system such as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) and operating systems (FreeBSD, Linux, macOS, Windows) without system @@ -21,7 +21,7 @@ Management system that is built according to [cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). It implements core use cases that almost every software application needs to deal with: Self-service Login and Registration, Multi-Factor Authentication -(MFA/2FA), Account Recovery and Verification, Profile and Account Management. +(MFA/2FA), Account Recovery and Verification, Profile, and Account Management. ### Ory Hydra: OAuth2 & OpenID Connect Server From e0b84c59b2cbd36332623dbf301ff8ee9a815819 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Mon, 25 Oct 2021 23:25:02 +0200 Subject: [PATCH 013/164] fix: just push to master --- scripts/sync.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index abe5643..b72e9c3 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -84,13 +84,13 @@ EOF git add -A; \ git status; \ ( \ - git commit -a -m "chore: update repository templates" && \ - git push --set-upstream origin "$pushBranch" && \ - curl \ - -X POST \ - -H "Authorization: token $GITHUB_TOKEN" \ - -H "Accept: application/vnd.github.v3+json" \ - https://api.github.com/repos/$project/pulls \ - -d '{"title":"chore: update repository template to '$hash'","body":"Updated repository templates to https://github.com/ory/meta/commit/'$GITHUB_SHA'.","head":"'$pushBranch'","base":"'$branch'"}' \ + git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "Updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ + git push --set-upstream origin "origin" \ # && \ + # curl \ + # -X POST \ + # -H "Authorization: token $GITHUB_TOKEN" \ + # -H "Accept: application/vnd.github.v3+json" \ + # https://api.github.com/repos/$project/pulls \ + # -d '{"title":"chore: update repository template to '$hash'","body":"Updated repository templates to https://github.com/ory/meta/commit/'$GITHUB_SHA'.","head":"'$pushBranch'","base":"'$branch'"}' \ ) || true) } From 2e85f8ce4744a620c001e3ced52a4ad683ad5d03 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Tue, 26 Oct 2021 07:46:59 +0200 Subject: [PATCH 014/164] fix: broken sync script --- scripts/sync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index b72e9c3..8ffc3ad 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -85,12 +85,12 @@ EOF git status; \ ( \ git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "Updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ - git push --set-upstream origin "origin" \ # && \ + git push --set-upstream origin "origin") || true) # && \ # curl \ # -X POST \ # -H "Authorization: token $GITHUB_TOKEN" \ # -H "Accept: application/vnd.github.v3+json" \ # https://api.github.com/repos/$project/pulls \ # -d '{"title":"chore: update repository template to '$hash'","body":"Updated repository templates to https://github.com/ory/meta/commit/'$GITHUB_SHA'.","head":"'$pushBranch'","base":"'$branch'"}' \ - ) || true) + # ) || true) } From e85c4389aeebd667f8275849de4fb9bd211c14bc Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:05:50 +0200 Subject: [PATCH 015/164] fix: add yml to formatting files --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2c86542..39b1e69 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "prettier": "ory-prettier-styles", "config": { - "prettierTarget": "**/*.{js,ts,md,mdx}" + "prettierTarget": "**/*.{js,ts,md,mdx,yml}" }, "scripts": { "format": "prettier --write ${npm_package_config_prettierTarget}", From 74035cec547891aca78cae05a148e29d0b5ed89d Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:06:03 +0200 Subject: [PATCH 016/164] fix: auto-assign dupe key --- templates/repository/common/.github/auto_assign.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/templates/repository/common/.github/auto_assign.yml b/templates/repository/common/.github/auto_assign.yml index 368fccb..d100205 100644 --- a/templates/repository/common/.github/auto_assign.yml +++ b/templates/repository/common/.github/auto_assign.yml @@ -11,5 +11,3 @@ assignees: # A number of reviewers added to the pull request # Set 0 to add all the reviewers (default: 0) numberOfReviewers: 0 - -addAssignees: author From f9219eaaadf3905bd9185f5c3b03a50746852966 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:06:42 +0200 Subject: [PATCH 017/164] feat: new issue templates --- .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 113 +++++++++++++++++ .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 116 ++++++++++++++++++ .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 77 ++++++++++++ .../common/.github/ISSUE_TEMPLATE/config.yml | 10 +- .../library/.github/pull_request_template.md | 16 ++- .../.github/ISSUE_TEMPLATE/bug_report.md | 51 -------- .../server/.github/pull_request_template.md | 14 ++- 7 files changed, 332 insertions(+), 65 deletions(-) create mode 100644 templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml create mode 100644 templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml create mode 100644 templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml delete mode 100644 templates/repository/server/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml new file mode 100644 index 0000000..8f5222e --- /dev/null +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -0,0 +1,113 @@ +description: 'Create a bug report' +labels: + - bug +name: 'Bug Report' +body: + - attributes: + value: "Thank you for taking the time to fill out this bug report!\n" + type: markdown + - attributes: + label: 'Preflight checklist' + options: + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' + required: true + - label: + "I agree to follow this project's [Code of + Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." + required: true + - label: + "I have read and am following this repository's [Contribution + Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." + required: true + - label: + 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + id: checklist + type: checkboxes + - attributes: + description: 'A clear and concise description of what the bug is.' + label: 'Describe the bug' + placeholder: 'Tell us what you see!' + id: describe-bug + type: textarea + validations: + required: true + - attributes: + description: | + Clear, formatted, and easy to follow steps to reproduce the behavior: + placeholder: | + Steps to reproduce the behavior: + + 1. Run `docker run ....` + 2. Make API Request to with `curl ...` + 3. Request fails with response: `{"some": "error"}` + label: 'Reproducing the bug' + id: reproduce-bug + type: textarea + validations: + required: true + - attributes: + description: + 'Please copy and paste any relevant log output. This will be + automatically formatted into code, so no need for backticks. Please + redact any sensitive information' + label: 'Relevant log output' + render: shell + placeholder: | + log=error .... + id: logs + type: textarea + - attributes: + description: + 'Please copy and paste any relevant configuration. This will be + automatically formatted into code, so no need for backticks. Please + redact any sensitive information!' + label: 'Relevant configuration' + render: yml + placeholder: | + server: + admin: + port: 1234 + id: config + type: textarea + - attributes: + description: 'What version of our software are you running?' + label: Version + id: version + type: input + validations: + required: true + - attributes: + label: 'On which operating system are you observing this issue?' + options: + - Ory Cloud + - macOS + - Linux + - Windows + - FreeBSD + - Other + id: operating-system + type: dropdown + - attributes: + label: 'In which environment are you deploying?' + options: + - Ory Cloud + - Docker + - 'Docker Compose' + - 'Kubernetes with Helm' + - Kubernetes + - Binary + - Other + id: deployment + type: dropdown + - attributes: + description: 'Add any other context about the problem here.' + label: Additional Context + id: additional + type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml new file mode 100644 index 0000000..309d1d7 --- /dev/null +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -0,0 +1,116 @@ +description: + 'A design document is needed for non-trivial changes to the code base.' +labels: + - rfc +name: 'Design Document' +body: + - attributes: + value: | + Thank you for writing this design document. + + One of the key elements of Ory's software engineering culture is the use of defining software designs through design docs. These are relatively informal documents that the primary author or authors of a software system or application create before they embark on the coding project. The design doc documents the high level implementation strategy and key design decisions with emphasis on the trade-offs that were considered during those decisions. + + Ory is leaning heavily on [Google's design docs process](https://www.industrialempathy.com/posts/design-docs-at-google/) + and [Golang Proposals](https://github.com/golang/proposal). + + Writing a design doc prior to contributing your change ensures that your ideas are checked with + the community and maintainers. It will save you a lot of time developing things which might need changed + after code reviews, and your pull requests will be merged faster. + type: markdown + - attributes: + label: 'Preflight checklist' + options: + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' + required: true + - label: + "I agree to follow this project's [Code of + Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." + required: true + - label: + "I have read and am following this repository's [Contribution + Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." + required: true + - label: + 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + id: checklist + type: checkboxes + - attributes: + description: | + This section gives the reader a very rough overview of the landscape in which the new system is being built and what is actually being built. This isn’t a requirements doc. Keep it succinct! The goal is that readers are brought up to speed but some previous knowledge can be assumed and detailed info can be linked to. This section should be entirely focused on objective background facts. + label: 'Context and scope' + id: scope + type: textarea + validations: + required: true + + - attributes: + description: | + A short list of bullet points of what the goals of the system are, and, sometimes more importantly, what non-goals are. Note, that non-goals aren’t negated goals like “The system shouldn’t crash”, but rather things that could reasonably be goals, but are explicitly chosen not to be goals. A good example would be “ACID compliance”; when designing a database, you’d certainly want to know whether that is a goal or non-goal. And if it is a non-goal you might still select a solution that provides it, if it doesn’t introduce trade-offs that prevent achieving the goals. + label: 'Goals and non-goals' + id: goals + type: textarea + validations: + required: true + + - attributes: + description: | + This section should start with an overview and then go into details. + The design doc is the place to write down the trade-offs you made in designing your software. Focus on those trade-offs to produce a useful document with long-term value. That is, given the context (facts), goals and non-goals (requirements), the design doc is the place to suggest solutions and show why a particular solution best satisfies those goals. + + The point of writing a document over a more formal medium is to provide the flexibility to express the problem set at hand in an appropriate manner. Because of this, there is no explicit guidance for how to actually describe the design. + label: 'The design' + id: design + type: textarea + validations: + required: true + + - attributes: + description: | + If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead focus on the parts that are relevant to the design and its trade-offs. + label: 'APIs' + id: apis + type: textarea + + - attributes: + description: | + Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead focus on the parts that are relevant to the design and its trade-offs. + label: 'Data storage' + id: persistence + type: textarea + + - attributes: + description: | + Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the implementability of the design. + label: 'Code and pseudo-code' + id: pseudocode + type: textarea + + - attributes: + description: | + One of the primary factors that would influence the shape of a software design and hence the design doc, is the degree of constraint of the solution space. + + On one end of the extreme is the “greenfield software project”, where all we know are the goals, and the solution can be whatever makes the most sense. Such a document may be wide-ranging, but it also needs to quickly define a set of rules that allow zooming in on a manageable set of solutions. + + On the other end are systems where the possible solutions are very well defined, but it isn’t at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn’t designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. + + In this situation you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are really great, and hence such a document should focus on selecting the best way given all identified trade-offs. + label: 'Degree of constraint' + id: constrait + type: textarea + + - attributes: + description: | + This section lists alternative designs that would have reasonably achieved similar outcomes. The focus should be on the trade-offs that each respective design makes and how those trade-offs led to the decision to select the design that is the primary topic of the document. + + While it is fine to be succinct about solution that ended up not being selected, this section is one of the most important ones as it shows very explicitly why the selected solution is the best given the project goals and how other solutions, that the reader may be wondering about, introduce trade-offs that are less desirable given the goals. + + label: Alternatives considered + id: alternatives + type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml new file mode 100644 index 0000000..e173ba2 --- /dev/null +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -0,0 +1,77 @@ +description: + 'Suggest an idea for this project without a plan for implementation' +labels: + - feat +name: 'Feature Request' +body: + - attributes: + value: | + Thank you for suggesting an idea for this project! + + If you already have a plan to implement a feature or a change, please create a [design document](https://github.com/aeneasr/gh-template-test/issues/new?assignees=&labels=rfc&template=DESIGN-DOC.yml) instead if the change is non-trivial! + type: markdown + - attributes: + label: 'Preflight checklist' + options: + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' + required: true + - label: + "I agree to follow this project's [Code of + Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." + required: true + - label: + "I have read and am following this repository's [Contribution + Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." + required: true + - label: + 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + id: checklist + type: checkboxes + - attributes: + description: + 'Is your feature request related to a problem? Please describe.' + label: 'Describe your problem' + placeholder: + "A clear and concise description of what the problem is. Ex. I'm always + frustrated when [...]" + id: problem + type: textarea + validations: + required: true + - attributes: + description: | + Describe the solution you'd like + placeholder: | + A clear and concise description of what you want to happen. + label: 'Describe your ideal solution' + id: solution + type: textarea + validations: + required: true + - attributes: + description: "Describe alternatives you've considered" + label: 'Workarounds or alternatives' + id: alternatives + type: textarea + validations: + required: true + - attributes: + description: 'What version of our software are you running?' + label: Version + id: version + type: input + validations: + required: true + - attributes: + description: + 'Add any other context or screenshots about the feature request here.' + label: Additional Context + id: additional + type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 8811046..f667f60 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -2,10 +2,10 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum url: https://github.com/$REPOSITORY/discussions - about: Please ask and answer questions here, show your implementations and discuss ideas. + about: + Please ask and answer questions here, show your implementations and + discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: Hang out with other Ory community members to ask and answer questions. - - name: Ory Support for Business - url: https://github.com/ory/open-source-support/blob/master/README.md - about: Buy professional support for Ory $PROJECT. + about: + Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index b84b602..1f692e1 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -10,14 +10,18 @@ behavior please do baz. ``` --> -## Related issue(s) +## Related Issue or Design Document - -_Server logs_ - - - -_Server configuration_ - - - -**Expected behavior** - -A clear and concise description of what you expected to happen. - -**Environment** - -- Version: v1.2.3, git sha hash -- Environment: Debian, Docker, ... - -**Additional context** - -Add any other context about the problem here. diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index b0a20dc..2d4ff45 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -13,11 +13,15 @@ behavior please do baz. ## Related issue(s) - [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md). +- [ ] I have referenced an issue containing the design document if my change + introduces a new feature. - [ ] I am following the [contributing code guidelines](../blob/master/CONTRIBUTING.md#contributing-code). - [ ] I have read the [security policy](../security/policy). From 8a8bd243b4d92edc62121ef38f6086fd0408b43c Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:06:52 +0200 Subject: [PATCH 018/164] chore: format --- .github/workflows/stale.yml | 4 +- .github/workflows/sync.yml | 41 ++++++++++++------- .../.github/workflows/release_tagger.yml | 2 +- .../repository/common/.github/config.yml | 4 +- .../common/.github/workflows/stale.yml | 4 +- .../server/.github/workflows/milestone.yml | 6 +-- text-run.yml | 3 +- 7 files changed, 37 insertions(+), 27 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 117f846..f8657ac 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: "Close Stale Issues" +name: 'Close Stale Issues' on: workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: stale: diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 6316f71..0c5d783 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -20,10 +20,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 - # installs moreutils on the Action worker node to use the sponge function + # installs moreutils on the Action worker node to use the sponge function - name: Install sponge run: sudo apt-get update -y && sudo apt-get install -y moreutils - # Ssh-agent action to get a ssh key with privileges to repos outside of /meta in this case the repositories you want to sync. + # Ssh-agent action to get a ssh key with privileges to repos outside of /meta in this case the repositories you want to sync. - uses: webfactory/ssh-agent@v0.4.1 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} @@ -42,11 +42,11 @@ jobs: run: ./scripts/sync-server.sh ory/oathkeeper master Oathkeeper env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize server + # Synchronize server - name: Synchronize Ory Kratos - # runs the sync-server bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName + # runs the sync-server bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName run: ./scripts/sync-server.sh ory/kratos master Kratos - # sets the required github token as enviromental variable + # sets the required github token as enviromental variable env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} @@ -61,9 +61,9 @@ jobs: ./scripts/sync-library.sh ory/cli master CLI env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize library + # Synchronize library - name: Synchronize Ory Kratos SelfService UI Node Example - # runs the sync-library bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName + # runs the sync-library bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName run: | ./scripts/sync-library.sh ory/kratos-selfservice-ui-node master "Kratos SelfService UI Node Example" env: @@ -114,30 +114,38 @@ jobs: run: ./scripts/sync-library.sh ory/web master Web env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize action + # Synchronize action - name: Syncronize Ory Closed Reference Notifier # runs the sync-action bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName - run: ./scripts/sync-action.sh ory/closed-reference-notifier master "Closed Reference Notifier" + run: + ./scripts/sync-action.sh ory/closed-reference-notifier master "Closed + Reference Notifier" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Syncronize Ory Label Sync Action - run: ./scripts/sync-action.sh ory/label-sync-action master "Label Sync Action" + run: + ./scripts/sync-action.sh ory/label-sync-action master "Label Sync + Action" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Syncronize Ory Milestone Action - run: ./scripts/sync-action.sh ory/milestone-action master "Milestone Action" + run: + ./scripts/sync-action.sh ory/milestone-action master "Milestone + Action" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Syncronize Ory Prettier Styles Action - run: ./scripts/sync-action.sh ory/prettier-styles master "Prettier Styles" + run: + ./scripts/sync-action.sh ory/prettier-styles master "Prettier Styles" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Syncronize Ory Buildbuf Action - run: ./scripts/sync-action.sh ory/build-buf-action main "Buildbuf Action" + run: + ./scripts/sync-action.sh ory/build-buf-action main "Buildbuf Action" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} @@ -147,12 +155,15 @@ jobs: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize Ory Hydra Maester - run: ./scripts/sync-library.sh ory/hydra-maester master "Ory Hydra Maester" + run: + ./scripts/sync-library.sh ory/hydra-maester master "Ory Hydra Maester" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize Ory Oathkeeper Maester - run: ./scripts/sync-library.sh ory/hydra-maester master "Ory Oathkeeper Maester" + run: + ./scripts/sync-library.sh ory/hydra-maester master "Ory Oathkeeper + Maester" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} diff --git a/templates/repository/action/.github/workflows/release_tagger.yml b/templates/repository/action/.github/workflows/release_tagger.yml index 11eb443..f37d4ad 100644 --- a/templates/repository/action/.github/workflows/release_tagger.yml +++ b/templates/repository/action/.github/workflows/release_tagger.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: Actions-R-Us/actions-tagger@latest env: - GITHUB_TOKEN: "${{ github.token }}" + GITHUB_TOKEN: '${{ github.token }}' with: publish_latest_tag: true diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml index b39894f..0d121fe 100644 --- a/templates/repository/common/.github/config.yml +++ b/templates/repository/common/.github/config.yml @@ -1,3 +1,3 @@ todo: - keyword: "@todo" - label: todo \ No newline at end of file + keyword: '@todo' + label: todo diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index 7463e4e..395cb69 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: "Close Stale Issues" +name: 'Close Stale Issues' on: workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: stale: diff --git a/templates/repository/server/.github/workflows/milestone.yml b/templates/repository/server/.github/workflows/milestone.yml index fb47e4a..b4a3069 100644 --- a/templates/repository/server/.github/workflows/milestone.yml +++ b/templates/repository/server/.github/workflows/milestone.yml @@ -3,7 +3,7 @@ name: Generate and Publish Milestone Document on: workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: milestone: @@ -23,8 +23,8 @@ jobs: - name: Commit Milestone Documentation uses: EndBug/add-and-commit@v4.4.0 with: - message: "autogen(docs): update milestone document" + message: 'autogen(docs): update milestone document' author_name: aeneasr - author_email: "3372410+aeneasr@users.noreply.github.com" + author_email: '3372410+aeneasr@users.noreply.github.com' env: GITHUB_TOKEN: ${{ secrets.TOKEN_PRIVILEGED }} diff --git a/text-run.yml b/text-run.yml index 6d23062..f7399ea 100644 --- a/text-run.yml +++ b/text-run.yml @@ -1,8 +1,7 @@ -exclude: +exclude: - ^saved_replies\/.* ignoreLinkTargets: - ^\$.* - ^docs\/.* - ^docs$ - \ No newline at end of file From a7f0b19677f8f198041fe2c7f962a0a67c79e503 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:09:50 +0200 Subject: [PATCH 019/164] chore: format --- .github/workflows/sync.yml | 171 ++++++++++++++++++++++++++----------- 1 file changed, 120 insertions(+), 51 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 0c5d783..3fcd7f6 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -183,184 +183,253 @@ jobs: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-dotnet - run: ./scripts/sync-library.sh ory/keto-client-dotnet master "Ory Keto Dotnet Client" + run: + ./scripts/sync-library.sh ory/keto-client-dotnet master "Ory Keto + Dotnet Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize keto-client-java - run: ./scripts/sync-library.sh ory/keto-client-java master "Ory Keto Java Client" + run: + ./scripts/sync-library.sh ory/keto-client-java master "Ory Keto Java + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize keto-client-rust - run: ./scripts/sync-library.sh ory/keto-client-rust master "Ory Keto Rust Client" + run: + ./scripts/sync-library.sh ory/keto-client-rust master "Ory Keto Rust + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize keto-client-dart - run: ./scripts/sync-library.sh ory/keto-client-dart master "Ory Keto Dart Client" + run: + ./scripts/sync-library.sh ory/keto-client-dart master "Ory Keto Dart + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-js - run: ./scripts/sync-library.sh ory/keto-client-js master "Ory Keto JavaScript Client" + run: + ./scripts/sync-library.sh ory/keto-client-js master "Ory Keto + JavaScript Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-php - run: ./scripts/sync-library.sh ory/keto-client-php master "Ory Keto PHP Client" + run: + ./scripts/sync-library.sh ory/keto-client-php master "Ory Keto PHP + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-go - run: ./scripts/sync-library.sh ory/keto-client-go master "Ory Keto Go Client" + run: + ./scripts/sync-library.sh ory/keto-client-go master "Ory Keto Go + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-ruby - run: ./scripts/sync-library.sh ory/keto-client-ruby master "Ory Keto Ruby Client" + run: + ./scripts/sync-library.sh ory/keto-client-ruby master "Ory Keto Ruby + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize keto-client-python - run: ./scripts/sync-library.sh ory/keto-client-python master "Ory Keto Python Client" + run: + ./scripts/sync-library.sh ory/keto-client-python master "Ory Keto + Python Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize kratos-client-dotnet - run: ./scripts/sync-library.sh ory/kratos-client-dotnet master "Ory Kratos Dotnet Client" + run: + ./scripts/sync-library.sh ory/kratos-client-dotnet master "Ory Kratos + Dotnet Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize kratos-client-java - run: ./scripts/sync-library.sh ory/kratos-client-java master "Ory Kratos Java Client" + run: + ./scripts/sync-library.sh ory/kratos-client-java master "Ory Kratos + Java Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize kratos-client-rust - run: ./scripts/sync-library.sh ory/kratos-client-rust master "Ory Kratos Rust Client" + run: + ./scripts/sync-library.sh ory/kratos-client-rust master "Ory Kratos + Rust Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize kratos-client-dart - run: ./scripts/sync-library.sh ory/kratos-client-dart master "Ory Kratos Dart Client" + run: + ./scripts/sync-library.sh ory/kratos-client-dart master "Ory Kratos + Dart Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize kratos-client-js - run: ./scripts/sync-library.sh ory/kratos-client-js master "Ory Kratos JavaScript Client" + run: + ./scripts/sync-library.sh ory/kratos-client-js master "Ory Kratos + JavaScript Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize kratos-client-php - run: ./scripts/sync-library.sh ory/kratos-client-php master "Ory Kratos PHP Client" + run: + ./scripts/sync-library.sh ory/kratos-client-php master "Ory Kratos PHP + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize kratos-client-go - run: ./scripts/sync-library.sh ory/kratos-client-go master "Ory Kratos Go Client" + run: + ./scripts/sync-library.sh ory/kratos-client-go master "Ory Kratos Go + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize kratos-client-ruby - run: ./scripts/sync-library.sh ory/kratos-client-ruby master "Ory Kratos Ruby Client" + run: + ./scripts/sync-library.sh ory/kratos-client-ruby master "Ory Kratos + Ruby Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize kratos-client-python - run: ./scripts/sync-library.sh ory/kratos-client-python master "Ory Kratos Python Client" + run: + ./scripts/sync-library.sh ory/kratos-client-python master "Ory Kratos + Python Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize hydra-client-dotnet - run: ./scripts/sync-library.sh ory/hydra-client-dotnet master "Ory Hydra Dotnet Client" + run: + ./scripts/sync-library.sh ory/hydra-client-dotnet master "Ory Hydra + Dotnet Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize hydra-client-java - run: ./scripts/sync-library.sh ory/hydra-client-java master "Ory Hydra Java Client" + run: + ./scripts/sync-library.sh ory/hydra-client-java master "Ory Hydra Java + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize hydra-client-rust - run: ./scripts/sync-library.sh ory/hydra-client-rust master "Ory Hydra Rust Client" + run: + ./scripts/sync-library.sh ory/hydra-client-rust master "Ory Hydra Rust + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize hydra-client-dart - run: ./scripts/sync-library.sh ory/hydra-client-dart master "Ory Hydra Dart Client" + run: + ./scripts/sync-library.sh ory/hydra-client-dart master "Ory Hydra Dart + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize hydra-client-js - run: ./scripts/sync-library.sh ory/hydra-client-js master "Ory Hydra JavaScript Client" + run: + ./scripts/sync-library.sh ory/hydra-client-js master "Ory Hydra + JavaScript Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize hydra-client-php - run: ./scripts/sync-library.sh ory/hydra-client-php master "Ory Hydra PHP Client" + run: + ./scripts/sync-library.sh ory/hydra-client-php master "Ory Hydra PHP + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize hydra-client-go - run: ./scripts/sync-library.sh ory/hydra-client-go master "Ory Hydra Go Client" + run: + ./scripts/sync-library.sh ory/hydra-client-go master "Ory Hydra Go + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize hydra-client-ruby - run: ./scripts/sync-library.sh ory/hydra-client-ruby master "Ory Hydra Ruby Client" + run: + ./scripts/sync-library.sh ory/hydra-client-ruby master "Ory Hydra Ruby + Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize hydra-client-python - run: ./scripts/sync-library.sh ory/hydra-client-python master "Ory Hydra Python Client" + run: + ./scripts/sync-library.sh ory/hydra-client-python master "Ory Hydra + Python Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize oathkeeper-client-dotnet - run: ./scripts/sync-library.sh ory/oathkeeper-client-dotnet master "Ory Oathkeeper Dotnet Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-dotnet master "Ory + Oathkeeper Dotnet Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize oathkeeper-client-java - run: ./scripts/sync-library.sh ory/oathkeeper-client-java master "Ory Oathkeeper Java Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-java master "Ory + Oathkeeper Java Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize oathkeeper-client-rust - run: ./scripts/sync-library.sh ory/oathkeeper-client-rust master "Ory Oathkeeper Rust Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-rust master "Ory + Oathkeeper Rust Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - + - name: Synchronize oathkeeper-client-dart - run: ./scripts/sync-library.sh ory/oathkeeper-client-dart master "Ory Oathkeeper Dart Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-dart master "Ory + Oathkeeper Dart Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize oathkeeper-client-js - run: ./scripts/sync-library.sh ory/oathkeeper-client-js master "Ory Oathkeeper JavaScript Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-js master "Ory + Oathkeeper JavaScript Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize oathkeeper-client-php - run: ./scripts/sync-library.sh ory/oathkeeper-client-php master "Ory Oathkeeper PHP Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-php master "Ory + Oathkeeper PHP Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize oathkeeper-client-go - run: ./scripts/sync-library.sh ory/oathkeeper-client-go master "Ory Oathkeeper Go Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-go master "Ory + Oathkeeper Go Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize oathkeeper-client-ruby - run: ./scripts/sync-library.sh ory/oathkeeper-client-ruby master "Ory Oathkeeper Ruby Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-ruby master "Ory + Oathkeeper Ruby Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - name: Synchronize oathkeeper-client-python - run: ./scripts/sync-library.sh ory/oathkeeper-client-python master "Ory Oathkeeper Python Client" + run: + ./scripts/sync-library.sh ory/oathkeeper-client-python master "Ory + Oathkeeper Python Client" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} From be7dd7fbcd7a69932f2f14a849aaebf57b2a8eff Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:36:08 +0200 Subject: [PATCH 020/164] fix: origin -> master --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8ffc3ad..198170b 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -85,7 +85,7 @@ EOF git status; \ ( \ git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "Updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ - git push --set-upstream origin "origin") || true) # && \ + git push --set-upstream origin "master") || true) # && \ # curl \ # -X POST \ # -H "Authorization: token $GITHUB_TOKEN" \ From 8191b78131173cce8788143f6ad95119d9b813c5 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:39:46 +0200 Subject: [PATCH 021/164] fix: push HEAD to master --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 198170b..62d3e4c 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -85,7 +85,7 @@ EOF git status; \ ( \ git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "Updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ - git push --set-upstream origin "master") || true) # && \ + git push origin HEAD:master) || true) # && \ # curl \ # -X POST \ # -H "Authorization: token $GITHUB_TOKEN" \ From bc8254ca4a380f3e1f1ea3160f7f9eef96412b36 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:40:57 +0200 Subject: [PATCH 022/164] feat: skip ci on synchro --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 62d3e4c..8ae5858 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -84,7 +84,7 @@ EOF git add -A; \ git status; \ ( \ - git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "Updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ + git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ git push origin HEAD:master) || true) # && \ # curl \ # -X POST \ From 1d161182aed34a67a0650ae16a0b9b095709d320 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:41:57 +0200 Subject: [PATCH 023/164] fix: do not include git hash in commit title --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8ae5858..9cc6299 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -84,7 +84,7 @@ EOF git add -A; \ git status; \ ( \ - git commit -a -m "chore: update repository templates to $GITHUB_SHA" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ + git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ git push origin HEAD:master) || true) # && \ # curl \ # -X POST \ From 1e1ec7553f5e1c9220dea208f3f06207220cca64 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:46:17 +0200 Subject: [PATCH 024/164] fix: remove old issue templates --- scripts/sync.sh | 3 ++ .../.github/ISSUE_TEMPLATE/bug_report.md | 30 ------------------- .../.github/ISSUE_TEMPLATE/feature_request.md | 22 -------------- 3 files changed, 3 insertions(+), 52 deletions(-) delete mode 100644 templates/repository/common/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 templates/repository/common/.github/ISSUE_TEMPLATE/feature_request.md diff --git a/scripts/sync.sh b/scripts/sync.sh index 9cc6299..bf4244c 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -28,6 +28,7 @@ function sync { # in subshell, change directory to workdir, checkout git branch specified in pushBranch (cd "$workdir"; git checkout -b "$pushBranch") + # Copy common templates to workdir cp -R "templates/repository/common/CONTRIBUTING.md" "$workdir/CONTRIBUTING.md" cp -R "templates/repository/common/SECURITY.md" "$workdir/SECURITY.md" @@ -78,6 +79,8 @@ EOF # Add Ecosystem (overview of all projects) to README.md perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$workdir/README.md" + + # Commit changes - line by line: change to workdir, add all files to git index, show working tree status, commit changes with "chore:..." title, push to upstream # curl: make pull request through Github API with token to authenticate and the PR titles, body. With pushBranch (the "script" branch) as head and the specified branch (main) as base (cd "$workdir"; \ diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/bug_report.md b/templates/repository/common/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 6fb5163..0000000 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve ---- - -**Describe the bug** - -A clear and concise description of what the bug is. - -**To Reproduce** - -Steps to reproduce the behavior: - - - -**Expected behavior** - -A clear and concise description of what you expected to happen. - -**Environment** - -- Version: v1.2.3, git sha hash -- Environment: Debian, Docker, ... - -**Additional context** - -Add any other context about the problem here. diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/feature_request.md b/templates/repository/common/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 13448cf..0000000 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project ---- - -**Is your feature request related to a problem? Please describe.** - -A clear and concise description of what the problem is. Ex. I'm always -frustrated when [...] - -**Describe the solution you'd like** - -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** - -A clear and concise description of any alternative solutions or features you've -considered. - -**Additional context** - -Add any other context or screenshots about the feature request here. From 6094de4a0cee20fedc2f382fc3c60d65adcfde44 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:49:36 +0200 Subject: [PATCH 025/164] fix: force remove old issue templates --- scripts/sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index bf4244c..71ac28d 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -28,6 +28,7 @@ function sync { # in subshell, change directory to workdir, checkout git branch specified in pushBranch (cd "$workdir"; git checkout -b "$pushBranch") + rm -rf "$workdir/.github/ISSUE_TEMPLATE/*" # Copy common templates to workdir cp -R "templates/repository/common/CONTRIBUTING.md" "$workdir/CONTRIBUTING.md" From 6b85804e79a236441c94ec27fd0a04cb4df47d5d Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 27 Oct 2021 12:53:42 +0200 Subject: [PATCH 026/164] fix: remove old issue templates issue --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 71ac28d..0ba8347 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -28,7 +28,7 @@ function sync { # in subshell, change directory to workdir, checkout git branch specified in pushBranch (cd "$workdir"; git checkout -b "$pushBranch") - rm -rf "$workdir/.github/ISSUE_TEMPLATE/*" + rm -rf "$workdir/.github/ISSUE_TEMPLATE/" # Copy common templates to workdir cp -R "templates/repository/common/CONTRIBUTING.md" "$workdir/CONTRIBUTING.md" From ee1ed7132e4ce49900a2e6dced61cbc5deac17df Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Sun, 7 Nov 2021 13:02:36 +0100 Subject: [PATCH 027/164] feat: bash curl installer for all projects --- install.sh | 437 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) create mode 100755 install.sh diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..7c3be08 --- /dev/null +++ b/install.sh @@ -0,0 +1,437 @@ +#!/bin/sh +set -e + +FLAVOR="_sqlite" + +usage() { + this=$1 + cat < [] + + (required) + Can be one of: + - cli - downloads the Ory CLI + - keto - downloads Ory Keto + - kratos - downloads Ory Kratos + - hydra - downloads Ory Hydra + - oathkeeper - downloads Ory Oathkeeper + + -b sets bindir or installation directory, Defaults to ./bin + -s downloads the static binary build without SQLite support + -d turns on debug logging + + [] (optional) + The release you wish to download. If left empty the latest version will be installed. + + $ bash <(curl -s https://raw.githubusercontent.com/ory/meta/master/install.sh) -v v0.8.0-alpha.2 kratos + +EOF + exit 2 +} + +parse_args() { + #BINDIR is ./bin unless set be ENV + # over-ridden by flag below + + BINDIR=${BINDIR:-./bin} + while getopts "b:dhs?x" arg; do + case "$arg" in + b) BINDIR="$OPTARG" ;; + s) FLAVOR="" ;; + d) log_set_priority 10 ;; + h | \?) usage "$0" ;; + x) set -x ;; + esac + done + shift $((OPTIND - 1)) + + [ -z "$1" ] && (echo "Please specify the project you want to download. Possible values are: keto, kratos, hydra, oathkeeper, ory." && exit 1) + TAG=$2 + + case "$1" in + + cli) + REPO="cli" + BINARY=ory + PROJECT_NAME=ory + ;; + + keto) + REPO="keto" + BINARY=keto + PROJECT_NAME=keto + ;; + + kratos) + REPO="kratos" + BINARY=kratos + PROJECT_NAME=kratos + ;; + + hydra) + REPO="hydra" + BINARY=hydra + PROJECT_NAME=hydra + ;; + + oathkeeper) + REPO="oathkeeper" + BINARY=oathkeeper + PROJECT_NAME=oathkeeper + ;; + + *) + echo "The project you specified is unknown. Please choose one of \"cli\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." + exit 1 + ;; + esac + +} +# this function wraps all the destructive operations +# if a curl|bash cuts off the end of the script due to +# network, either nothing will happen or will syntax error +# out preventing half-done work +execute() { + tmpdir=$(mktemp -d) + log_debug "downloading files into ${tmpdir}" + http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}" + http_download "${tmpdir}/${CHECKSUM}" "${CHECKSUM_URL}" + hash_sha256_verify "${tmpdir}/${TARBALL}" "${tmpdir}/${CHECKSUM}" + srcdir="${tmpdir}" + (cd "${tmpdir}" && untar "${TARBALL}") + test ! -d "${BINDIR}" && install -d "${BINDIR}" + for binexe in $BINARIES; do + if [ "$OS" = "windows" ]; then + binexe="${binexe}.exe" + fi + install "${srcdir}/${binexe}" "${BINDIR}/" + log_info "installed ${BINDIR}/${binexe}" + done + rm -rf "${tmpdir}" +} +get_binaries() { + case "$PLATFORM" in + darwin/amd64) BINARIES="$BINARY" ;; + darwin/arm64) BINARIES="$BINARY" ;; + linux/amd64) BINARIES="$BINARY" ;; + linux/arm64) BINARIES="$BINARY" ;; + windows/amd64) BINARIES="$BINARY" ;; + *) + log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" + exit 1 + ;; + esac +} +tag_to_version() { + if [ -z "${TAG}" ]; then + log_info "checking GitHub for latest tag" + else + log_info "checking GitHub for tag '${TAG}'" + fi + REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true + if test -z "$REALTAG"; then + log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details" + exit 1 + fi + # if version starts with 'v', remove it + TAG="$REALTAG" + VERSION=${TAG#v} +} +adjust_format() { + # change format (tar.gz or zip) based on OS + case ${OS} in + windows) FORMAT=zip ;; + esac + true +} +adjust_os() { + # adjust archive name based on OS + case ${OS} in + 386) OS=32bit ;; + amd64) OS=64bit ;; + darwin) OS=macOS ;; + esac + true +} +adjust_arch() { + # adjust archive name based on ARCH + case ${ARCH} in + 386) ARCH=32bit ;; + amd64) ARCH=64bit ;; + darwin) ARCH=macOS ;; + esac + true +} + +cat /dev/null </dev/null +} +echoerr() { + echo "$@" 1>&2 +} +log_prefix() { + echo "$0" +} +_logp=6 +log_set_priority() { + _logp="$1" +} +log_priority() { + if test -z "$1"; then + echo "$_logp" + return + fi + [ "$1" -le "$_logp" ] +} +log_tag() { + case $1 in + 0) echo "emerg" ;; + 1) echo "alert" ;; + 2) echo "crit" ;; + 3) echo "err" ;; + 4) echo "warning" ;; + 5) echo "notice" ;; + 6) echo "info" ;; + 7) echo "debug" ;; + *) echo "$1" ;; + esac +} +log_debug() { + log_priority 7 || return 0 + echoerr "$(log_prefix)" "$(log_tag 7)" "$@" +} +log_info() { + log_priority 6 || true + echoerr "$(log_prefix)" "$(log_tag 6)" "$@" +} +log_err() { + log_priority 3 || true + echoerr "$(log_prefix)" "$(log_tag 3)" "$@" +} +log_crit() { + log_priority 2 || true + echoerr "$(log_prefix)" "$(log_tag 2)" "$@" +} +uname_os() { + os=$(uname -s | tr '[:upper:]' '[:lower:]') + case "$os" in + cygwin_nt*) os="windows" ;; + mingw*) os="windows" ;; + msys_nt*) os="windows" ;; + esac + echo "$os" +} +uname_arch() { + arch=$(uname -m) + case $arch in + x86_64) arch="amd64" ;; + x86) arch="386" ;; + i686) arch="386" ;; + i386) arch="386" ;; + aarch64) arch="arm64" ;; + armv5*) arch="armv5" ;; + armv6*) arch="armv6" ;; + armv7*) arch="armv7" ;; + esac + echo ${arch} +} +uname_os_check() { + os=$(uname_os) + case "$os" in + darwin) return 0 ;; + dragonfly) return 0 ;; + freebsd) return 0 ;; + linux) return 0 ;; + android) return 0 ;; + nacl) return 0 ;; + netbsd) return 0 ;; + openbsd) return 0 ;; + plan9) return 0 ;; + solaris) return 0 ;; + windows) return 0 ;; + esac + log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" + return 1 +} +uname_arch_check() { + arch=$(uname_arch) + case "$arch" in + 386) return 0 ;; + amd64) return 0 ;; + arm64) return 0 ;; + armv5) return 0 ;; + armv6) return 0 ;; + armv7) return 0 ;; + ppc64) return 0 ;; + ppc64le) return 0 ;; + mips) return 0 ;; + mipsle) return 0 ;; + mips64) return 0 ;; + mips64le) return 0 ;; + s390x) return 0 ;; + amd64p32) return 0 ;; + esac + log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" + return 1 +} +untar() { + tarball=$1 + case "${tarball}" in + *.tar.gz | *.tgz) tar --no-same-owner -xzf "${tarball}" ;; + *.tar) tar --no-same-owner -xf "${tarball}" ;; + *.zip) unzip "${tarball}" ;; + *) + log_err "untar unknown archive format for ${tarball}" + return 1 + ;; + esac +} +http_download_curl() { + local_file=$1 + source_url=$2 + header=$3 + if [ -z "$header" ]; then + code=$(curl -w '%{http_code}' -sL -o "$local_file" "$source_url") + else + code=$(curl -w '%{http_code}' -sL -H "$header" -o "$local_file" "$source_url") + fi + if [ "$code" != "200" ]; then + log_debug "http_download_curl received HTTP status $code" + return 1 + fi + return 0 +} +http_download_wget() { + local_file=$1 + source_url=$2 + header=$3 + if [ -z "$header" ]; then + wget -q -O "$local_file" "$source_url" + else + wget -q --header "$header" -O "$local_file" "$source_url" + fi +} +http_download() { + log_debug "http_download $2" + if is_command curl; then + http_download_curl "$@" + return + elif is_command wget; then + http_download_wget "$@" + return + fi + log_crit "http_download unable to find wget or curl" + return 1 +} +http_copy() { + tmp=$(mktemp) + http_download "${tmp}" "$1" "$2" || return 1 + body=$(cat "$tmp") + rm -f "${tmp}" + echo "$body" +} +github_release() { + owner_repo=$1 + version=$2 + test -z "$version" && version="latest" + giturl="https://github.com/${owner_repo}/releases/${version}" + json=$(http_copy "$giturl" "Accept:application/json") + test -z "$json" && return 1 + version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//') + test -z "$version" && return 1 + echo "$version" +} +hash_sha256() { + TARGET=${1:-/dev/stdin} + if is_command gsha256sum; then + hash=$(gsha256sum "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command sha256sum; then + hash=$(sha256sum "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command shasum; then + hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command openssl; then + hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f a + else + log_crit "hash_sha256 unable to find command to compute sha-256 hash" + return 1 + fi +} +hash_sha256_verify() { + TARGET=$1 + checksums=$2 + if [ -z "$checksums" ]; then + log_err "hash_sha256_verify checksum file not specified in arg2" + return 1 + fi + BASENAME=${TARGET##*/} + want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) + if [ -z "$want" ]; then + log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'" + return 1 + fi + got=$(hash_sha256 "$TARGET") + if [ "$want" != "$got" ]; then + log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got" + return 1 + fi +} +cat /dev/null < Date: Sun, 7 Nov 2021 13:03:46 +0100 Subject: [PATCH 028/164] fix: rename cli -> ory --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 7c3be08..cafffa4 100755 --- a/install.sh +++ b/install.sh @@ -12,11 +12,11 @@ Usage: $this [-b] bindir [-d] [] (required) Can be one of: - - cli - downloads the Ory CLI - keto - downloads Ory Keto - kratos - downloads Ory Kratos - hydra - downloads Ory Hydra - oathkeeper - downloads Ory Oathkeeper + - ory - downloads the Ory CLI -b sets bindir or installation directory, Defaults to ./bin -s downloads the static binary build without SQLite support @@ -52,7 +52,7 @@ parse_args() { case "$1" in - cli) + ory) REPO="cli" BINARY=ory PROJECT_NAME=ory @@ -83,7 +83,7 @@ parse_args() { ;; *) - echo "The project you specified is unknown. Please choose one of \"cli\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." + echo "The project you specified is unknown. Please choose one of \"ory\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." exit 1 ;; esac From 68104c25873abc7a9a09a52f56dbdd6852ea3efa Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Sun, 7 Nov 2021 18:03:13 +0100 Subject: [PATCH 029/164] fix: checksum at root --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index cafffa4..1e002da 100755 --- a/install.sh +++ b/install.sh @@ -430,7 +430,7 @@ log_info "found version: ${VERSION} for ${TAG}/${OS}/${ARCH}" NAME=${PROJECT_NAME}_${VERSION}-${OS}${FLAVOR}_${ARCH} TARBALL=${NAME}.${FORMAT} TARBALL_URL=${GITHUB_DOWNLOAD}/${TAG}/${TARBALL} -CHECKSUM=${PROJECT_NAME}_${VERSION}_checksums.txt +CHECKSUM=checksums.txt CHECKSUM_URL=${GITHUB_DOWNLOAD}/${TAG}/${CHECKSUM} From 57d31bfbd55b2371112a0d5b2acaacc407340c82 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 26 Nov 2021 09:22:25 +0100 Subject: [PATCH 030/164] feat: add cloudbear + sos adopter (#127) --- static/adopters/cloudbear.svg | 1 + static/adopters/securityonion.svg | 1 + templates/repository/common/ADOPTERS.md | 12 ++++++++++++ 3 files changed, 14 insertions(+) create mode 100644 static/adopters/cloudbear.svg create mode 100644 static/adopters/securityonion.svg diff --git a/static/adopters/cloudbear.svg b/static/adopters/cloudbear.svg new file mode 100644 index 0000000..32d9b3b --- /dev/null +++ b/static/adopters/cloudbear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/adopters/securityonion.svg b/static/adopters/securityonion.svg new file mode 100644 index 0000000..ba27390 --- /dev/null +++ b/static/adopters/securityonion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 53e78d6..5dfe111 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -104,6 +104,18 @@ that your company deserves a spot here, reach out to Padis padis.io + + Adopter * + Cloudbear + Cloudbear + cloudbear.eu + + + Adopter * + Security Onion Solutions + Security Onion Solutions + securityonionsolutions.com + Sponsor OrderMyGear From 117234b44549fd7fa160d142f5f7138cb1f93f07 Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 30 Nov 2021 08:11:52 +0100 Subject: [PATCH 031/164] fix: svg links (#129) --- templates/repository/common/ADOPTERS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 5dfe111..36a1b76 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -107,13 +107,13 @@ that your company deserves a spot here, reach out to Adopter * Cloudbear - Cloudbear + Cloudbear cloudbear.eu Adopter * Security Onion Solutions - Security Onion Solutions + Security Onion Solutions securityonionsolutions.com From efda325028105e27ba647fff6f6e987e1a660e35 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 6 Dec 2021 17:45:22 +0100 Subject: [PATCH 032/164] fix: add factly nortal adopter (#130) --- static/adopters/factly.svg | 11 +++++++++++ static/adopters/nortal.svg | 4 ++++ templates/repository/common/ADOPTERS.md | 12 ++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 static/adopters/factly.svg create mode 100644 static/adopters/nortal.svg diff --git a/static/adopters/factly.svg b/static/adopters/factly.svg new file mode 100644 index 0000000..2de060d --- /dev/null +++ b/static/adopters/factly.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/adopters/nortal.svg b/static/adopters/nortal.svg new file mode 100644 index 0000000..1c6cbf2 --- /dev/null +++ b/static/adopters/nortal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 36a1b76..1169fed 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -115,6 +115,18 @@ that your company deserves a spot here, reach out to Security Onion Solutions Security Onion Solutions securityonionsolutions.com + + + Adopter * + Factly + Factly + factlylabs.com + + + Adopter * + Nortal + Nortal + nortal.com Sponsor From bf65cefcc383d452280aa43e8af68f4fbc28748b Mon Sep 17 00:00:00 2001 From: emrah Date: Sun, 26 Dec 2021 17:32:50 +0300 Subject: [PATCH 033/164] fix: remove the invalid flag from the usage note (#131) --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 1e002da..467dccf 100755 --- a/install.sh +++ b/install.sh @@ -25,7 +25,7 @@ Usage: $this [-b] bindir [-d] [] [] (optional) The release you wish to download. If left empty the latest version will be installed. - $ bash <(curl -s https://raw.githubusercontent.com/ory/meta/master/install.sh) -v v0.8.0-alpha.2 kratos + $ bash <(curl -s https://raw.githubusercontent.com/ory/meta/master/install.sh) kratos v0.8.0-alpha.2 EOF exit 2 From a4c405f4aa9e99bd8e61437f4330ac1a6c11c092 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 2 Feb 2022 11:51:18 +0100 Subject: [PATCH 034/164] docs: add hanko to adopters (#133) --- static/adopters/hanko.svg | 18 ++++++++++++++++++ templates/repository/common/ADOPTERS.md | 8 +++++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 static/adopters/hanko.svg diff --git a/static/adopters/hanko.svg b/static/adopters/hanko.svg new file mode 100644 index 0000000..26133db --- /dev/null +++ b/static/adopters/hanko.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 1169fed..0c65c00 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -144,7 +144,13 @@ that your company deserves a spot here, reach out to Sponsor Strivacity Strivacity - strivacity + strivacity.com + + + Adopter * + Hanko + Hanko + hanko.io From 77160761c23c45766b340b485c9078b628ae70b9 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 9 Feb 2022 21:00:31 +0100 Subject: [PATCH 035/164] docs: add rabbit adopter (#134) --- static/adopters/rabbit.svg | 11 +++++++++++ templates/repository/common/ADOPTERS.md | 6 ++++++ 2 files changed, 17 insertions(+) create mode 100644 static/adopters/rabbit.svg diff --git a/static/adopters/rabbit.svg b/static/adopters/rabbit.svg new file mode 100644 index 0000000..71330bd --- /dev/null +++ b/static/adopters/rabbit.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 0c65c00..8fd79ba 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -152,6 +152,12 @@ that your company deserves a spot here, reach out to Hanko hanko.io + + Adopter * + Rabbit + rabbit + rabbit.th.co + From 0a4a7b9cf005207206780327a143a141ff55d7bc Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 11 Feb 2022 10:11:25 +0100 Subject: [PATCH 036/164] fix: typo rabbit adopter (#135) --- templates/repository/common/ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 8fd79ba..5f7f2f0 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -156,7 +156,7 @@ that your company deserves a spot here, reach out to Adopter * Rabbit rabbit - rabbit.th.co + rabbit.co.th From a27962c8015e269ba64ceb4d0b8786e6157d9c35 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Fri, 11 Feb 2022 10:32:07 +0100 Subject: [PATCH 037/164] fix: unset flavor for oathkeeper --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 467dccf..a87f49a 100755 --- a/install.sh +++ b/install.sh @@ -80,6 +80,7 @@ parse_args() { REPO="oathkeeper" BINARY=oathkeeper PROJECT_NAME=oathkeeper + FLAVOR="" ;; *) From 2d2009062f92d643485fa269556395469551fea7 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 10 Mar 2022 21:40:09 +0100 Subject: [PATCH 038/164] fix: add docs to sync workflow (#136) --- .github/workflows/sync.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 3fcd7f6..77e812b 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -56,6 +56,12 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + - name: Synchronize Ory Documentation + run: | + ./scripts/sync-library.sh ory/docs master "Documentation" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + - name: Synchronize Ory CLI run: | ./scripts/sync-library.sh ory/cli master CLI From a895944a63140a981b3cb46e9b993e0fa7d14922 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 21 Mar 2022 10:09:52 +0100 Subject: [PATCH 039/164] fix: add inmusic adopter (#137) --- static/adopters/buhta.svg | 3 +++ static/adopters/inmusic.svg | 11 +++++++++++ templates/repository/common/ADOPTERS.md | 14 +++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 static/adopters/buhta.svg create mode 100644 static/adopters/inmusic.svg diff --git a/static/adopters/buhta.svg b/static/adopters/buhta.svg new file mode 100644 index 0000000..476daac --- /dev/null +++ b/static/adopters/buhta.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/adopters/inmusic.svg b/static/adopters/inmusic.svg new file mode 100644 index 0000000..982eed9 --- /dev/null +++ b/static/adopters/inmusic.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 5f7f2f0..d109c0d 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -155,9 +155,21 @@ that your company deserves a spot here, reach out to Adopter * Rabbit - rabbit + Rabbit rabbit.co.th + + Adopter * + inMusic + InMusic + inmusicbrands.com + + + Adopter * + Buhta + Buhta + buhta.com + From cfbed4ba43e5560e71d3b780ff2c90b8f3bb04e6 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 14 Apr 2022 17:23:49 +0200 Subject: [PATCH 040/164] fix: move meta discussions (#142) --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 0ba8347..f0f3947 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -50,7 +50,7 @@ function sync { if [[ "$project" = "ory/hydra" || $project = "ory/kratos" || $project = "ory/oathkeeper" || $project = "ory/keto" ]]; then env -i DISCUSSIONS="$discussions" REPOSITORY="$project" PROJECT="$humanName" /bin/bash -c "envsubst < \"$f\" | sponge \"$f\"" else - env -i DISCUSSIONS="https://github.com/ory/meta/discussions" REPOSITORY="$project" PROJECT="$humanName" /bin/bash -c "envsubst < \"$f\" | sponge \"$f\"" + env -i DISCUSSIONS="https://github.com/orgs/ory/discussions" REPOSITORY="$project" PROJECT="$humanName" /bin/bash -c "envsubst < \"$f\" | sponge \"$f\"" fi done From 16893bf8acc2edabdc122ff25fe5a7a69aba7981 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 26 May 2022 17:02:51 +0200 Subject: [PATCH 041/164] fix: update documentation link (#144) --- templates/repository/server/.github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index 2d4ff45..8125a19 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -50,7 +50,7 @@ If you're unsure about any of them, don't hesitate to ask. We're here to help! the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. -- [ ] I have added or changed [the documentation](docs/docs). +- [ ] I have added or changed [the documentation](https://github.com/ory/docs). ## Further Comments From 2f1d3a4891c8f5b09ee8812abe78e05729741430 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 26 May 2022 17:06:19 +0200 Subject: [PATCH 042/164] fix: sync ory examples instead of works (#143) --- .github/workflows/sync.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 77e812b..8466665 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -155,8 +155,8 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize Ory Works - run: ./scripts/sync-library.sh ory/works master Works + - name: Synchronize Ory Examples + run: ./scripts/sync-library.sh ory/examples master Examples env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} From bff2671cdff9a70600f90f31e5db7b4f9733204c Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 26 May 2022 17:11:37 +0200 Subject: [PATCH 043/164] fix: format and deps --- CODE_OF_CONDUCT.md | 66 +- CONTRIBUTING.md | 202 +++--- README.md | 37 +- SECURITY.md | 11 +- community_hangouts.md | 230 +++---- package-lock.json | 644 ++++++++++-------- package.json | 6 +- releases/kratos/0.5.0-alpha.1.md | 90 +-- saved_replies/circleci-blocking-merge.md | 6 +- saved_replies/cla-signing.md | 3 +- saved_replies/cla-wrong-e-mail.md | 11 +- saved_replies/docs-update-all-versions.md | 8 +- saved_replies/mark-as-draft.md | 7 +- saved_replies/not-using-issue-template.md | 19 +- saved_replies/please-format-code.md | 3 +- .../pr-review-suggest-changes-comment.md | 3 +- saved_replies/sorry-late-reply.md | 3 +- templates/repository/common/ADOPTERS.md | 24 +- .../repository/common/CODE_OF_CONDUCT.md | 66 +- templates/repository/common/CONTRIBUTING.md | 212 +++--- templates/repository/common/PROJECTS.md | 45 +- templates/repository/common/SECURITY.md | 11 +- .../library/.github/pull_request_template.md | 20 +- .../server/.github/pull_request_template.md | 17 +- 24 files changed, 781 insertions(+), 963 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2351896..f9ab1ec 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,17 +2,14 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and -expression, level of experience, education, socio-economic status, nationality, -personal appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation +in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, +sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. ## Our Standards -Examples of behavior that contributes to creating a positive environment -include: +Examples of behavior that contributes to creating a positive environment include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences @@ -22,56 +19,43 @@ include: Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or - advances +- The use of sexualized language or imagery and unwelcome sexual attention or advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and +fair corrective action in response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, or to ban temporarily or permanently any -contributor for other behaviors that they deem inappropriate, threatening, -offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and +other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other +behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its +community. Examples of representing a project or community include using an official project e-mail address, posting via an +official social media account, or acting as an appointed representative at an online or offline event. Representation of a project +may be further defined and clarified by project maintainers. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at office@ory.sh. All complaints will be -reviewed and investigated and will result in a response that is deemed necessary -and appropriate to the circumstances. The project team is obligated to maintain -confidentiality with regard to the reporter of an incident. Further details of -specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at +office@ory.sh. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and +appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an +incident. Further details of specific enforcement policies may be posted separately. -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions +as determined by other members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.4, available at +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d7fae9..2573cb7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,46 +29,35 @@ https://github.com/ory/meta/blob/master/templates/repository/CONTRIBUTING.md ## Introduction -There are many ways in which you can contribute, beyond writing code. The goal -of this document is to provide a high-level overview of how you can get -involved. +There are many ways in which you can contribute, beyond writing code. The goal of this document is to provide a high-level +overview of how you can get involved. -_Please note_: We take ORY {{Project}}'s security and our users' trust very -seriously. If you believe you have found a security issue in ORY {{Project}}, -please responsibly disclose by contacting us at security@ory.sh. +_Please note_: We take ORY {{Project}}'s security and our users' trust very seriously. If you believe you have found a security +issue in ORY {{Project}}, please responsibly disclose by contacting us at security@ory.sh. -First: As a potential contributor, your changes and ideas are welcome at any -hour of the day or night, weekdays, weekends, and holidays. Please do not ever -hesitate to ask a question or send a pull request. +First: As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and +holidays. Please do not ever hesitate to ask a question or send a pull request. -If you are unsure, just ask or submit the issue or pull request anyways. You -won't be yelled at for giving it your best effort. The worst that can happen is -that you'll be politely asked to change something. We appreciate any sort of -contributions, and don't want a wall of rules to get in the way of that. +If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. +The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't +want a wall of rules to get in the way of that. -That said, if you want to ensure that a pull request is likely to be merged, -talk to us! You can find out our thoughts and ensure that your contribution -won't clash or be obviated by ORY {{Project}}'s normal direction. A great way to -do this is via the [ORY Community](https://community.ory.sh/) or join the -[ORY Chat](https://www.ory.sh/chat). +That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure +that your contribution won't clash or be obviated by ORY {{Project}}'s normal direction. A great way to do this is via the +[ORY Community](https://community.ory.sh/) or join the [ORY Chat](https://www.ory.sh/chat). ## FAQ -- I am new to the community. Where can I find the - [ORY Community Code of Conduct?](CODE_OF_CONDUCT.md) +- I am new to the community. Where can I find the [ORY Community Code of Conduct?](CODE_OF_CONDUCT.md) -- I have a question. Where can I get - [answers to questions regarding ORY {{Project}}?](#communication) +- I have a question. Where can I get [answers to questions regarding ORY {{Project}}?](#communication) -- I would like to contribute but I am not sure how. Are there - [easy ways to contribute?](#how-can-i-contribute) +- I would like to contribute but I am not sure how. Are there [easy ways to contribute?](#how-can-i-contribute) [Or good first issues?](https://github.com/search?l=&o=desc&q=label%3A%22help+wanted%22+label%3A%22good+first+issue%22+is%3Aopen+user%3Aory+user%3Aory-corp&s=updated&type=Issues) -- I want to talk to other ORY {{Project}} users. - [How can I become a part of the community?](#communication) +- I want to talk to other ORY {{Project}} users. [How can I become a part of the community?](#communication) -- I would like to know what I am agreeing to when I contribute to ORY - {{Project}}. Does ORY have +- I would like to know what I am agreeing to when I contribute to ORY {{Project}}. Does ORY have [a Contributors License Agreement?](https://cla-assistant.io/ory/) - I would like updates about new versions of ORY {{Project}}. @@ -79,125 +68,98 @@ do this is via the [ORY Community](https://community.ory.sh/) or join the If you want to start contributing code right away, we have a [list of good first issues](https://github.com/ory/{{Project}}/labels/good%20first%20issue). -There are many other ways you can contribute without writing any code. Here are -a few things you can do to help out: +There are many other ways you can contribute without writing any code. Here are a few things you can do to help out: -- **Give us a star.** It may not seem like much, but it really makes a - difference. This is something that everyone can do to help out ORY - {{Project}}. Github stars help the project gain visibility and stand out. +- **Give us a star.** It may not seem like much, but it really makes a difference. This is something that everyone can do to help + out ORY {{Project}}. Github stars help the project gain visibility and stand out. -- **Join the community.** Sometimes helping people can be as easy as listening - to their problems and offering a different perspective. Join our Slack, have a - look at discussions in the forum and take part in our weekly hangout. More - info on this in [Communication](#communication). +- **Join the community.** Sometimes helping people can be as easy as listening to their problems and offering a different + perspective. Join our Slack, have a look at discussions in the forum and take part in our weekly hangout. More info on this in + [Communication](#communication). -- **Helping with open issues.** We have a lot of open issues for ORY {{Project}} - and some of them may lack necessary information, some are duplicates of older - issues. You can help out by guiding people through the process of filling out - the issue template, asking for clarifying information, or pointing them to - existing issues that match their description of the problem. +- **Helping with open issues.** We have a lot of open issues for ORY {{Project}} and some of them may lack necessary information, + some are duplicates of older issues. You can help out by guiding people through the process of filling out the issue template, + asking for clarifying information, or pointing them to existing issues that match their description of the problem. -- **Reviewing documentation changes.** Most documentation just needs a review - for proper spelling and grammar. If you think a document can be improved in - any way, feel free to hit the `edit` button at the top of the page. More info - on contributing to documentation here. +- **Reviewing documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a + document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info on contributing to + documentation here. -- **Help with tests.** Some pull requests may lack proper tests or test plans. - These are needed for the change to be implemented safely. +- **Help with tests.** Some pull requests may lack proper tests or test plans. These are needed for the change to be implemented + safely. ## Communication -We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask -questions, discuss bugs and feature requests, talk to other users of ORY, etc. +We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask questions, discuss bugs and feature requests, talk to +other users of ORY, etc. -We have a [forum](https://community.ory.sh/). This is a great place for in-depth -discussions and lots of code examples, logs and similar data. +We have a [forum](https://community.ory.sh/). This is a great place for in-depth discussions and lots of code examples, logs and +similar data. -You can also join our community hangout, if you want to speak to the ORY team -directly or ask some questions. You can find more info on the hangouts in -[Slack](https://www.ory.sh/chat). +You can also join our community hangout, if you want to speak to the ORY team directly or ask some questions. You can find more +info on the hangouts in [Slack](https://www.ory.sh/chat). -If you want to receive regular notifications about updates to ORY {{Project}}, -consider joining the mailing list. We will _only_ send you vital information on -the projects that you are interested in. +If you want to receive regular notifications about updates to ORY {{Project}}, consider joining the mailing list. We will _only_ +send you vital information on the projects that you are interested in. Also [follow us on twitter](https://twitter.com/orycorp). ## Contributing Code -Unless you are fixing a known bug, we **strongly** recommend discussing it with -the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) -before getting started to ensure your work is consistent with ORY {{Project}}'s -roadmap and architecture. +Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue or +[in our chat](https://www.ory.sh/chat) before getting started to ensure your work is consistent with ORY {{Project}}'s roadmap and +architecture. -All contributions are made via pull request. Note that **all patches from all -contributors get reviewed**. After a pull request is made other contributors -will offer feedback, and if the patch passes review a maintainer will accept it -with a comment. When pull requests fail testing, authors are expected to update -their pull requests to address the failures until the tests pass and the pull -request merges successfully. Look here for more info on the -[Pull request procedure](#pull-request-procedure). +All contributions are made via pull request. Note that **all patches from all contributors get reviewed**. After a pull request is +made other contributors will offer feedback, and if the patch passes review a maintainer will accept it with a comment. When pull +requests fail testing, authors are expected to update their pull requests to address the failures until the tests pass and the +pull request merges successfully. Look here for more info on the [Pull request procedure](#pull-request-procedure). -At least one review from a maintainer is required for all patches (even patches -from maintainers). +At least one review from a maintainer is required for all patches (even patches from maintainers). -Before your contributions can be merged you need to sign our -[Contributor License Agreement](https://cla-assistant.io/ory/). +Before your contributions can be merged you need to sign our [Contributor License Agreement](https://cla-assistant.io/ory/). -This agreement defines the terms under which your code is contributed to ORY. -More specifically it declares that you have the right to, and actually do, grant -us the rights to use your contribution. You can see the Apache 2.0 license under -which our projects are published -[here](https://github.com/ory/meta/blob/master/LICENSE). +This agreement defines the terms under which your code is contributed to ORY. More specifically it declares that you have the +right to, and actually do, grant us the rights to use your contribution. You can see the Apache 2.0 license under which our +projects are published [here](https://github.com/ory/meta/blob/master/LICENSE). -Reviewers should leave a "LGTM" comment once they are satisfied with the patch. -If the patch was submitted by a maintainer with write access, the pull request -should be merged by the submitter after review. +Reviewers should leave a "LGTM" comment once they are satisfied with the patch. If the patch was submitted by a maintainer with +write access, the pull request should be merged by the submitter after review. ## Documentation -Please provide documentation when changing, removing, or adding features. -Documentation resides in the project's [docs](docs) folder. Generate API and -configuration reference documentation using `cd docs; npm run gen`. +Please provide documentation when changing, removing, or adding features. Documentation resides in the project's [docs](docs) +folder. Generate API and configuration reference documentation using `cd docs; npm run gen`. For further instructions please head over to [docs/README.md](docs/README.md). ## Disclosing vulnerabilities -Please disclose vulnerabilities exclusively to -[security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. +Please disclose vulnerabilities exclusively to [security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. ## Code Style Please follow these guidelines when formatting source code: - Go code should match the output of `gofmt -s` and pass `golangci-lint run`. -- NodeJS and JavaScript code should be prettified using `npm run format` where - appropriate. +- NodeJS and JavaScript code should be prettified using `npm run format` where appropriate. ## Pull request procedure -To make a pull request, you will need a GitHub account; if you are unclear on -this process, see GitHub's documentation on -[forking](https://help.github.com/articles/fork-a-repo) and -[pull requests](https://help.github.com/articles/using-pull-requests). Pull -requests should be targeted at the `master` branch. Before creating a pull -request, go through this checklist: +To make a pull request, you will need a GitHub account; if you are unclear on this process, see GitHub's documentation on +[forking](https://help.github.com/articles/fork-a-repo) and [pull requests](https://help.github.com/articles/using-pull-requests). +Pull requests should be targeted at the `master` branch. Before creating a pull request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. -1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local - changes against the `master` branch. -1. Run the full project test suite with the `go test ./...` (or equivalent) - command and confirm that it passes. +1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. +1. Run the full project test suite with the `go test ./...` (or equivalent) command and confirm that it passes. 1. Run `gofmt -s` (if the project is written in Go). 1. Ensure that each commit has a subsystem prefix (ex: `controller:`). -Pull requests will be treated as "review requests," and maintainers will give -feedback on the style and substance of the patch. +Pull requests will be treated as "review requests," and maintainers will give feedback on the style and substance of the patch. -Normally, all pull requests must include tests that test your change. -Occasionally, a change will be very difficult to test for. In those cases, -please include a note in your commit message explaining why. +Normally, all pull requests must include tests that test your change. Occasionally, a change will be very difficult to test for. +In those cases, please include a note in your commit message explaining why. ### Working with Forks @@ -228,25 +190,19 @@ Now go to the project's GitHub Pull Request page and click "New pull request" ## Conduct -Whether you are a regular contributor or a newcomer, we care about making this -community a safe place for you and we've got your back. +Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your +back. -- We are committed to providing a friendly, safe and welcoming environment for - all, regardless of gender, sexual orientation, disability, ethnicity, - religion, or similar personal characteristic. -- Please avoid using nicknames that might detract from a friendly, safe and - welcoming environment for all. +- We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, + disability, ethnicity, religion, or similar personal characteristic. +- Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. - Be kind and courteous. There is no need to be mean or rude. -- We will exclude you from interaction if you insult, demean or harass anyone. - In particular, we do not tolerate behavior that excludes people in socially - marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel - you have been or are being harassed or made uncomfortable by a community - member, please contact one of the channel ops or a member of the ORY - {{Project}} core team immediately. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing - behaviour is not welcome. - -We welcome discussion about creating a welcoming, safe, and productive -environment for the community. If you have any questions, feedback, or concerns -[please let us know](https://www.ory.sh/chat). +- We will exclude you from interaction if you insult, demean or harass anyone. In particular, we do not tolerate behavior that + excludes people in socially marginalized groups. +- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made + uncomfortable by a community member, please contact one of the channel ops or a member of the ORY {{Project}} core team + immediately. +- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome. + +We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, +feedback, or concerns [please let us know](https://www.ory.sh/chat). diff --git a/README.md b/README.md index cca90b8..9df7573 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,27 @@ # meta -A place for reusable code, templates, and documentation required for getting a -repository in Ory working. +A place for reusable code, templates, and documentation required for getting a repository in Ory working. ## Documentation ### Updating Templates -This repository contains templates for things like the software license, -security policy, contributing guidelines, code of conduct, and so on. +This repository contains templates for things like the software license, security policy, contributing guidelines, code of +conduct, and so on. -You can find the repository templates in -[templates/repository](./templates/repository). Libraries (e.g. Dockertest) and -servers (e.g. Kratos) share templates from the -[common](./templates/repository/common) directory. Additionally, servers copy -files from [server](./templates/repository/server) and libraries from the -[library](./templates/repository/library) directory. +You can find the repository templates in [templates/repository](./templates/repository). Libraries (e.g. Dockertest) and servers +(e.g. Kratos) share templates from the [common](./templates/repository/common) directory. Additionally, servers copy files from +[server](./templates/repository/server) and libraries from the [library](./templates/repository/library) directory. -To update the repositories simply make your changes. Once merged to master, they -will be published using a GitHub Action. +To update the repositories simply make your changes. Once merged to master, they will be published using a GitHub Action. ## Github Sync action -The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to -synchronize all Ory repositories to a common template, including README, -CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero -manual interaction. -Depending on repository type (server, library, action) specific templates can be -copied as well. -The project names, links to documentation ect. are being substituted for each -project in [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). -For more details please refer to the documentation within the -[scripts](https://github.com/ory/meta/tree/master/scripts). For more details on -the workflow please refer to the documentation within +The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to synchronize all Ory repositories to a common +template, including README, CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero manual interaction. +Depending on repository type (server, library, action) specific templates can be copied as well. +The project names, links to documentation ect. are being substituted for each project in +[sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). +For more details please refer to the documentation within the [scripts](https://github.com/ory/meta/tree/master/scripts). For more +details on the workflow please refer to the documentation within [sync.yml](https://github.com/ory/meta/blob/master/.github/workflows/sync.yml) diff --git a/SECURITY.md b/SECURITY.md index 70f1ef4..8152c97 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,8 +21,8 @@ https://github.com/ory/meta/blob/master/templates/repository/SECURITY.md ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible -receiving such patches depend on the CVSS v3.0 Rating: +We release patches for security vulnerabilities. Which versions are eligible receiving such patches depend on the CVSS v3.0 +Rating: | CVSS v3.0 | Supported Versions | | --------- | ----------------------------------------- | @@ -31,7 +31,6 @@ receiving such patches depend on the CVSS v3.0 Rating: ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to -**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from -us within 48 hours. If the issue is confirmed, we will release a patch as soon -as possible depending on complexity but historically within a few days. +Please report (suspected) security vulnerabilities to **[security@ory.sh](mailto:security@ory.sh)**. You will receive a response +from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but +historically within a few days. diff --git a/community_hangouts.md b/community_hangouts.md index 9d0548f..047c3c1 100644 --- a/community_hangouts.md +++ b/community_hangouts.md @@ -10,17 +10,16 @@ ### Answer -Write a pull request that submits the organizational structure that could be -part of Keto. It might be easier to ask for all the logic to be supported in -Keto. +Write a pull request that submits the organizational structure that could be part of Keto. It might be easier to ask for all the +logic to be supported in Keto. -Look if Keto can support what you are looking for and if it does not support -that then make a feature request. Easier to pull off outside of Kratos. +Look if Keto can support what you are looking for and if it does not support that then make a feature request. Easier to pull off +outside of Kratos. ### Answer -It should be possible, it should be a feature in Oathkeeper. If it is not -possible please open a feature request; it is a very common/good use case. +It should be possible, it should be a feature in Oathkeeper. If it is not possible please open a feature request; it is a very +common/good use case. --- @@ -32,9 +31,8 @@ possible please open a feature request; it is a very common/good use case. ### Answer -That is definitely something we are looking at. We need to figure out how to -implement this safely though. It will be a lot of work but it would be a very -important feature for us to have. +That is definitely something we are looking at. We need to figure out how to implement this safely though. It will be a lot of +work but it would be a very important feature for us to have. --- @@ -56,15 +54,14 @@ important feature for us to have. ### Answer -We have extensive documentation on any breaking changes, if you sign up to the -newsletter you will get notified every time there is a new release. +We have extensive documentation on any breaking changes, if you sign up to the newsletter you will get notified every time there +is a new release. -We have elaborate descriptions of all changes in the newsletter, or on github. -The changelogs are in the documentation and also on github. Also with guides how -to do the upgrade/migration. +We have elaborate descriptions of all changes in the newsletter, or on github. The changelogs are in the documentation and also on +github. Also with guides how to do the upgrade/migration. -With helm charts its a manual process changing the version number at the moment. -We are looking to automate this in the near future. +With helm charts its a manual process changing the version number at the moment. We are looking to automate this in the near +future. [k8s issue #180](https://github.com/ory/k8s/issues/180) @@ -76,17 +73,15 @@ We are looking to automate this in the near future. #### Do you have plans to offer support the open source, selfhosted deployments? -We have been using Oathkeeper & Kratos for Auth. We are interested in support, -but our customers dont allow SaaS in this regard. +We have been using Oathkeeper & Kratos for Auth. We are interested in support, but our customers dont allow SaaS in this regard. ### Answer -We will focus on the cloud offering, it is easy to scale, easier to support. But -this request comes often, and we do want to help companies in this position. +We will focus on the cloud offering, it is easy to scale, easier to support. But this request comes often, and we do want to help +companies in this position. -We do want to offer solutions there so we could provide you with support in the -future. Best solution: Talk to [jared](mailto:jared@ory.sh), figure out what you -need and we will find a solution. +We do want to offer solutions there so we could provide you with support in the future. Best solution: Talk to +[jared](mailto:jared@ory.sh), figure out what you need and we will find a solution. --- @@ -96,15 +91,13 @@ need and we will find a solution. #### Is there a config to have Hydra respond to /api/hydra for example? -I am deploying Hydra in Docker in AWS. I cant configure it to respond to a -specific URL, without route URL. +I am deploying Hydra in Docker in AWS. I cant configure it to respond to a specific URL, without route URL. ### Answer Solution here is reverse proxy, like Oathkeeper. -If you do not use a reverse proxy, you have to do it with path rewrite -currently. +If you do not use a reverse proxy, you have to do it with path rewrite currently. --- @@ -114,18 +107,16 @@ currently. ### Answer -All projects that are currently open source, will remain open source. We have a -commitment to open source, that we still need to publish. +All projects that are currently open source, will remain open source. We have a commitment to open source, that we still need to +publish. -We will not go down the path of ElasticSearch. The monetization strategy that we -are following is running all the software as one consistent product with alot of -additional benefits as a cloud service. +We will not go down the path of ElasticSearch. The monetization strategy that we are following is running all the software as one +consistent product with alot of additional benefits as a cloud service. -But the core building blocks will remain free and open source. As we use Linux -and Kubernetes, we also use the ORY stack - which is open source. +But the core building blocks will remain free and open source. As we use Linux and Kubernetes, we also use the ORY stack - which +is open source. -We are also planning on having a foundation of sorts, but this is still in -planning. +We are also planning on having a foundation of sorts, but this is still in planning. --- @@ -133,8 +124,8 @@ planning. ### Comment -Next big assignment for Patrick is implementation of Google Sansibar paper. This -will allow us to deploy multi-region without significant latency. +Next big assignment for Patrick is implementation of Google Sansibar paper. This will allow us to deploy multi-region without +significant latency. --- @@ -150,17 +141,14 @@ will allow us to deploy multi-region without significant latency. ### Answer by Aeneas -So the original hydrator was more or less like an interim solution for the -project and the idea was always to have a pipeline where you do authentication, -hydration, authorization and then mutation. +So the original hydrator was more or less like an interim solution for the project and the idea was always to have a pipeline +where you do authentication, hydration, authorization and then mutation. -So you've probably looked into the configuration system for remote Json, for -example, and I think its ultimately really not great to generate Json. So we -want to use JsonNet for all of the config stuff. And with the change we would -also introduce a new part to the pipeline, which would then be a dedicated -hydrator because I think it makes a lot of sense to add. Basically you get the -requests and then authenticate, add context, check for permissions and then you -take all of the data, massage it and put it into a token or something. +So you've probably looked into the configuration system for remote Json, for example, and I think its ultimately really not great +to generate Json. So we want to use JsonNet for all of the config stuff. And with the change we would also introduce a new part to +the pipeline, which would then be a dedicated hydrator because I think it makes a lot of sense to add. Basically you get the +requests and then authenticate, add context, check for permissions and then you take all of the data, massage it and put it into a +token or something. --- @@ -172,19 +160,16 @@ take all of the data, massage it and put it into a token or something. ### Answer -The way we do release is slow because the pipelines sometimes a little bit flaky -when it comes to releases as we do pre-releases. So we do for example the -pre-release where we see if all the pipelines are working, if the build is -successful and if all the tests are successful for the build pipeline, the -binary in a Docker image ect. +The way we do release is slow because the pipelines sometimes a little bit flaky when it comes to releases as we do pre-releases. +So we do for example the pre-release where we see if all the pipelines are working, if the build is successful and if all the +tests are successful for the build pipeline, the binary in a Docker image ect. -If that works and once that passes all tests we do the proper release. So the -fact that you're seeing the pre dot 0 release is a very good sign because it -means that we're working on it. Unfortunately the build didn't pass so so we -will be trying to figure out what's going on. +If that works and once that passes all tests we do the proper release. So the fact that you're seeing the pre dot 0 release is a +very good sign because it means that we're working on it. Unfortunately the build didn't pass so so we will be trying to figure +out what's going on. -You can expect the release maybe in the next hours, definitely this week. It -depends how difficult it is to figure out what's going on. +You can expect the release maybe in the next hours, definitely this week. It depends how difficult it is to figure out what's +going on. --- @@ -194,22 +179,18 @@ depends how difficult it is to figure out what's going on. #### Is there any way to specify the schema_id to render the proper form inputs which belong to the specified schema? -For example I have an employee and customer schema and I would like to be able -to specify the schema when registering a new account from the selfservice -endpoints or public API or anywhere else where I can create a user. +For example I have an employee and customer schema and I would like to be able to specify the schema when registering a new +account from the selfservice endpoints or public API or anywhere else where I can create a user. -More info in -[this thread](https://community.ory.sh/t/multiple-schemas-identities-seem-problematic/2251) +More info in [this thread](https://community.ory.sh/t/multiple-schemas-identities-seem-problematic/2251) ### Answer -So for registration, it's a little bit difficult because assume you have -customer schema and you have a admin schema. You don't really want someone who -signs up to be able to use the admin schema because they're not a regular user -or customer. +So for registration, it's a little bit difficult because assume you have customer schema and you have a admin schema. You don't +really want someone who signs up to be able to use the admin schema because they're not a regular user or customer. -I think the best idea probably would be to create an issue in the Kratos repo -and explain the use case and then we can discuss some ideas. +I think the best idea probably would be to create an issue in the Kratos repo and explain the use case and then we can discuss +some ideas. Connected Issue: [kratos #765](https://github.com/ory/kratos/issues/765) @@ -225,93 +206,74 @@ Connected Issue: [kratos #765](https://github.com/ory/kratos/issues/765) ### Question -We had to get used to the terminology and what all the different systems do -because there's quite a lot to the ecosystem. Could you give me a broad -overview? +We had to get used to the terminology and what all the different systems do because there's quite a lot to the ecosystem. Could +you give me a broad overview? ### Answer -We started out with Hydra, which is the protocol layer for open authorization -and open ID connect. And the reason we started there was that we were doing a -cloud native file sharing application at the time and it just got really -difficult to interface with Dropbox and Google Cloud and so on. The Go Community -was not so so big back then and we just wanted to do something that would be +We started out with Hydra, which is the protocol layer for open authorization and open ID connect. And the reason we started there +was that we were doing a cloud native file sharing application at the time and it just got really difficult to interface with +Dropbox and Google Cloud and so on. The Go Community was not so so big back then and we just wanted to do something that would be good for Go developers to use. -But the deeper you get into open authorization and OAuth and OpenID Connect the -more complex it gets, the terminology, the structure of things, the processes or -flows. So we ended up completely redoing Hydra two times just because the more -we got into it, the more we knew and learned. - -Then probably the best place to start is with Kratos, which is how you build -your credentials, your username, password and all the flows around that. - -Alot of companies don't need auth and open ID connect because they're not using -cloud native services. So here Kratos is a great fit. I think it's really an -amazing utility, that we're soon going to offer as a cloud service also, by the -way. Then Hydra I just explained that, and also we have oathkeeper. Oathkeeper -is an implementation of Google beyondcorp reverse proxy plus some rules about -how and why to access API, so when you use Json web tokens against an API for -OAuth, there's a number of rules etc. It could be in the payload or it could be -just general rules about API access that you want to implement, so that's a zero -trust API access infrastructure. - -And last but not least there are different models out there for role-based -access management. For instance ORY Keto is an implementation basically -mimicking the AWS IAM. And now if you look at the newest sort of PR in the Keto -project we are tackling this at a much bigger level and implementing or trying -to implement something that Google calls Zanzibar, which is a more sort of very -low latency access management and role-based control system. So you write the -rules and we basically create an infrastructure that lets you manage that at -planet scale. +But the deeper you get into open authorization and OAuth and OpenID Connect the more complex it gets, the terminology, the +structure of things, the processes or flows. So we ended up completely redoing Hydra two times just because the more we got into +it, the more we knew and learned. + +Then probably the best place to start is with Kratos, which is how you build your credentials, your username, password and all the +flows around that. + +Alot of companies don't need auth and open ID connect because they're not using cloud native services. So here Kratos is a great +fit. I think it's really an amazing utility, that we're soon going to offer as a cloud service also, by the way. Then Hydra I just +explained that, and also we have oathkeeper. Oathkeeper is an implementation of Google beyondcorp reverse proxy plus some rules +about how and why to access API, so when you use Json web tokens against an API for OAuth, there's a number of rules etc. It could +be in the payload or it could be just general rules about API access that you want to implement, so that's a zero trust API access +infrastructure. + +And last but not least there are different models out there for role-based access management. For instance ORY Keto is an +implementation basically mimicking the AWS IAM. And now if you look at the newest sort of PR in the Keto project we are tackling +this at a much bigger level and implementing or trying to implement something that Google calls Zanzibar, which is a more sort of +very low latency access management and role-based control system. So you write the rules and we basically create an infrastructure +that lets you manage that at planet scale. --- ### Question -We are reading that jobs in Kratos are not being encouraged anymore. Why is -that? +We are reading that jobs in Kratos are not being encouraged anymore. Why is that? ### Answer -The reason for that is it's Hydra uses a special flavor of jobs before you get -to the API. The reason for that is to obfuscate some information and also make -it more compatible with some of the other security approaches we have including -oathkeeper, but when it's through the API it then turns into a normal Json web -token. So these are Open Standards, but they give you a lot of, let's say -flexibility, especially on how you want to configure the payload. +The reason for that is it's Hydra uses a special flavor of jobs before you get to the API. The reason for that is to obfuscate +some information and also make it more compatible with some of the other security approaches we have including oathkeeper, but +when it's through the API it then turns into a normal Json web token. So these are Open Standards, but they give you a lot of, +let's say flexibility, especially on how you want to configure the payload. -nd they have a very simple structure, there's a record for how it's been made, -what algorithm the payload uses and the signature and we're not going to stray -far away from that at all because that's how you guarantee interoperability -amongst different systems. So we do take some liberties within Hydra of making -those tokens as it's called "ORY flavoured" until they get to the API. +nd they have a very simple structure, there's a record for how it's been made, what algorithm the payload uses and the signature +and we're not going to stray far away from that at all because that's how you guarantee interoperability amongst different +systems. So we do take some liberties within Hydra of making those tokens as it's called "ORY flavoured" until they get to the +API. -There's also some situations where it's not recommendable to use jobs. There's -actually lots of situations just because it's a new area and it's emerging. And -you know, there is not enough implementation experience with it. +There's also some situations where it's not recommendable to use jobs. There's actually lots of situations just because it's a new +area and it's emerging. And you know, there is not enough implementation experience with it. -So if you have architectural questions and you want to ask them, you can do that -an issue or something else but be confident that we've had tons of conversations -about this and the implementation of Hydra is now over five years old. +So if you have architectural questions and you want to ask them, you can do that an issue or something else but be confident that +we've had tons of conversations about this and the implementation of Hydra is now over five years old. --- ### Question -Our main fear is that you guys might be closing or changing all the Open -Standards to some closed standard of security authorization. +Our main fear is that you guys might be closing or changing all the Open Standards to some closed standard of security +authorization. ### Answer by Thomas -We're not interested in violating those standards actually in any way because -that's the whole basis of our work too. I mean the IEEE standard and the IETF -standard and the w3c standard are our standards. That doesn't mean that the ORY -projects implement everything and by the way we implement a lot of things based -on how companies are using these things, but when we implement it it is exactly -in accordance with the standard. And the ORY open source projects too are the -codebase from that we build our products, so we are relying on them to stay open -source. +We're not interested in violating those standards actually in any way because that's the whole basis of our work too. I mean the +IEEE standard and the IETF standard and the w3c standard are our standards. That doesn't mean that the ORY projects implement +everything and by the way we implement a lot of things based on how companies are using these things, but when we implement it it +is exactly in accordance with the standard. And the ORY open source projects too are the codebase from that we build our products, +so we are relying on them to stay open source. ## Comments diff --git a/package-lock.json b/package-lock.json index e9745af..0fe16dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,43 +5,53 @@ "requires": true, "packages": { "": { + "name": "meta", "version": "1.0.0", "devDependencies": { - "ory-prettier-styles": "^1.1.1", - "prettier": "2.2.1", + "ory-prettier-styles": "1.2.0", + "prettier": "2.6.2", "text-runner": "^5.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "engines": { "node": ">=10" @@ -79,9 +89,9 @@ } }, "node_modules/@sindresorhus/transliterate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.1.tgz", - "integrity": "sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0", @@ -104,9 +114,9 @@ } }, "node_modules/@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "dependencies": { "defer-to-connect": "^2.0.0" @@ -116,9 +126,9 @@ } }, "node_modules/@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dev": true, "dependencies": { "@types/http-cache-semantics": "*", @@ -128,9 +138,9 @@ } }, "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -138,30 +148,36 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", "dev": true }, "node_modules/@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "node_modules/@types/node": { - "version": "14.14.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", - "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", + "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", "dev": true }, "node_modules/@types/responselike": { @@ -176,7 +192,7 @@ "node_modules/anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", - "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", + "integrity": "sha512-AmikqcK15r3q99hPvTa1na9n3eLkW0uE+RL9BZMSgwYalQeDnNXbYrN06BIcBPfGlmsGIE2jvkuvl/x0hyPF5Q==", "dev": true, "dependencies": { "emoji-regex": "~6.1.0" @@ -189,9 +205,9 @@ "dev": true }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -215,15 +231,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -250,9 +257,9 @@ } }, "node_modules/cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "dependencies": { "clone-response": "^1.0.2", @@ -260,7 +267,7 @@ "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", + "normalize-url": "^6.0.1", "responselike": "^2.0.0" }, "engines": { @@ -294,12 +301,11 @@ } }, "node_modules/cli-progress": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", - "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", "dev": true, "dependencies": { - "colors": "^1.1.2", "string-width": "^4.2.0" }, "engines": { @@ -309,7 +315,7 @@ "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -327,7 +333,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/colorette": { @@ -336,13 +342,17 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", "dev": true, + "dependencies": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, "engines": { - "node": ">=0.1.90" + "node": ">= 12" } }, "node_modules/concat-map": { @@ -487,18 +497,17 @@ "dev": true }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/fs.realpath": { @@ -529,9 +538,9 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -549,9 +558,9 @@ } }, "node_modules/glob-promise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.1.0.tgz", - "integrity": "sha512-wOdaX1+QJi3ldbjq4fXX/BbGSjhsG6eGXqMnBjQj9ubDiDLvrXbbXRj02rA0CXbMMM7J58dajiQ72va63D7pNw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", "dev": true, "dependencies": { "@types/glob": "^7.1.3" @@ -559,6 +568,10 @@ "engines": { "node": ">=12" }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, "peerDependencies": { "glob": "^7.1.6" } @@ -589,9 +602,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/has": { @@ -672,9 +685,9 @@ } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -702,9 +715,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -738,18 +751,19 @@ } }, "node_modules/keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz", + "integrity": "sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ==", "dev": true, "dependencies": { + "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, "node_modules/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "dependencies": { "uc.micro": "^1.0.1" @@ -777,9 +791,9 @@ "dev": true }, "node_modules/markdown-it": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.4.tgz", - "integrity": "sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "dependencies": { "argparse": "^2.0.1", @@ -841,12 +855,15 @@ "dev": true }, "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/once": { @@ -874,15 +891,15 @@ } }, "node_modules/ory-prettier-styles": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.1.2.tgz", - "integrity": "sha512-J7YcNdGlfTKCXAHEoFl9lp5EhnIASGgM5ua9Y+8OdWtS9tXJTik5xFYCF6xS46tpI3sk8cxFguKWhZeaeb6Z/A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.2.0.tgz", + "integrity": "sha512-0kt+p6sy55XGtLkgcy4LC0vjOrRL3GbkJ8y95Ad7biguWWX/83w4N8ILFo0kJb8/CN9K4LuM51gsN5GdAuWcWg==", "dev": true }, "node_modules/p-cancelable": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.0.tgz", - "integrity": "sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, "engines": { "node": ">=8" @@ -904,9 +921,9 @@ } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/pause-stream": { @@ -919,15 +936,18 @@ } }, "node_modules/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/ps-tree": { @@ -968,34 +988,38 @@ } }, "node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "resolve": "^1.9.0" + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "node_modules/responselike": { @@ -1069,26 +1093,26 @@ } }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -1106,19 +1130,31 @@ "node": ">=4" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/text-runner": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.0.tgz", - "integrity": "sha512-DuLWcI5xdY4SAhwejjJug/gct5LXDeBPrSMPhHU6Of2HvQVsHfbFC5xr3SbNpdfJ0TISEpa/8cb1pY4zn32bFA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.1.tgz", + "integrity": "sha512-LeYX+AiOfosHBFv4IDvqh6rpmtW/YeNiRb3lRB0UJBBhut1B2JXW5mY08Lt3VLl50QtpnEG5/xTdkjRxX6tcqQ==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.13", + "@babel/code-frame": "7.16.7", "cli-cursor": "3.1.0", - "cli-progress": "3.9.0", + "cli-progress": "3.10.0", "colorette": "1.2.2", "end-child-processes": "1.0.3", "minimist": "1.2.5", - "text-runner-core": "5.0.0", + "text-runner-core": "5.0.1", "yamljs": "0.3.0" }, "bin": { @@ -1126,24 +1162,24 @@ } }, "node_modules/text-runner-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.0.tgz", - "integrity": "sha512-NR07QzQP56aF6OewiOgBnBhGmFczTkETz3Whixn76H8uYzcAZtTiSedqjt6GEo5EddRK4vD9uCcZIou8nyoL4Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.1.tgz", + "integrity": "sha512-1hVuzElw4R/0iofvDJMfEW+IIlGdTYiDyWPGQYnw4yOgmOfKvj+gM4jrHASnmGmIBZaFnHMgSy2ZrkkwWs0Z+w==", "dev": true, "dependencies": { "@sindresorhus/slugify": "1.1.0", "anchor-markdown-header": "0.5.7", - "fs-extra": "9.1.0", - "glob": "7.1.6", - "glob-promise": "4.1.0", + "fs-extra": "10.0.0", + "glob": "7.2.0", + "glob-promise": "4.2.2", "got": "11.8.2", "humanize-string": "2.1.0", "interpret": "2.2.0", - "is-glob": "4.0.1", - "markdown-it": "12.0.4", + "is-glob": "4.0.3", + "markdown-it": "12.3.2", "parse5": "6.0.1", - "rechoir": "0.7.0", - "tmp-promise": "3.0.2" + "rechoir": "0.8.0", + "tmp-promise": "3.0.3" } }, "node_modules/through": { @@ -1165,9 +1201,9 @@ } }, "node_modules/tmp-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", - "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, "dependencies": { "tmp": "^0.2.0" @@ -1226,35 +1262,35 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, "@sindresorhus/slugify": { @@ -1276,9 +1312,9 @@ } }, "@sindresorhus/transliterate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.1.tgz", - "integrity": "sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0", @@ -1294,18 +1330,18 @@ } }, "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "requires": { "defer-to-connect": "^2.0.0" } }, "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dev": true, "requires": { "@types/http-cache-semantics": "*", @@ -1315,9 +1351,9 @@ } }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -1325,30 +1361,36 @@ } }, "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", "dev": true }, "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, "requires": { "@types/node": "*" } }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/node": { - "version": "14.14.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", - "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", + "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", "dev": true }, "@types/responselike": { @@ -1363,7 +1405,7 @@ "anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", - "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", + "integrity": "sha512-AmikqcK15r3q99hPvTa1na9n3eLkW0uE+RL9BZMSgwYalQeDnNXbYrN06BIcBPfGlmsGIE2jvkuvl/x0hyPF5Q==", "dev": true, "requires": { "emoji-regex": "~6.1.0" @@ -1378,9 +1420,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -1398,12 +1440,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1427,9 +1463,9 @@ "dev": true }, "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { "clone-response": "^1.0.2", @@ -1437,7 +1473,7 @@ "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", + "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, @@ -1462,19 +1498,18 @@ } }, "cli-progress": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", - "integrity": "sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", "dev": true, "requires": { - "colors": "^1.1.2", "string-width": "^4.2.0" } }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -1492,7 +1527,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "colorette": { @@ -1501,11 +1536,15 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true + "compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "requires": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + } }, "concat-map": { "version": "0.0.1", @@ -1619,12 +1658,11 @@ "dev": true }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -1652,9 +1690,9 @@ } }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1666,9 +1704,9 @@ } }, "glob-promise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.1.0.tgz", - "integrity": "sha512-wOdaX1+QJi3ldbjq4fXX/BbGSjhsG6eGXqMnBjQj9ubDiDLvrXbbXRj02rA0CXbMMM7J58dajiQ72va63D7pNw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", "dev": true, "requires": { "@types/glob": "^7.1.3" @@ -1694,9 +1732,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "has": { @@ -1762,9 +1800,9 @@ "dev": true }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -1783,9 +1821,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -1814,18 +1852,19 @@ } }, "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz", + "integrity": "sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ==", "dev": true, "requires": { + "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, "linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dev": true, "requires": { "uc.micro": "^1.0.1" @@ -1850,9 +1889,9 @@ "dev": true }, "markdown-it": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.4.tgz", - "integrity": "sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q==", + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "requires": { "argparse": "^2.0.1", @@ -1902,9 +1941,9 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "once": { @@ -1926,15 +1965,15 @@ } }, "ory-prettier-styles": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.1.2.tgz", - "integrity": "sha512-J7YcNdGlfTKCXAHEoFl9lp5EhnIASGgM5ua9Y+8OdWtS9tXJTik5xFYCF6xS46tpI3sk8cxFguKWhZeaeb6Z/A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.2.0.tgz", + "integrity": "sha512-0kt+p6sy55XGtLkgcy4LC0vjOrRL3GbkJ8y95Ad7biguWWX/83w4N8ILFo0kJb8/CN9K4LuM51gsN5GdAuWcWg==", "dev": true }, "p-cancelable": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.0.tgz", - "integrity": "sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true }, "parse5": { @@ -1950,9 +1989,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "pause-stream": { @@ -1965,9 +2004,9 @@ } }, "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "ps-tree": { @@ -1996,28 +2035,29 @@ "dev": true }, "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "requires": { - "resolve": "^1.9.0" + "resolve": "^1.20.0" } }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "responselike": { @@ -2079,23 +2119,23 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -2107,41 +2147,47 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "text-runner": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.0.tgz", - "integrity": "sha512-DuLWcI5xdY4SAhwejjJug/gct5LXDeBPrSMPhHU6Of2HvQVsHfbFC5xr3SbNpdfJ0TISEpa/8cb1pY4zn32bFA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.1.tgz", + "integrity": "sha512-LeYX+AiOfosHBFv4IDvqh6rpmtW/YeNiRb3lRB0UJBBhut1B2JXW5mY08Lt3VLl50QtpnEG5/xTdkjRxX6tcqQ==", "dev": true, "requires": { - "@babel/code-frame": "7.12.13", + "@babel/code-frame": "7.16.7", "cli-cursor": "3.1.0", - "cli-progress": "3.9.0", + "cli-progress": "3.10.0", "colorette": "1.2.2", "end-child-processes": "1.0.3", "minimist": "1.2.5", - "text-runner-core": "5.0.0", + "text-runner-core": "5.0.1", "yamljs": "0.3.0" } }, "text-runner-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.0.tgz", - "integrity": "sha512-NR07QzQP56aF6OewiOgBnBhGmFczTkETz3Whixn76H8uYzcAZtTiSedqjt6GEo5EddRK4vD9uCcZIou8nyoL4Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.1.tgz", + "integrity": "sha512-1hVuzElw4R/0iofvDJMfEW+IIlGdTYiDyWPGQYnw4yOgmOfKvj+gM4jrHASnmGmIBZaFnHMgSy2ZrkkwWs0Z+w==", "dev": true, "requires": { "@sindresorhus/slugify": "1.1.0", "anchor-markdown-header": "0.5.7", - "fs-extra": "9.1.0", - "glob": "7.1.6", - "glob-promise": "4.1.0", + "fs-extra": "10.0.0", + "glob": "7.2.0", + "glob-promise": "4.2.2", "got": "11.8.2", "humanize-string": "2.1.0", "interpret": "2.2.0", - "is-glob": "4.0.1", - "markdown-it": "12.0.4", + "is-glob": "4.0.3", + "markdown-it": "12.3.2", "parse5": "6.0.1", - "rechoir": "0.7.0", - "tmp-promise": "3.0.2" + "rechoir": "0.8.0", + "tmp-promise": "3.0.3" } }, "through": { @@ -2160,9 +2206,9 @@ } }, "tmp-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.2.tgz", - "integrity": "sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, "requires": { "tmp": "^0.2.0" diff --git a/package.json b/package.json index 39b1e69..6183ec5 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "url": "git+https://github.com/ory/meta.git" }, "devDependencies": { - "ory-prettier-styles": "^1.1.1", - "prettier": "2.2.1", - "text-runner": "^5.0.0" + "ory-prettier-styles": "1.2.0", + "prettier": "2.6.2", + "text-runner": "5.0.1" } } diff --git a/releases/kratos/0.5.0-alpha.1.md b/releases/kratos/0.5.0-alpha.1.md index a0de707..7c14d95 100644 --- a/releases/kratos/0.5.0-alpha.1.md +++ b/releases/kratos/0.5.0-alpha.1.md @@ -1,15 +1,12 @@ Live long and prosper! -The ORY team and the fabulous ORY Community is proud to present the next ORY -Kratos iteration! +The ORY team and the fabulous ORY Community is proud to present the next ORY Kratos iteration! -ORY Kratos is now capable of handling native iOS, Android, Windows, and macOS -login, registration, settings, recovery, and verification flows. And there is a -reference React Native application that you can find on +ORY Kratos is now capable of handling native iOS, Android, Windows, and macOS login, registration, settings, recovery, and +verification flows. And there is a reference React Native application that you can find on [GitHub](http://github.com/ory/kratos-selfservice-ui-react-native). -We co-released our reference React Native application which acts as a reference -on implementing these flows: +We co-released our reference React Native application which acts as a reference on implementing these flows: ![Registration](http://ory.sh/images/newsletter/kratos-0.5.0/registration-screen.png) @@ -17,70 +14,52 @@ on implementing these flows: ![Settings](http://ory.sh/images/newsletter/kratos-0.5.0/settings-screen.png) -In total, almost 1200 files were changed in about 480 commits. WOW! While you -can find a list of all changes in the changelist below, the following are the -features we are proud of: +In total, almost 1200 files were changed in about 480 commits. WOW! While you can find a list of all changes in the changelist +below, the following are the features we are proud of: -- We renamed login, registration, ... requests to "flows" consistently across - the code base, APIs, and data storage: +- We renamed login, registration, ... requests to "flows" consistently across the code base, APIs, and data storage: - Initiate a login, registration, ... flow; - Fetch a login, registration, ... flow; and - - Complete a login, registration, ... flow using a login flow method such as - "Log in with username and password". + - Complete a login, registration, ... flow using a login flow method such as "Log in with username and password". -- All self-service flows are now capable of handling API-based requests that do - not originate from browsers such as Chrome. This is set groundwork for - handling native flows named above! +- All self-service flows are now capable of handling API-based requests that do not originate from browsers such as Chrome. This + is set groundwork for handling native flows named above! -- The self service documentation has been refactored and simplified. We added - code samples, screenshots, payloads, and curl commands to make things easier - and clearer to understand. There are new video guides to help the community - get things done faster! Just slam that like button please! +- The self service documentation has been refactored and simplified. We added code samples, screenshots, payloads, and curl + commands to make things easier and clearer to understand. There are new video guides to help the community get things done + faster! Just slam that like button please! -- We added documentation for rotating important secrets such as the cookie and - session secrets. +- We added documentation for rotating important secrets such as the cookie and session secrets. -- We removed the need for reverse proxies by adding the ability to change the - ORY Kratos Session Cookie domain and path! The - [kratos-selfservice-ui-node](https://github.com/ory/kratos-selfservice-ui-node) - reference implementation no longer requires HTTP Request piping which greatly - simplifies the network layout and codebase! +- We removed the need for reverse proxies by adding the ability to change the ORY Kratos Session Cookie domain and path! The + [kratos-selfservice-ui-node](https://github.com/ory/kratos-selfservice-ui-node) reference implementation no longer requires HTTP + Request piping which greatly simplifies the network layout and codebase! -- The ORY Kratos CLI is now capable of managing identities with an interface - that works almost like the much loved Docker CLI! +- The ORY Kratos CLI is now capable of managing identities with an interface that works almost like the much loved Docker CLI! - Admins can now initiate account recovery for identities. -- We even refactored Email verification and account recovery. It is now possible - to add additional strategies e.g. recovery codes in the future, greatly - increasing the feature set and security capabilities of future ORY Kratos - versions! +- We even refactored Email verification and account recovery. It is now possible to add additional strategies e.g. recovery codes + in the future, greatly increasing the feature set and security capabilities of future ORY Kratos versions! -- Lookup to 'Have I Been Pwnd' is no longer a hard requirement, allowing - registration processes to complete when the service is unavailable or the - network is slow. +- Lookup to 'Have I Been Pwnd' is no longer a hard requirement, allowing registration processes to complete when the service is + unavailable or the network is slow. -- We contributed several issues and features in upstream projects such as - justinas/nosurf, gobuffalo/pop, and many more! +- We contributed several issues and features in upstream projects such as justinas/nosurf, gobuffalo/pop, and many more! -- We upgraded the automation and build pipeline to support cross-compilation of - CGO with Go 1.15+. +- We upgraded the automation and build pipeline to support cross-compilation of CGO with Go 1.15+. -- Fetching flows no longer requires CSRF cookies to be set, improving the - developer experience while not compromising security! +- Fetching flows no longer requires CSRF cookies to be set, improving the developer experience while not compromising security! -- ORY Kratos now has ORY Kratos Session Cookies that set in the HTTP Cookie - header, and ORY Kratos Session Tokens that are set as a HTTP Bearer - Authorization token or the `X-Session-Token` HTTP Header. +- ORY Kratos now has ORY Kratos Session Cookies that set in the HTTP Cookie header, and ORY Kratos Session Tokens that are set as + a HTTP Bearer Authorization token or the `X-Session-Token` HTTP Header. -Additionally we just exterminated tons of bugs, added tests, improved -documentation, and much much more. Please note that the cost of all this -innovation and collaboration is breaking changes. The details for the individual -breaking changes is the changelog below. +Additionally we just exterminated tons of bugs, added tests, improved documentation, and much much more. Please note that the cost +of all this innovation and collaboration is breaking changes. The details for the individual breaking changes is the changelog +below. -We would like to thank all ORY Community members who contributed towards this -release (in no particular order): +We would like to thank all ORY Community members who contributed towards this release (in no particular order): - [kevgo](https://github.com/kevgo) - [NickUfer](https://github.com/NickUfer) @@ -96,7 +75,6 @@ release (in no particular order): - [aschepis](https://github.com/aschepis) - [jakhog](https://github.com/jakhog) -Have fun exploring the new release. We hope you like it! If you haven't already, -join the [ORY Community Slack](http://slack.ory.sh) where we hold weekly -community hangouts via video chat and answer your questions, exchange ideas, and -present new developments! +Have fun exploring the new release. We hope you like it! If you haven't already, join the +[ORY Community Slack](http://slack.ory.sh) where we hold weekly community hangouts via video chat and answer your questions, +exchange ideas, and present new developments! diff --git a/saved_replies/circleci-blocking-merge.md b/saved_replies/circleci-blocking-merge.md index 094dc19..e1a7929 100644 --- a/saved_replies/circleci-blocking-merge.md +++ b/saved_replies/circleci-blocking-merge.md @@ -1,7 +1,5 @@ -Unfortunately, for some reason, the CircleCI tests are not running. Do you maybe -follow your/a fork of this repository on CircleCI? If so, you need to -unsubscribe / unwatch from that CircleCI project. Then, make another push to -your branch using: +Unfortunately, for some reason, the CircleCI tests are not running. Do you maybe follow your/a fork of this repository on +CircleCI? If so, you need to unsubscribe / unwatch from that CircleCI project. Then, make another push to your branch using: ``` $ git commit --amend --allow-empty diff --git a/saved_replies/cla-signing.md b/saved_replies/cla-signing.md index 021594b..e160f11 100644 --- a/saved_replies/cla-signing.md +++ b/saved_replies/cla-signing.md @@ -1,2 +1 @@ -Thank you, this looks great! Could you please sign the CLA (just two clicks), -then we can merge it right away! +Thank you, this looks great! Could you please sign the CLA (just two clicks), then we can merge it right away! diff --git a/saved_replies/cla-wrong-e-mail.md b/saved_replies/cla-wrong-e-mail.md index 019ee12..d95186f 100644 --- a/saved_replies/cla-wrong-e-mail.md +++ b/saved_replies/cla-wrong-e-mail.md @@ -1,20 +1,17 @@ -Thank you, this looks great! It looks like the CLA bot is not properly detecting -your signature. To fix this, try the following: +Thank you, this looks great! It looks like the CLA bot is not properly detecting your signature. To fix this, try the following: ``` $ git commit --amend --author="Author Name " ``` -Ensure that `Author Name` is replaced with your GitHub username (e.g. `aeneasr`) -and that the email address is replaced with the email address you have set up in -GitHub (e.g. `3372410+aeneasr@users.noreply.github.com`): +Ensure that `Author Name` is replaced with your GitHub username (e.g. `aeneasr`) and that the email address is replaced with the +email address you have set up in GitHub (e.g. `3372410+aeneasr@users.noreply.github.com`): ``` $ git commit --amend --author="aeneasr <3372410+aeneasr@users.noreply.github.com>" ``` -Once that is done, you can force-push your changes (make sure to push to the -correct remote and branch!): +Once that is done, you can force-push your changes (make sure to push to the correct remote and branch!): ``` $ git push --force HEAD: diff --git a/saved_replies/docs-update-all-versions.md b/saved_replies/docs-update-all-versions.md index 515536a..a358070 100644 --- a/saved_replies/docs-update-all-versions.md +++ b/saved_replies/docs-update-all-versions.md @@ -1,9 +1,7 @@ -Thank you very much for your contribution to the documentation! Due to the way -[Docusaurus](https://docusaurus.io) versioning works, you need to make the -changes in two locations: +Thank you very much for your contribution to the documentation! Due to the way [Docusaurus](https://docusaurus.io) versioning +works, you need to make the changes in two locations: - `docs/versioned_docs/version-v{version}/path/to/file` - `docs/docs/path/to/file` -Without making them in both locations, the changes will most likely be lost when -releasing another version. Thank you! :) +Without making them in both locations, the changes will most likely be lost when releasing another version. Thank you! :) diff --git a/saved_replies/mark-as-draft.md b/saved_replies/mark-as-draft.md index eaa5081..33195bc 100644 --- a/saved_replies/mark-as-draft.md +++ b/saved_replies/mark-as-draft.md @@ -1,7 +1,6 @@ -While the PR is being worked on I will mark it as a draft. That declutters our -review backlog :) +While the PR is being worked on I will mark it as a draft. That declutters our review backlog :) -Once you're done with your changes and would like someone to review them, mark -the PR as ready and request a review from one of the maintainers. +Once you're done with your changes and would like someone to review them, mark the PR as ready and request a review from one of +the maintainers. Thank you! diff --git a/saved_replies/not-using-issue-template.md b/saved_replies/not-using-issue-template.md index fc3fca0..edea528 100644 --- a/saved_replies/not-using-issue-template.md +++ b/saved_replies/not-using-issue-template.md @@ -1,20 +1,17 @@ Thank you for contributing to this repository by creating an issue! -Unfortunately, your issue lacks vital information, such as log files, the error -message, the software version, your configuration or other pieces of the puzzle. +Unfortunately, your issue lacks vital information, such as log files, the error message, the software version, your configuration +or other pieces of the puzzle. -Please also ensure that your issue is appropriately formatted. If you do not -know how to write markdown, you can find help +Please also ensure that your issue is appropriately formatted. If you do not know how to write markdown, you can find help [here](https://guides.github.com/features/mastering-markdown/). -Helping you with your problem is only possible if you share this information, -and it will save a lot of time of back and forth on your as well as our end! +Helping you with your problem is only possible if you share this information, and it will save a lot of time of back and forth on +your as well as our end! -For this reason, this repository uses -[issue templates](../tree/master/.github/ISSUE_TEMPLATE) which you can select -when pressing "New issue". Please use one of those issue templates to fill in -the required information. You can either create a new issue for this purpose and -close this one, or leave a comment. +For this reason, this repository uses [issue templates](../tree/master/.github/ISSUE_TEMPLATE) which you can select when pressing +"New issue". Please use one of those issue templates to fill in the required information. You can either create a new issue for +this purpose and close this one, or leave a comment. > Do not edit the original post as we will not be notified when you do so. diff --git a/saved_replies/please-format-code.md b/saved_replies/please-format-code.md index 90055da..a83ff7c 100644 --- a/saved_replies/please-format-code.md +++ b/saved_replies/please-format-code.md @@ -1,5 +1,4 @@ -Thank you, this looks great! The CI is failing because some files are formatted -incorrectly. To format them, run: +Thank you, this looks great! The CI is failing because some files are formatted incorrectly. To format them, run: ``` $ make format diff --git a/saved_replies/pr-review-suggest-changes-comment.md b/saved_replies/pr-review-suggest-changes-comment.md index 06609a4..3c456cb 100644 --- a/saved_replies/pr-review-suggest-changes-comment.md +++ b/saved_replies/pr-review-suggest-changes-comment.md @@ -1,2 +1 @@ -Awesome, thank you for your contribution! This looks pretty good and I have some -ideas how to improve it further :) +Awesome, thank you for your contribution! This looks pretty good and I have some ideas how to improve it further :) diff --git a/saved_replies/sorry-late-reply.md b/saved_replies/sorry-late-reply.md index aae88fc..fb4df7e 100644 --- a/saved_replies/sorry-late-reply.md +++ b/saved_replies/sorry-late-reply.md @@ -1,2 +1 @@ -Sorry for the late reply, I missed this notification. Are you still struggling -with this? +Sorry for the late reply, I missed this notification. Are you still struggling with this? diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index d109c0d..5428946 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -1,20 +1,16 @@ -The Ory community stands on the shoulders of individuals, companies, and -maintainers. We thank everyone involved - from submitting bug reports and -feature requests, to contributing patches, to sponsoring our work. Our community -is 1000+ strong and growing rapidly. The Ory stack protects 16.000.000.000+ API -requests every month with over 250.000+ active service nodes. We would have +The Ory community stands on the shoulders of individuals, companies, and maintainers. We thank everyone involved - from submitting +bug reports and feature requests, to contributing patches, to sponsoring our work. Our community is 1000+ strong and growing +rapidly. The Ory stack protects 16.000.000.000+ API requests every month with over 250.000+ active service nodes. We would have never been able to achieve this without each and everyone of you! -The following list represents companies that have accompanied us along the way -and that have made outstanding contributions to our ecosystem. _If you think -that your company deserves a spot here, reach out to +The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our +ecosystem. _If you think that your company deserves a spot here, reach out to office-muc@ory.sh now_! -**Please consider giving back by becoming a sponsor of our open source work on -Patreon or -Open Collective.** +**Please consider giving back by becoming a sponsor of our open source work on Patreon +or Open Collective.** @@ -181,10 +177,8 @@ as well as all of our backers -and past & current supporters (in alphabetical order) on -[Patreon](https://www.patreon.com/_ory): Alexander Alimovs, Billy, Chancy -Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, -TheCrealm. +and past & current supporters (in alphabetical order) on [Patreon](https://www.patreon.com/_ory): Alexander Alimovs, Billy, Chancy +Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, TheCrealm. \* Uses one of Ory's major projects in production. diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index 2351896..f9ab1ec 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -2,17 +2,14 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and -expression, level of experience, education, socio-economic status, nationality, -personal appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation +in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, +sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. ## Our Standards -Examples of behavior that contributes to creating a positive environment -include: +Examples of behavior that contributes to creating a positive environment include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences @@ -22,56 +19,43 @@ include: Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or - advances +- The use of sexualized language or imagery and unwelcome sexual attention or advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and +fair corrective action in response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, or to ban temporarily or permanently any -contributor for other behaviors that they deem inappropriate, threatening, -offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and +other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other +behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its +community. Examples of representing a project or community include using an official project e-mail address, posting via an +official social media account, or acting as an appointed representative at an online or offline event. Representation of a project +may be further defined and clarified by project maintainers. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at office@ory.sh. All complaints will be -reviewed and investigated and will result in a response that is deemed necessary -and appropriate to the circumstances. The project team is obligated to maintain -confidentiality with regard to the reporter of an incident. Further details of -specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at +office@ory.sh. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and +appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an +incident. Further details of specific enforcement policies may be posted separately. -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions +as determined by other members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.4, available at +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index c57b0b2..950792f 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -28,45 +28,37 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING ## Introduction -There are many ways in which you can contribute, beyond writing code. The goal -of this document is to provide a high-level overview of how you can get -involved. - -_Please note_: We take Ory $PROJECT's security and our users' trust very -seriously. If you believe you have found a security issue in Ory $PROJECT, -please responsibly disclose by contacting us at security@ory.sh. - -First: As a potential contributor, your changes and ideas are welcome at any -hour of the day or night, weekdays, weekends, and holidays. Please do not ever -hesitate to ask a question or send a pull request. - -If you are unsure, just ask or submit the issue or pull request anyways. You -won't be yelled at for giving it your best effort. The worst that can happen is -that you'll be politely asked to change something. We appreciate any sort of -contributions, and don't want a wall of rules to get in the way of that. - -That said, if you want to ensure that a pull request is likely to be merged, -talk to us! You can find out our thoughts and ensure that your contribution -won't clash or be obviated by Ory +There are many ways in which you can contribute, beyond writing code. The goal of this document is to provide a high-level +overview of how you can get involved. + +_Please note_: We take Ory $PROJECT's security and our users' trust very seriously. If you believe you have found a security issue +in Ory $PROJECT, please responsibly disclose by contacting us at security@ory.sh. + +First: As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and +holidays. Please do not ever hesitate to ask a question or send a pull request. + +If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. +The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't +want a wall of rules to get in the way of that. + +That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure +that your contribution won't clash or be obviated by Ory $PROJECT's normal direction. A great way to do this is via -[Ory $PROJECT Discussions]($DISCUSSIONS) -or the [Ory Chat](https://www.ory.sh/chat). +[Ory $PROJECT Discussions]($DISCUSSIONS) or the +[Ory Chat](https://www.ory.sh/chat). ## FAQ - I am new to the community. Where can I find the [Ory Community Code of Conduct?](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md) -- I have a question. Where can I get - [answers to questions regarding Ory $PROJECT?](#communication) +- I have a question. Where can I get [answers to questions regarding Ory $PROJECT?](#communication) -- I would like to contribute but I am not sure how. Are there - [easy ways to contribute?](#how-can-i-contribute) +- I would like to contribute but I am not sure how. Are there [easy ways to contribute?](#how-can-i-contribute) [Or good first issues?](https://github.com/search?l=&o=desc&q=label%3A%22help+wanted%22+label%3A%22good+first+issue%22+is%3Aopen+user%3Aory+user%3Aory-corp&s=updated&type=Issues) -- I want to talk to other Ory $PROJECT users. - [How can I become a part of the community?](#communication) +- I want to talk to other Ory $PROJECT users. [How can I become a part of the community?](#communication) - I would like to know what I am agreeing to when I contribute to Ory $PROJECT. @@ -81,80 +73,63 @@ or the [Ory Chat](https://www.ory.sh/chat). If you want to start contributing code right away, we have a [list of good first issues](https://github.com/$REPOSITORY/labels/good%20first%20issue). -There are many other ways you can contribute without writing any code. Here are -a few things you can do to help out: +There are many other ways you can contribute without writing any code. Here are a few things you can do to help out: -- **Give us a star.** It may not seem like much, but it really makes a - difference. This is something that everyone can do to help out Ory $PROJECT. - Github stars help the project gain visibility and stand out. +- **Give us a star.** It may not seem like much, but it really makes a difference. This is something that everyone can do to help + out Ory $PROJECT. Github stars help the project gain visibility and stand out. -- **Join the community.** Sometimes helping people can be as easy as listening - to their problems and offering a different perspective. Join our Slack, have a - look at discussions in the forum and take part in our weekly hangout. More - info on this in [Communication](#communication). +- **Join the community.** Sometimes helping people can be as easy as listening to their problems and offering a different + perspective. Join our Slack, have a look at discussions in the forum and take part in our weekly hangout. More info on this in + [Communication](#communication). -- **Helping with open issues.** We have a lot of open issues for Ory $PROJECT - and some of them may lack necessary information, some are duplicates of older - issues. You can help out by guiding people through the process of filling out - the issue template, asking for clarifying information, or pointing them to - existing issues that match their description of the problem. +- **Helping with open issues.** We have a lot of open issues for Ory $PROJECT and some of them may lack necessary information, + some are duplicates of older issues. You can help out by guiding people through the process of filling out the issue template, + asking for clarifying information, or pointing them to existing issues that match their description of the problem. -- **Reviewing documentation changes.** Most documentation just needs a review - for proper spelling and grammar. If you think a document can be improved in - any way, feel free to hit the `edit` button at the top of the page. More info - on contributing to documentation [here](#documentation). +- **Reviewing documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a + document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info on contributing to + documentation [here](#documentation). -- **Help with tests.** Some pull requests may lack proper tests or test plans. - These are needed for the change to be implemented safely. +- **Help with tests.** Some pull requests may lack proper tests or test plans. These are needed for the change to be implemented + safely. ## Communication -We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask -questions, discuss bugs and feature requests, talk to other users of Ory, etc. +We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask questions, discuss bugs and feature requests, talk to +other users of Ory, etc. -Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for -in-depth discussions and lots of code examples, logs and similar data. +Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for in-depth discussions and lots of code examples, logs +and similar data. -You can also join our community hangout, if you want to speak to the Ory team -directly or ask some questions. You can find more info on the hangouts in -[Slack](https://www.ory.sh/chat). +You can also join our community hangout, if you want to speak to the Ory team directly or ask some questions. You can find more +info on the hangouts in [Slack](https://www.ory.sh/chat). -If you want to receive regular notifications about updates to Ory $PROJECT, -consider joining the mailing list. We will _only_ send you vital information on -the projects that you are interested in. +If you want to receive regular notifications about updates to Ory $PROJECT, consider joining the mailing list. We will _only_ send +you vital information on the projects that you are interested in. Also [follow us on twitter](https://twitter.com/orycorp). ## Contributing Code -Unless you are fixing a known bug, we **strongly** recommend discussing it with -the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) -before getting started to ensure your work is consistent with Ory $PROJECT's -roadmap and architecture. +Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue or +[in our chat](https://www.ory.sh/chat) before getting started to ensure your work is consistent with Ory $PROJECT's roadmap and +architecture. -All contributions are made via pull requests. To make a pull request, you will -need a GitHub account; if you are unclear on this process, see GitHub's -documentation on [forking](https://help.github.com/articles/fork-a-repo) and -[pull requests](https://help.github.com/articles/using-pull-requests). Pull -requests should be targeted at the `master` branch. Before creating a pull -request, go through this checklist: +All contributions are made via pull requests. To make a pull request, you will need a GitHub account; if you are unclear on this +process, see GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo) and +[pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at the `master` branch. +Before creating a pull request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. -1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local - changes against the `master` branch. -1. Run the full project test suite with the `go test -tags sqlite ./...` (or - equivalent) command and confirm that it passes. -1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is - written in Go, `npm run format` if the project is written for NodeJS. -1. Ensure that each commit has a descriptive prefix. This ensures a uniform - commit history and helps structure the changelog. - Please refer to this - [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) - for an overview. -1. Sign-up with CircleCI so that it has access to your repository with the - branch containing your PR. Simply creating a CircleCI account is sufficient - for the CI jobs to run, you do not need to setup a CircleCI project for the - branch. +1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. +1. Run the full project test suite with the `go test -tags sqlite ./...` (or equivalent) command and confirm that it passes. +1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is written in Go, `npm run format` if the project is + written for NodeJS. +1. Ensure that each commit has a descriptive prefix. This ensures a uniform commit history and helps structure the changelog. + Please refer to this [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) for an + overview. +1. Sign-up with CircleCI so that it has access to your repository with the branch containing your PR. Simply creating a CircleCI + account is sufficient for the CI jobs to run, you do not need to setup a CircleCI project for the branch. If a pull request is not ready to be reviewed yet [it should be marked as a "Draft"](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). @@ -162,55 +137,46 @@ If a pull request is not ready to be reviewed yet Before your contributions can be reviewed you need to sign our [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY). -This agreement defines the terms under which your code is contributed to Ory. -More specifically it declares that you have the right to, and actually do, grant -us the rights to use your contribution. You can see the Apache 2.0 license under -which our projects are published -[here](https://github.com/ory/meta/blob/master/LICENSE). +This agreement defines the terms under which your code is contributed to Ory. More specifically it declares that you have the +right to, and actually do, grant us the rights to use your contribution. You can see the Apache 2.0 license under which our +projects are published [here](https://github.com/ory/meta/blob/master/LICENSE). -When pull requests fail testing, authors are expected to update their pull -requests to address the failures until the tests pass. +When pull requests fail testing, authors are expected to update their pull requests to address the failures until the tests pass. Pull requests eligible for review 1. follow the repository's code formatting conventions; -2. include tests which prove that the change works as intended and does not add - regressions; +2. include tests which prove that the change works as intended and does not add regressions; 3. document the changes in the code and/or the project's documentation; 4. pass the CI pipeline; -5. have signed our - [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY); +5. have signed our [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY); 6. include a proper git commit message following the [Conventional Commit Specification](https://www.conventionalcommits.org/en/v1.0.0/). -If all of these items are checked, the pull request is ready to be reviewed and -you should change the status to "Ready for review" and +If all of these items are checked, the pull request is ready to be reviewed and you should change the status to "Ready for review" +and [request review from a maintainer](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review). Reviewers will approve the pull request once they are satisfied with the patch. ## Documentation -Please provide documentation when changing, removing, or adding features. -Documentation resides in the project's -[docs](https://github.com/$REPOSITORY/tree/master/docs) folder. Generate API and -configuration reference documentation using `cd docs; npm run gen`. +Please provide documentation when changing, removing, or adding features. Documentation resides in the project's +[docs](https://github.com/$REPOSITORY/tree/master/docs) folder. Generate API and configuration reference documentation using +`cd docs; npm run gen`. -For further instructions please head over to -[docs/README.md](https://github.com/$REPOSITORY/blob/master/README.md). +For further instructions please head over to [docs/README.md](https://github.com/$REPOSITORY/blob/master/README.md). ## Disclosing vulnerabilities -Please disclose vulnerabilities exclusively to -[security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. +Please disclose vulnerabilities exclusively to [security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. ## Code Style Please follow these guidelines when formatting source code: - Go code should match the output of `gofmt -s` and pass `golangci-lint run`. -- NodeJS and JavaScript code should be prettified using `npm run format` where - appropriate. +- NodeJS and JavaScript code should be prettified using `npm run format` where appropriate. ### Working with Forks @@ -241,25 +207,19 @@ Now go to the project's GitHub Pull Request page and click "New pull request" ## Conduct -Whether you are a regular contributor or a newcomer, we care about making this -community a safe place for you and we've got your back. +Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your +back. -- We are committed to providing a friendly, safe and welcoming environment for - all, regardless of gender, sexual orientation, disability, ethnicity, - religion, or similar personal characteristic. -- Please avoid using nicknames that might detract from a friendly, safe and - welcoming environment for all. +- We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, + disability, ethnicity, religion, or similar personal characteristic. +- Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. - Be kind and courteous. There is no need to be mean or rude. -- We will exclude you from interaction if you insult, demean or harass anyone. - In particular, we do not tolerate behavior that excludes people in socially - marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel - you have been or are being harassed or made uncomfortable by a community - member, please contact one of the channel ops or a member of the Ory $PROJECT - core team immediately. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing - behaviour is not welcome. - -We welcome discussion about creating a welcoming, safe, and productive -environment for the community. If you have any questions, feedback, or concerns -[please let us know](https://www.ory.sh/chat). +- We will exclude you from interaction if you insult, demean or harass anyone. In particular, we do not tolerate behavior that + excludes people in socially marginalized groups. +- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made + uncomfortable by a community member, please contact one of the channel ops or a member of the Ory $PROJECT core team + immediately. +- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome. + +We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, +feedback, or concerns [please let us know](https://www.ory.sh/chat). diff --git a/templates/repository/common/PROJECTS.md b/templates/repository/common/PROJECTS.md index 4c9c9b1..3127443 100644 --- a/templates/repository/common/PROJECTS.md +++ b/templates/repository/common/PROJECTS.md @@ -1,49 +1,40 @@ -We build Ory on several guiding principles when it comes to our architecture -design: +We build Ory on several guiding principles when it comes to our architecture design: - Minimal dependencies - Runs everywhere - Scales without effort - Minimize room for human and network errors -Ory's architecture is designed to run best on a Container Orchestration system -such as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are -small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) -and operating systems (FreeBSD, Linux, macOS, Windows) without system -dependencies (Java, Node, Ruby, libxml, ...). +Ory's architecture is designed to run best on a Container Orchestration system such as Kubernetes, CloudFoundry, OpenShift, and +similar projects. Binaries are small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) and operating +systems (FreeBSD, Linux, macOS, Windows) without system dependencies (Java, Node, Ruby, libxml, ...). ### Ory Kratos: Identity and User Infrastructure and Management -[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User -Management system that is built according to -[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). -It implements core use cases that almost every software application needs to -deal with: Self-service Login and Registration, Multi-Factor Authentication -(MFA/2FA), Account Recovery and Verification, Profile, and Account Management. +[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User Management system that is built according to +[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). It implements core +use cases that almost every software application needs to deal with: Self-service Login and Registration, Multi-Factor +Authentication (MFA/2FA), Account Recovery and Verification, Profile, and Account Management. ### Ory Hydra: OAuth2 & OpenID Connect Server -[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and -OpenID Connect Provider which easily connects to any existing identity system by -writing a tiny "bridge" application. Gives absolute control over user interface -and user experience flows. +[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and OpenID Connect Provider which easily connects to any +existing identity system by writing a tiny "bridge" application. Gives absolute control over user interface and user experience +flows. ### Ory Oathkeeper: Identity & Access Proxy -[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust -Identity & Access Proxy (IAP) with configurable authentication, authorization, -and request mutation rules for your web services: Authenticate JWT, Access -Tokens, API Keys, mTLS; Check if the contained subject is allowed to perform the -request; Encode resulting content into custom headers (`X-User-ID`), JSON Web -Tokens and more! +[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust Identity & Access Proxy (IAP) with configurable +authentication, authorization, and request mutation rules for your web services: Authenticate JWT, Access Tokens, API Keys, mTLS; +Check if the contained subject is allowed to perform the request; Encode resulting content into custom headers (`X-User-ID`), JSON +Web Tokens and more! ### Ory Keto: Access Control Policies as a Server -[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a -set of access control policies, similar to AWS IAM Policies, in order to -determine whether a subject (user, application, service, car, ...) is authorized -to perform a certain action on a resource. +[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a set of access control policies, similar to AWS IAM +Policies, in order to determine whether a subject (user, application, service, car, ...) is authorized to perform a certain action +on a resource. diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 70f1ef4..8152c97 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -21,8 +21,8 @@ https://github.com/ory/meta/blob/master/templates/repository/SECURITY.md ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible -receiving such patches depend on the CVSS v3.0 Rating: +We release patches for security vulnerabilities. Which versions are eligible receiving such patches depend on the CVSS v3.0 +Rating: | CVSS v3.0 | Supported Versions | | --------- | ----------------------------------------- | @@ -31,7 +31,6 @@ receiving such patches depend on the CVSS v3.0 Rating: ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to -**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from -us within 48 hours. If the issue is confirmed, we will release a patch as soon -as possible depending on complexity but historically within a few days. +Please report (suspected) security vulnerabilities to **[security@ory.sh](mailto:security@ory.sh)**. You will receive a response +from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but +historically within a few days. diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index 1f692e1..29d4613 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -34,20 +34,14 @@ Put an `x` in the boxes that apply. You can also fill these out after creating t them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code. --> -- [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md) - and signed the CLA. -- [ ] I have referenced an issue containing the design document if my change - introduces a new feature. +- [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md) and signed the CLA. +- [ ] I have referenced an issue containing the design document if my change introduces a new feature. - [ ] I have read the [security policy](../security/policy). -- [ ] I confirm that this pull request does not address a security - vulnerability. If this pull request addresses a security vulnerability, I - confirm that I got green light (please contact - [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push - the changes. -- [ ] I have added tests that prove my fix is effective or that my feature - works. -- [ ] I have added necessary documentation within the code base (if - appropriate). +- [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security + vulnerability, I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the + maintainers to push the changes. +- [ ] I have added tests that prove my fix is effective or that my feature works. +- [ ] I have added necessary documentation within the code base (if appropriate). ## Further comments diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index 8125a19..d8bcb16 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -38,18 +38,13 @@ If you're unsure about any of them, don't hesitate to ask. We're here to help! --> - [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md). -- [ ] I have referenced an issue containing the design document if my change - introduces a new feature. -- [ ] I am following the - [contributing code guidelines](../blob/master/CONTRIBUTING.md#contributing-code). +- [ ] I have referenced an issue containing the design document if my change introduces a new feature. +- [ ] I am following the [contributing code guidelines](../blob/master/CONTRIBUTING.md#contributing-code). - [ ] I have read the [security policy](../security/policy). -- [ ] I confirm that this pull request does not address a security - vulnerability. If this pull request addresses a security. vulnerability, I - confirm that I got green light (please contact - [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push - the changes. -- [ ] I have added tests that prove my fix is effective or that my feature - works. +- [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security. + vulnerability, I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the + maintainers to push the changes. +- [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added or changed [the documentation](https://github.com/ory/docs). ## Further Comments From 9a12e12742572ad435bbf4c3e8c631f9472681f1 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 8 Jun 2022 12:29:41 +0200 Subject: [PATCH 044/164] fix: use correct discussions repo (#145) This changes the forum URL to $DISCUSSIONS which will always use the Ory Org discussions if there is none on the repo (i.e. for all repos except kratos,hydra,oathkeeper,keto) --- templates/repository/common/.github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index f667f60..02d86b3 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum - url: https://github.com/$REPOSITORY/discussions + url: $DISCUSSIONS about: Please ask and answer questions here, show your implementations and discuss ideas. From d7b4507ac563cb981cc176039503a39a86c798db Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 16 Jun 2022 21:02:09 +0200 Subject: [PATCH 045/164] ci: use node 16 --- .github/workflows/sync.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 8466665..34d7809 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -18,6 +18,9 @@ jobs: name: Synchronize Repositories runs-on: ubuntu-latest steps: + - uses: actions/setup-node@v3 + with: + node-version: 16 - name: Checkout uses: actions/checkout@v2 # installs moreutils on the Action worker node to use the sponge function From 344dea23911c67ead6b3088dc473545f84373cc0 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 16 Jun 2022 21:10:19 +0200 Subject: [PATCH 046/164] fix: use npm i --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index f0f3947..32cf99f 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -55,7 +55,7 @@ function sync { done # format everything that was rendered, only if package.json exists - (cd "$workdir"; if test -f package.json; then (npm ci; npm run format); else true; fi) + (cd "$workdir"; if test -f package.json; then (npm i; npm run format); else true; fi) # Copy contributing guide to docs if docs exist if [ -d "$workdir/docs/docs" ]; then From b7308052ea30fe45d46c47aae19285a2237fffb1 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 16 Jun 2022 21:20:32 +0200 Subject: [PATCH 047/164] fix: use legacy peer deps --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 32cf99f..50c64c5 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -55,7 +55,7 @@ function sync { done # format everything that was rendered, only if package.json exists - (cd "$workdir"; if test -f package.json; then (npm i; npm run format); else true; fi) + (cd "$workdir"; if test -f package.json; then (npm i --legacy-peer-deps; npm run format); else true; fi) # Copy contributing guide to docs if docs exist if [ -d "$workdir/docs/docs" ]; then From 0206ac31740d50920ac30c25209e5ecc20d11964 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 22 Jun 2022 03:02:55 -0500 Subject: [PATCH 048/164] chore: update dependencies and format (#151) --- .github/workflows/stale.yml | 10 +- .github/workflows/sync.yml | 8 +- .github/workflows/text-run.yml | 2 +- .prettierignore | 3 + CODE_OF_CONDUCT.md | 66 +++-- CONTRIBUTING.md | 202 +++++++++------ README.md | 37 +-- SECURITY.md | 11 +- community_hangouts.md | 230 ++++++++++-------- package-lock.json | 30 +-- package.json | 4 +- releases/kratos/0.5.0-alpha.1.md | 90 ++++--- saved_replies/circleci-blocking-merge.md | 3 +- saved_replies/cla-wrong-e-mail.md | 3 +- saved_replies/docs-update-all-versions.md | 3 +- saved_replies/mark-as-draft.md | 3 +- saved_replies/not-using-issue-template.md | 13 +- .../.github/workflows/release_tagger.yml | 2 +- .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 50 ++-- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 32 +-- .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 30 +-- .../repository/common/.github/config.yml | 2 +- .../.github/workflows/closed_references.yml | 6 +- .../common/.github/workflows/stale.yml | 10 +- templates/repository/common/ADOPTERS.md | 24 +- .../repository/common/CODE_OF_CONDUCT.md | 66 +++-- templates/repository/common/CONTRIBUTING.md | 212 +++++++++------- templates/repository/common/PROJECTS.md | 45 ++-- templates/repository/common/SECURITY.md | 11 +- .../library/.github/pull_request_template.md | 6 +- .../server/.github/pull_request_template.md | 6 +- .../server/.github/workflows/milestone.yml | 6 +- 32 files changed, 711 insertions(+), 515 deletions(-) create mode 100644 .prettierignore diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index f8657ac..702e037 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: 'Close Stale Issues' +name: "Close Stale Issues" on: workflow_dispatch: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: stale: @@ -17,8 +17,8 @@ jobs: stale-pr-message: | Thank you for opening this pull request. It appears that a request for e.g. information has not yet been completed. Therefore this issue will be automatically closed in 7 days, assuming that the proposed change is no longer required or has otherwise been resolved. - stale-issue-label: 'stale' - stale-pr-label: 'stale' - only-labels: 'needs more info' + stale-issue-label: "stale" + stale-pr-label: "stale" + only-labels: "needs more info" days-before-stale: 7 days-before-close: 7 diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 34d7809..df862b3 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -6,10 +6,10 @@ on: # action is triggered on push to the following paths push: paths: - - 'templates/**' - - 'scripts/sync*' - - 'package.json' - - '.github/workflows/sync.yml' + - "templates/**" + - "scripts/sync*" + - "package.json" + - ".github/workflows/sync.yml" branches: - master diff --git a/.github/workflows/text-run.yml b/.github/workflows/text-run.yml index 858217d..26fe38b 100644 --- a/.github/workflows/text-run.yml +++ b/.github/workflows/text-run.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '15' + node-version: "15" - run: npm ci - run: npm run text-run diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..c596dc2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +saved_replies +templates/repository/library/.github +templates/repository/server/.github diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index f9ab1ec..2351896 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,14 +2,17 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation -in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, -sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and +expression, level of experience, education, socio-economic status, nationality, +personal appearance, race, religion, or sexual identity and orientation. ## Our Standards -Examples of behavior that contributes to creating a positive environment include: +Examples of behavior that contributes to creating a positive environment +include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences @@ -19,43 +22,56 @@ Examples of behavior that contributes to creating a positive environment include Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or advances +- The use of sexualized language or imagery and unwelcome sexual attention or + advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment -- Publishing others' private information, such as a physical or electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and -fair corrective action in response to any instances of unacceptable behavior. +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and -other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other -behaviors that they deem inappropriate, threatening, offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. ## Scope -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its -community. Examples of representing a project or community include using an official project e-mail address, posting via an -official social media account, or acting as an appointed representative at an online or offline event. Representation of a project -may be further defined and clarified by project maintainers. +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at -office@ory.sh. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and -appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an -incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at office@ory.sh. All complaints will be +reviewed and investigated and will result in a response that is deemed necessary +and appropriate to the circumstances. The project team is obligated to maintain +confidentiality with regard to the reporter of an incident. Further details of +specific enforcement policies may be posted separately. -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions -as determined by other members of the project's leadership. +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org -For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2573cb7..1d7fae9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,35 +29,46 @@ https://github.com/ory/meta/blob/master/templates/repository/CONTRIBUTING.md ## Introduction -There are many ways in which you can contribute, beyond writing code. The goal of this document is to provide a high-level -overview of how you can get involved. +There are many ways in which you can contribute, beyond writing code. The goal +of this document is to provide a high-level overview of how you can get +involved. -_Please note_: We take ORY {{Project}}'s security and our users' trust very seriously. If you believe you have found a security -issue in ORY {{Project}}, please responsibly disclose by contacting us at security@ory.sh. +_Please note_: We take ORY {{Project}}'s security and our users' trust very +seriously. If you believe you have found a security issue in ORY {{Project}}, +please responsibly disclose by contacting us at security@ory.sh. -First: As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and -holidays. Please do not ever hesitate to ask a question or send a pull request. +First: As a potential contributor, your changes and ideas are welcome at any +hour of the day or night, weekdays, weekends, and holidays. Please do not ever +hesitate to ask a question or send a pull request. -If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. -The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't -want a wall of rules to get in the way of that. +If you are unsure, just ask or submit the issue or pull request anyways. You +won't be yelled at for giving it your best effort. The worst that can happen is +that you'll be politely asked to change something. We appreciate any sort of +contributions, and don't want a wall of rules to get in the way of that. -That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure -that your contribution won't clash or be obviated by ORY {{Project}}'s normal direction. A great way to do this is via the -[ORY Community](https://community.ory.sh/) or join the [ORY Chat](https://www.ory.sh/chat). +That said, if you want to ensure that a pull request is likely to be merged, +talk to us! You can find out our thoughts and ensure that your contribution +won't clash or be obviated by ORY {{Project}}'s normal direction. A great way to +do this is via the [ORY Community](https://community.ory.sh/) or join the +[ORY Chat](https://www.ory.sh/chat). ## FAQ -- I am new to the community. Where can I find the [ORY Community Code of Conduct?](CODE_OF_CONDUCT.md) +- I am new to the community. Where can I find the + [ORY Community Code of Conduct?](CODE_OF_CONDUCT.md) -- I have a question. Where can I get [answers to questions regarding ORY {{Project}}?](#communication) +- I have a question. Where can I get + [answers to questions regarding ORY {{Project}}?](#communication) -- I would like to contribute but I am not sure how. Are there [easy ways to contribute?](#how-can-i-contribute) +- I would like to contribute but I am not sure how. Are there + [easy ways to contribute?](#how-can-i-contribute) [Or good first issues?](https://github.com/search?l=&o=desc&q=label%3A%22help+wanted%22+label%3A%22good+first+issue%22+is%3Aopen+user%3Aory+user%3Aory-corp&s=updated&type=Issues) -- I want to talk to other ORY {{Project}} users. [How can I become a part of the community?](#communication) +- I want to talk to other ORY {{Project}} users. + [How can I become a part of the community?](#communication) -- I would like to know what I am agreeing to when I contribute to ORY {{Project}}. Does ORY have +- I would like to know what I am agreeing to when I contribute to ORY + {{Project}}. Does ORY have [a Contributors License Agreement?](https://cla-assistant.io/ory/) - I would like updates about new versions of ORY {{Project}}. @@ -68,98 +79,125 @@ that your contribution won't clash or be obviated by ORY {{Project}}'s normal di If you want to start contributing code right away, we have a [list of good first issues](https://github.com/ory/{{Project}}/labels/good%20first%20issue). -There are many other ways you can contribute without writing any code. Here are a few things you can do to help out: +There are many other ways you can contribute without writing any code. Here are +a few things you can do to help out: -- **Give us a star.** It may not seem like much, but it really makes a difference. This is something that everyone can do to help - out ORY {{Project}}. Github stars help the project gain visibility and stand out. +- **Give us a star.** It may not seem like much, but it really makes a + difference. This is something that everyone can do to help out ORY + {{Project}}. Github stars help the project gain visibility and stand out. -- **Join the community.** Sometimes helping people can be as easy as listening to their problems and offering a different - perspective. Join our Slack, have a look at discussions in the forum and take part in our weekly hangout. More info on this in - [Communication](#communication). +- **Join the community.** Sometimes helping people can be as easy as listening + to their problems and offering a different perspective. Join our Slack, have a + look at discussions in the forum and take part in our weekly hangout. More + info on this in [Communication](#communication). -- **Helping with open issues.** We have a lot of open issues for ORY {{Project}} and some of them may lack necessary information, - some are duplicates of older issues. You can help out by guiding people through the process of filling out the issue template, - asking for clarifying information, or pointing them to existing issues that match their description of the problem. +- **Helping with open issues.** We have a lot of open issues for ORY {{Project}} + and some of them may lack necessary information, some are duplicates of older + issues. You can help out by guiding people through the process of filling out + the issue template, asking for clarifying information, or pointing them to + existing issues that match their description of the problem. -- **Reviewing documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a - document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info on contributing to - documentation here. +- **Reviewing documentation changes.** Most documentation just needs a review + for proper spelling and grammar. If you think a document can be improved in + any way, feel free to hit the `edit` button at the top of the page. More info + on contributing to documentation here. -- **Help with tests.** Some pull requests may lack proper tests or test plans. These are needed for the change to be implemented - safely. +- **Help with tests.** Some pull requests may lack proper tests or test plans. + These are needed for the change to be implemented safely. ## Communication -We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask questions, discuss bugs and feature requests, talk to -other users of ORY, etc. +We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask +questions, discuss bugs and feature requests, talk to other users of ORY, etc. -We have a [forum](https://community.ory.sh/). This is a great place for in-depth discussions and lots of code examples, logs and -similar data. +We have a [forum](https://community.ory.sh/). This is a great place for in-depth +discussions and lots of code examples, logs and similar data. -You can also join our community hangout, if you want to speak to the ORY team directly or ask some questions. You can find more -info on the hangouts in [Slack](https://www.ory.sh/chat). +You can also join our community hangout, if you want to speak to the ORY team +directly or ask some questions. You can find more info on the hangouts in +[Slack](https://www.ory.sh/chat). -If you want to receive regular notifications about updates to ORY {{Project}}, consider joining the mailing list. We will _only_ -send you vital information on the projects that you are interested in. +If you want to receive regular notifications about updates to ORY {{Project}}, +consider joining the mailing list. We will _only_ send you vital information on +the projects that you are interested in. Also [follow us on twitter](https://twitter.com/orycorp). ## Contributing Code -Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue or -[in our chat](https://www.ory.sh/chat) before getting started to ensure your work is consistent with ORY {{Project}}'s roadmap and -architecture. +Unless you are fixing a known bug, we **strongly** recommend discussing it with +the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) +before getting started to ensure your work is consistent with ORY {{Project}}'s +roadmap and architecture. -All contributions are made via pull request. Note that **all patches from all contributors get reviewed**. After a pull request is -made other contributors will offer feedback, and if the patch passes review a maintainer will accept it with a comment. When pull -requests fail testing, authors are expected to update their pull requests to address the failures until the tests pass and the -pull request merges successfully. Look here for more info on the [Pull request procedure](#pull-request-procedure). +All contributions are made via pull request. Note that **all patches from all +contributors get reviewed**. After a pull request is made other contributors +will offer feedback, and if the patch passes review a maintainer will accept it +with a comment. When pull requests fail testing, authors are expected to update +their pull requests to address the failures until the tests pass and the pull +request merges successfully. Look here for more info on the +[Pull request procedure](#pull-request-procedure). -At least one review from a maintainer is required for all patches (even patches from maintainers). +At least one review from a maintainer is required for all patches (even patches +from maintainers). -Before your contributions can be merged you need to sign our [Contributor License Agreement](https://cla-assistant.io/ory/). +Before your contributions can be merged you need to sign our +[Contributor License Agreement](https://cla-assistant.io/ory/). -This agreement defines the terms under which your code is contributed to ORY. More specifically it declares that you have the -right to, and actually do, grant us the rights to use your contribution. You can see the Apache 2.0 license under which our -projects are published [here](https://github.com/ory/meta/blob/master/LICENSE). +This agreement defines the terms under which your code is contributed to ORY. +More specifically it declares that you have the right to, and actually do, grant +us the rights to use your contribution. You can see the Apache 2.0 license under +which our projects are published +[here](https://github.com/ory/meta/blob/master/LICENSE). -Reviewers should leave a "LGTM" comment once they are satisfied with the patch. If the patch was submitted by a maintainer with -write access, the pull request should be merged by the submitter after review. +Reviewers should leave a "LGTM" comment once they are satisfied with the patch. +If the patch was submitted by a maintainer with write access, the pull request +should be merged by the submitter after review. ## Documentation -Please provide documentation when changing, removing, or adding features. Documentation resides in the project's [docs](docs) -folder. Generate API and configuration reference documentation using `cd docs; npm run gen`. +Please provide documentation when changing, removing, or adding features. +Documentation resides in the project's [docs](docs) folder. Generate API and +configuration reference documentation using `cd docs; npm run gen`. For further instructions please head over to [docs/README.md](docs/README.md). ## Disclosing vulnerabilities -Please disclose vulnerabilities exclusively to [security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. +Please disclose vulnerabilities exclusively to +[security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. ## Code Style Please follow these guidelines when formatting source code: - Go code should match the output of `gofmt -s` and pass `golangci-lint run`. -- NodeJS and JavaScript code should be prettified using `npm run format` where appropriate. +- NodeJS and JavaScript code should be prettified using `npm run format` where + appropriate. ## Pull request procedure -To make a pull request, you will need a GitHub account; if you are unclear on this process, see GitHub's documentation on -[forking](https://help.github.com/articles/fork-a-repo) and [pull requests](https://help.github.com/articles/using-pull-requests). -Pull requests should be targeted at the `master` branch. Before creating a pull request, go through this checklist: +To make a pull request, you will need a GitHub account; if you are unclear on +this process, see GitHub's documentation on +[forking](https://help.github.com/articles/fork-a-repo) and +[pull requests](https://help.github.com/articles/using-pull-requests). Pull +requests should be targeted at the `master` branch. Before creating a pull +request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. -1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. -1. Run the full project test suite with the `go test ./...` (or equivalent) command and confirm that it passes. +1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local + changes against the `master` branch. +1. Run the full project test suite with the `go test ./...` (or equivalent) + command and confirm that it passes. 1. Run `gofmt -s` (if the project is written in Go). 1. Ensure that each commit has a subsystem prefix (ex: `controller:`). -Pull requests will be treated as "review requests," and maintainers will give feedback on the style and substance of the patch. +Pull requests will be treated as "review requests," and maintainers will give +feedback on the style and substance of the patch. -Normally, all pull requests must include tests that test your change. Occasionally, a change will be very difficult to test for. -In those cases, please include a note in your commit message explaining why. +Normally, all pull requests must include tests that test your change. +Occasionally, a change will be very difficult to test for. In those cases, +please include a note in your commit message explaining why. ### Working with Forks @@ -190,19 +228,25 @@ Now go to the project's GitHub Pull Request page and click "New pull request" ## Conduct -Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your -back. +Whether you are a regular contributor or a newcomer, we care about making this +community a safe place for you and we've got your back. -- We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, - disability, ethnicity, religion, or similar personal characteristic. -- Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. +- We are committed to providing a friendly, safe and welcoming environment for + all, regardless of gender, sexual orientation, disability, ethnicity, + religion, or similar personal characteristic. +- Please avoid using nicknames that might detract from a friendly, safe and + welcoming environment for all. - Be kind and courteous. There is no need to be mean or rude. -- We will exclude you from interaction if you insult, demean or harass anyone. In particular, we do not tolerate behavior that - excludes people in socially marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made - uncomfortable by a community member, please contact one of the channel ops or a member of the ORY {{Project}} core team - immediately. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome. - -We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, -feedback, or concerns [please let us know](https://www.ory.sh/chat). +- We will exclude you from interaction if you insult, demean or harass anyone. + In particular, we do not tolerate behavior that excludes people in socially + marginalized groups. +- Private harassment is also unacceptable. No matter who you are, if you feel + you have been or are being harassed or made uncomfortable by a community + member, please contact one of the channel ops or a member of the ORY + {{Project}} core team immediately. +- Likewise any spamming, trolling, flaming, baiting or other attention-stealing + behaviour is not welcome. + +We welcome discussion about creating a welcoming, safe, and productive +environment for the community. If you have any questions, feedback, or concerns +[please let us know](https://www.ory.sh/chat). diff --git a/README.md b/README.md index 9df7573..cca90b8 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,36 @@ # meta -A place for reusable code, templates, and documentation required for getting a repository in Ory working. +A place for reusable code, templates, and documentation required for getting a +repository in Ory working. ## Documentation ### Updating Templates -This repository contains templates for things like the software license, security policy, contributing guidelines, code of -conduct, and so on. +This repository contains templates for things like the software license, +security policy, contributing guidelines, code of conduct, and so on. -You can find the repository templates in [templates/repository](./templates/repository). Libraries (e.g. Dockertest) and servers -(e.g. Kratos) share templates from the [common](./templates/repository/common) directory. Additionally, servers copy files from -[server](./templates/repository/server) and libraries from the [library](./templates/repository/library) directory. +You can find the repository templates in +[templates/repository](./templates/repository). Libraries (e.g. Dockertest) and +servers (e.g. Kratos) share templates from the +[common](./templates/repository/common) directory. Additionally, servers copy +files from [server](./templates/repository/server) and libraries from the +[library](./templates/repository/library) directory. -To update the repositories simply make your changes. Once merged to master, they will be published using a GitHub Action. +To update the repositories simply make your changes. Once merged to master, they +will be published using a GitHub Action. ## Github Sync action -The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to synchronize all Ory repositories to a common -template, including README, CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero manual interaction. -Depending on repository type (server, library, action) specific templates can be copied as well. -The project names, links to documentation ect. are being substituted for each project in -[sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). -For more details please refer to the documentation within the [scripts](https://github.com/ory/meta/tree/master/scripts). For more -details on the workflow please refer to the documentation within +The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to +synchronize all Ory repositories to a common template, including README, +CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero +manual interaction. +Depending on repository type (server, library, action) specific templates can be +copied as well. +The project names, links to documentation ect. are being substituted for each +project in [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). +For more details please refer to the documentation within the +[scripts](https://github.com/ory/meta/tree/master/scripts). For more details on +the workflow please refer to the documentation within [sync.yml](https://github.com/ory/meta/blob/master/.github/workflows/sync.yml) diff --git a/SECURITY.md b/SECURITY.md index 8152c97..70f1ef4 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,8 +21,8 @@ https://github.com/ory/meta/blob/master/templates/repository/SECURITY.md ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible receiving such patches depend on the CVSS v3.0 -Rating: +We release patches for security vulnerabilities. Which versions are eligible +receiving such patches depend on the CVSS v3.0 Rating: | CVSS v3.0 | Supported Versions | | --------- | ----------------------------------------- | @@ -31,6 +31,7 @@ Rating: ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to **[security@ory.sh](mailto:security@ory.sh)**. You will receive a response -from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but -historically within a few days. +Please report (suspected) security vulnerabilities to +**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from +us within 48 hours. If the issue is confirmed, we will release a patch as soon +as possible depending on complexity but historically within a few days. diff --git a/community_hangouts.md b/community_hangouts.md index 047c3c1..9d0548f 100644 --- a/community_hangouts.md +++ b/community_hangouts.md @@ -10,16 +10,17 @@ ### Answer -Write a pull request that submits the organizational structure that could be part of Keto. It might be easier to ask for all the -logic to be supported in Keto. +Write a pull request that submits the organizational structure that could be +part of Keto. It might be easier to ask for all the logic to be supported in +Keto. -Look if Keto can support what you are looking for and if it does not support that then make a feature request. Easier to pull off -outside of Kratos. +Look if Keto can support what you are looking for and if it does not support +that then make a feature request. Easier to pull off outside of Kratos. ### Answer -It should be possible, it should be a feature in Oathkeeper. If it is not possible please open a feature request; it is a very -common/good use case. +It should be possible, it should be a feature in Oathkeeper. If it is not +possible please open a feature request; it is a very common/good use case. --- @@ -31,8 +32,9 @@ common/good use case. ### Answer -That is definitely something we are looking at. We need to figure out how to implement this safely though. It will be a lot of -work but it would be a very important feature for us to have. +That is definitely something we are looking at. We need to figure out how to +implement this safely though. It will be a lot of work but it would be a very +important feature for us to have. --- @@ -54,14 +56,15 @@ work but it would be a very important feature for us to have. ### Answer -We have extensive documentation on any breaking changes, if you sign up to the newsletter you will get notified every time there -is a new release. +We have extensive documentation on any breaking changes, if you sign up to the +newsletter you will get notified every time there is a new release. -We have elaborate descriptions of all changes in the newsletter, or on github. The changelogs are in the documentation and also on -github. Also with guides how to do the upgrade/migration. +We have elaborate descriptions of all changes in the newsletter, or on github. +The changelogs are in the documentation and also on github. Also with guides how +to do the upgrade/migration. -With helm charts its a manual process changing the version number at the moment. We are looking to automate this in the near -future. +With helm charts its a manual process changing the version number at the moment. +We are looking to automate this in the near future. [k8s issue #180](https://github.com/ory/k8s/issues/180) @@ -73,15 +76,17 @@ future. #### Do you have plans to offer support the open source, selfhosted deployments? -We have been using Oathkeeper & Kratos for Auth. We are interested in support, but our customers dont allow SaaS in this regard. +We have been using Oathkeeper & Kratos for Auth. We are interested in support, +but our customers dont allow SaaS in this regard. ### Answer -We will focus on the cloud offering, it is easy to scale, easier to support. But this request comes often, and we do want to help -companies in this position. +We will focus on the cloud offering, it is easy to scale, easier to support. But +this request comes often, and we do want to help companies in this position. -We do want to offer solutions there so we could provide you with support in the future. Best solution: Talk to -[jared](mailto:jared@ory.sh), figure out what you need and we will find a solution. +We do want to offer solutions there so we could provide you with support in the +future. Best solution: Talk to [jared](mailto:jared@ory.sh), figure out what you +need and we will find a solution. --- @@ -91,13 +96,15 @@ We do want to offer solutions there so we could provide you with support in the #### Is there a config to have Hydra respond to /api/hydra for example? -I am deploying Hydra in Docker in AWS. I cant configure it to respond to a specific URL, without route URL. +I am deploying Hydra in Docker in AWS. I cant configure it to respond to a +specific URL, without route URL. ### Answer Solution here is reverse proxy, like Oathkeeper. -If you do not use a reverse proxy, you have to do it with path rewrite currently. +If you do not use a reverse proxy, you have to do it with path rewrite +currently. --- @@ -107,16 +114,18 @@ If you do not use a reverse proxy, you have to do it with path rewrite currently ### Answer -All projects that are currently open source, will remain open source. We have a commitment to open source, that we still need to -publish. +All projects that are currently open source, will remain open source. We have a +commitment to open source, that we still need to publish. -We will not go down the path of ElasticSearch. The monetization strategy that we are following is running all the software as one -consistent product with alot of additional benefits as a cloud service. +We will not go down the path of ElasticSearch. The monetization strategy that we +are following is running all the software as one consistent product with alot of +additional benefits as a cloud service. -But the core building blocks will remain free and open source. As we use Linux and Kubernetes, we also use the ORY stack - which -is open source. +But the core building blocks will remain free and open source. As we use Linux +and Kubernetes, we also use the ORY stack - which is open source. -We are also planning on having a foundation of sorts, but this is still in planning. +We are also planning on having a foundation of sorts, but this is still in +planning. --- @@ -124,8 +133,8 @@ We are also planning on having a foundation of sorts, but this is still in plann ### Comment -Next big assignment for Patrick is implementation of Google Sansibar paper. This will allow us to deploy multi-region without -significant latency. +Next big assignment for Patrick is implementation of Google Sansibar paper. This +will allow us to deploy multi-region without significant latency. --- @@ -141,14 +150,17 @@ significant latency. ### Answer by Aeneas -So the original hydrator was more or less like an interim solution for the project and the idea was always to have a pipeline -where you do authentication, hydration, authorization and then mutation. +So the original hydrator was more or less like an interim solution for the +project and the idea was always to have a pipeline where you do authentication, +hydration, authorization and then mutation. -So you've probably looked into the configuration system for remote Json, for example, and I think its ultimately really not great -to generate Json. So we want to use JsonNet for all of the config stuff. And with the change we would also introduce a new part to -the pipeline, which would then be a dedicated hydrator because I think it makes a lot of sense to add. Basically you get the -requests and then authenticate, add context, check for permissions and then you take all of the data, massage it and put it into a -token or something. +So you've probably looked into the configuration system for remote Json, for +example, and I think its ultimately really not great to generate Json. So we +want to use JsonNet for all of the config stuff. And with the change we would +also introduce a new part to the pipeline, which would then be a dedicated +hydrator because I think it makes a lot of sense to add. Basically you get the +requests and then authenticate, add context, check for permissions and then you +take all of the data, massage it and put it into a token or something. --- @@ -160,16 +172,19 @@ token or something. ### Answer -The way we do release is slow because the pipelines sometimes a little bit flaky when it comes to releases as we do pre-releases. -So we do for example the pre-release where we see if all the pipelines are working, if the build is successful and if all the -tests are successful for the build pipeline, the binary in a Docker image ect. +The way we do release is slow because the pipelines sometimes a little bit flaky +when it comes to releases as we do pre-releases. So we do for example the +pre-release where we see if all the pipelines are working, if the build is +successful and if all the tests are successful for the build pipeline, the +binary in a Docker image ect. -If that works and once that passes all tests we do the proper release. So the fact that you're seeing the pre dot 0 release is a -very good sign because it means that we're working on it. Unfortunately the build didn't pass so so we will be trying to figure -out what's going on. +If that works and once that passes all tests we do the proper release. So the +fact that you're seeing the pre dot 0 release is a very good sign because it +means that we're working on it. Unfortunately the build didn't pass so so we +will be trying to figure out what's going on. -You can expect the release maybe in the next hours, definitely this week. It depends how difficult it is to figure out what's -going on. +You can expect the release maybe in the next hours, definitely this week. It +depends how difficult it is to figure out what's going on. --- @@ -179,18 +194,22 @@ going on. #### Is there any way to specify the schema_id to render the proper form inputs which belong to the specified schema? -For example I have an employee and customer schema and I would like to be able to specify the schema when registering a new -account from the selfservice endpoints or public API or anywhere else where I can create a user. +For example I have an employee and customer schema and I would like to be able +to specify the schema when registering a new account from the selfservice +endpoints or public API or anywhere else where I can create a user. -More info in [this thread](https://community.ory.sh/t/multiple-schemas-identities-seem-problematic/2251) +More info in +[this thread](https://community.ory.sh/t/multiple-schemas-identities-seem-problematic/2251) ### Answer -So for registration, it's a little bit difficult because assume you have customer schema and you have a admin schema. You don't -really want someone who signs up to be able to use the admin schema because they're not a regular user or customer. +So for registration, it's a little bit difficult because assume you have +customer schema and you have a admin schema. You don't really want someone who +signs up to be able to use the admin schema because they're not a regular user +or customer. -I think the best idea probably would be to create an issue in the Kratos repo and explain the use case and then we can discuss -some ideas. +I think the best idea probably would be to create an issue in the Kratos repo +and explain the use case and then we can discuss some ideas. Connected Issue: [kratos #765](https://github.com/ory/kratos/issues/765) @@ -206,74 +225,93 @@ Connected Issue: [kratos #765](https://github.com/ory/kratos/issues/765) ### Question -We had to get used to the terminology and what all the different systems do because there's quite a lot to the ecosystem. Could -you give me a broad overview? +We had to get used to the terminology and what all the different systems do +because there's quite a lot to the ecosystem. Could you give me a broad +overview? ### Answer -We started out with Hydra, which is the protocol layer for open authorization and open ID connect. And the reason we started there -was that we were doing a cloud native file sharing application at the time and it just got really difficult to interface with -Dropbox and Google Cloud and so on. The Go Community was not so so big back then and we just wanted to do something that would be +We started out with Hydra, which is the protocol layer for open authorization +and open ID connect. And the reason we started there was that we were doing a +cloud native file sharing application at the time and it just got really +difficult to interface with Dropbox and Google Cloud and so on. The Go Community +was not so so big back then and we just wanted to do something that would be good for Go developers to use. -But the deeper you get into open authorization and OAuth and OpenID Connect the more complex it gets, the terminology, the -structure of things, the processes or flows. So we ended up completely redoing Hydra two times just because the more we got into -it, the more we knew and learned. - -Then probably the best place to start is with Kratos, which is how you build your credentials, your username, password and all the -flows around that. - -Alot of companies don't need auth and open ID connect because they're not using cloud native services. So here Kratos is a great -fit. I think it's really an amazing utility, that we're soon going to offer as a cloud service also, by the way. Then Hydra I just -explained that, and also we have oathkeeper. Oathkeeper is an implementation of Google beyondcorp reverse proxy plus some rules -about how and why to access API, so when you use Json web tokens against an API for OAuth, there's a number of rules etc. It could -be in the payload or it could be just general rules about API access that you want to implement, so that's a zero trust API access -infrastructure. - -And last but not least there are different models out there for role-based access management. For instance ORY Keto is an -implementation basically mimicking the AWS IAM. And now if you look at the newest sort of PR in the Keto project we are tackling -this at a much bigger level and implementing or trying to implement something that Google calls Zanzibar, which is a more sort of -very low latency access management and role-based control system. So you write the rules and we basically create an infrastructure -that lets you manage that at planet scale. +But the deeper you get into open authorization and OAuth and OpenID Connect the +more complex it gets, the terminology, the structure of things, the processes or +flows. So we ended up completely redoing Hydra two times just because the more +we got into it, the more we knew and learned. + +Then probably the best place to start is with Kratos, which is how you build +your credentials, your username, password and all the flows around that. + +Alot of companies don't need auth and open ID connect because they're not using +cloud native services. So here Kratos is a great fit. I think it's really an +amazing utility, that we're soon going to offer as a cloud service also, by the +way. Then Hydra I just explained that, and also we have oathkeeper. Oathkeeper +is an implementation of Google beyondcorp reverse proxy plus some rules about +how and why to access API, so when you use Json web tokens against an API for +OAuth, there's a number of rules etc. It could be in the payload or it could be +just general rules about API access that you want to implement, so that's a zero +trust API access infrastructure. + +And last but not least there are different models out there for role-based +access management. For instance ORY Keto is an implementation basically +mimicking the AWS IAM. And now if you look at the newest sort of PR in the Keto +project we are tackling this at a much bigger level and implementing or trying +to implement something that Google calls Zanzibar, which is a more sort of very +low latency access management and role-based control system. So you write the +rules and we basically create an infrastructure that lets you manage that at +planet scale. --- ### Question -We are reading that jobs in Kratos are not being encouraged anymore. Why is that? +We are reading that jobs in Kratos are not being encouraged anymore. Why is +that? ### Answer -The reason for that is it's Hydra uses a special flavor of jobs before you get to the API. The reason for that is to obfuscate -some information and also make it more compatible with some of the other security approaches we have including oathkeeper, but -when it's through the API it then turns into a normal Json web token. So these are Open Standards, but they give you a lot of, -let's say flexibility, especially on how you want to configure the payload. +The reason for that is it's Hydra uses a special flavor of jobs before you get +to the API. The reason for that is to obfuscate some information and also make +it more compatible with some of the other security approaches we have including +oathkeeper, but when it's through the API it then turns into a normal Json web +token. So these are Open Standards, but they give you a lot of, let's say +flexibility, especially on how you want to configure the payload. -nd they have a very simple structure, there's a record for how it's been made, what algorithm the payload uses and the signature -and we're not going to stray far away from that at all because that's how you guarantee interoperability amongst different -systems. So we do take some liberties within Hydra of making those tokens as it's called "ORY flavoured" until they get to the -API. +nd they have a very simple structure, there's a record for how it's been made, +what algorithm the payload uses and the signature and we're not going to stray +far away from that at all because that's how you guarantee interoperability +amongst different systems. So we do take some liberties within Hydra of making +those tokens as it's called "ORY flavoured" until they get to the API. -There's also some situations where it's not recommendable to use jobs. There's actually lots of situations just because it's a new -area and it's emerging. And you know, there is not enough implementation experience with it. +There's also some situations where it's not recommendable to use jobs. There's +actually lots of situations just because it's a new area and it's emerging. And +you know, there is not enough implementation experience with it. -So if you have architectural questions and you want to ask them, you can do that an issue or something else but be confident that -we've had tons of conversations about this and the implementation of Hydra is now over five years old. +So if you have architectural questions and you want to ask them, you can do that +an issue or something else but be confident that we've had tons of conversations +about this and the implementation of Hydra is now over five years old. --- ### Question -Our main fear is that you guys might be closing or changing all the Open Standards to some closed standard of security -authorization. +Our main fear is that you guys might be closing or changing all the Open +Standards to some closed standard of security authorization. ### Answer by Thomas -We're not interested in violating those standards actually in any way because that's the whole basis of our work too. I mean the -IEEE standard and the IETF standard and the w3c standard are our standards. That doesn't mean that the ORY projects implement -everything and by the way we implement a lot of things based on how companies are using these things, but when we implement it it -is exactly in accordance with the standard. And the ORY open source projects too are the codebase from that we build our products, -so we are relying on them to stay open source. +We're not interested in violating those standards actually in any way because +that's the whole basis of our work too. I mean the IEEE standard and the IETF +standard and the w3c standard are our standards. That doesn't mean that the ORY +projects implement everything and by the way we implement a lot of things based +on how companies are using these things, but when we implement it it is exactly +in accordance with the standard. And the ORY open source projects too are the +codebase from that we build our products, so we are relying on them to stay open +source. ## Comments diff --git a/package-lock.json b/package-lock.json index 0fe16dc..52ca7a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,9 @@ "name": "meta", "version": "1.0.0", "devDependencies": { - "ory-prettier-styles": "1.2.0", - "prettier": "2.6.2", - "text-runner": "^5.0.0" + "ory-prettier-styles": "1.3.0", + "prettier": "2.7.1", + "text-runner": "5.0.1" } }, "node_modules/@babel/code-frame": { @@ -891,9 +891,9 @@ } }, "node_modules/ory-prettier-styles": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.2.0.tgz", - "integrity": "sha512-0kt+p6sy55XGtLkgcy4LC0vjOrRL3GbkJ8y95Ad7biguWWX/83w4N8ILFo0kJb8/CN9K4LuM51gsN5GdAuWcWg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", + "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", "dev": true }, "node_modules/p-cancelable": { @@ -936,9 +936,9 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -1965,9 +1965,9 @@ } }, "ory-prettier-styles": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.2.0.tgz", - "integrity": "sha512-0kt+p6sy55XGtLkgcy4LC0vjOrRL3GbkJ8y95Ad7biguWWX/83w4N8ILFo0kJb8/CN9K4LuM51gsN5GdAuWcWg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", + "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", "dev": true }, "p-cancelable": { @@ -2004,9 +2004,9 @@ } }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "ps-tree": { diff --git a/package.json b/package.json index 6183ec5..67e6b5a 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "url": "git+https://github.com/ory/meta.git" }, "devDependencies": { - "ory-prettier-styles": "1.2.0", - "prettier": "2.6.2", + "ory-prettier-styles": "1.3.0", + "prettier": "2.7.1", "text-runner": "5.0.1" } } diff --git a/releases/kratos/0.5.0-alpha.1.md b/releases/kratos/0.5.0-alpha.1.md index 7c14d95..a0de707 100644 --- a/releases/kratos/0.5.0-alpha.1.md +++ b/releases/kratos/0.5.0-alpha.1.md @@ -1,12 +1,15 @@ Live long and prosper! -The ORY team and the fabulous ORY Community is proud to present the next ORY Kratos iteration! +The ORY team and the fabulous ORY Community is proud to present the next ORY +Kratos iteration! -ORY Kratos is now capable of handling native iOS, Android, Windows, and macOS login, registration, settings, recovery, and -verification flows. And there is a reference React Native application that you can find on +ORY Kratos is now capable of handling native iOS, Android, Windows, and macOS +login, registration, settings, recovery, and verification flows. And there is a +reference React Native application that you can find on [GitHub](http://github.com/ory/kratos-selfservice-ui-react-native). -We co-released our reference React Native application which acts as a reference on implementing these flows: +We co-released our reference React Native application which acts as a reference +on implementing these flows: ![Registration](http://ory.sh/images/newsletter/kratos-0.5.0/registration-screen.png) @@ -14,52 +17,70 @@ We co-released our reference React Native application which acts as a reference ![Settings](http://ory.sh/images/newsletter/kratos-0.5.0/settings-screen.png) -In total, almost 1200 files were changed in about 480 commits. WOW! While you can find a list of all changes in the changelist -below, the following are the features we are proud of: +In total, almost 1200 files were changed in about 480 commits. WOW! While you +can find a list of all changes in the changelist below, the following are the +features we are proud of: -- We renamed login, registration, ... requests to "flows" consistently across the code base, APIs, and data storage: +- We renamed login, registration, ... requests to "flows" consistently across + the code base, APIs, and data storage: - Initiate a login, registration, ... flow; - Fetch a login, registration, ... flow; and - - Complete a login, registration, ... flow using a login flow method such as "Log in with username and password". + - Complete a login, registration, ... flow using a login flow method such as + "Log in with username and password". -- All self-service flows are now capable of handling API-based requests that do not originate from browsers such as Chrome. This - is set groundwork for handling native flows named above! +- All self-service flows are now capable of handling API-based requests that do + not originate from browsers such as Chrome. This is set groundwork for + handling native flows named above! -- The self service documentation has been refactored and simplified. We added code samples, screenshots, payloads, and curl - commands to make things easier and clearer to understand. There are new video guides to help the community get things done - faster! Just slam that like button please! +- The self service documentation has been refactored and simplified. We added + code samples, screenshots, payloads, and curl commands to make things easier + and clearer to understand. There are new video guides to help the community + get things done faster! Just slam that like button please! -- We added documentation for rotating important secrets such as the cookie and session secrets. +- We added documentation for rotating important secrets such as the cookie and + session secrets. -- We removed the need for reverse proxies by adding the ability to change the ORY Kratos Session Cookie domain and path! The - [kratos-selfservice-ui-node](https://github.com/ory/kratos-selfservice-ui-node) reference implementation no longer requires HTTP - Request piping which greatly simplifies the network layout and codebase! +- We removed the need for reverse proxies by adding the ability to change the + ORY Kratos Session Cookie domain and path! The + [kratos-selfservice-ui-node](https://github.com/ory/kratos-selfservice-ui-node) + reference implementation no longer requires HTTP Request piping which greatly + simplifies the network layout and codebase! -- The ORY Kratos CLI is now capable of managing identities with an interface that works almost like the much loved Docker CLI! +- The ORY Kratos CLI is now capable of managing identities with an interface + that works almost like the much loved Docker CLI! - Admins can now initiate account recovery for identities. -- We even refactored Email verification and account recovery. It is now possible to add additional strategies e.g. recovery codes - in the future, greatly increasing the feature set and security capabilities of future ORY Kratos versions! +- We even refactored Email verification and account recovery. It is now possible + to add additional strategies e.g. recovery codes in the future, greatly + increasing the feature set and security capabilities of future ORY Kratos + versions! -- Lookup to 'Have I Been Pwnd' is no longer a hard requirement, allowing registration processes to complete when the service is - unavailable or the network is slow. +- Lookup to 'Have I Been Pwnd' is no longer a hard requirement, allowing + registration processes to complete when the service is unavailable or the + network is slow. -- We contributed several issues and features in upstream projects such as justinas/nosurf, gobuffalo/pop, and many more! +- We contributed several issues and features in upstream projects such as + justinas/nosurf, gobuffalo/pop, and many more! -- We upgraded the automation and build pipeline to support cross-compilation of CGO with Go 1.15+. +- We upgraded the automation and build pipeline to support cross-compilation of + CGO with Go 1.15+. -- Fetching flows no longer requires CSRF cookies to be set, improving the developer experience while not compromising security! +- Fetching flows no longer requires CSRF cookies to be set, improving the + developer experience while not compromising security! -- ORY Kratos now has ORY Kratos Session Cookies that set in the HTTP Cookie header, and ORY Kratos Session Tokens that are set as - a HTTP Bearer Authorization token or the `X-Session-Token` HTTP Header. +- ORY Kratos now has ORY Kratos Session Cookies that set in the HTTP Cookie + header, and ORY Kratos Session Tokens that are set as a HTTP Bearer + Authorization token or the `X-Session-Token` HTTP Header. -Additionally we just exterminated tons of bugs, added tests, improved documentation, and much much more. Please note that the cost -of all this innovation and collaboration is breaking changes. The details for the individual breaking changes is the changelog -below. +Additionally we just exterminated tons of bugs, added tests, improved +documentation, and much much more. Please note that the cost of all this +innovation and collaboration is breaking changes. The details for the individual +breaking changes is the changelog below. -We would like to thank all ORY Community members who contributed towards this release (in no particular order): +We would like to thank all ORY Community members who contributed towards this +release (in no particular order): - [kevgo](https://github.com/kevgo) - [NickUfer](https://github.com/NickUfer) @@ -75,6 +96,7 @@ We would like to thank all ORY Community members who contributed towards this re - [aschepis](https://github.com/aschepis) - [jakhog](https://github.com/jakhog) -Have fun exploring the new release. We hope you like it! If you haven't already, join the -[ORY Community Slack](http://slack.ory.sh) where we hold weekly community hangouts via video chat and answer your questions, -exchange ideas, and present new developments! +Have fun exploring the new release. We hope you like it! If you haven't already, +join the [ORY Community Slack](http://slack.ory.sh) where we hold weekly +community hangouts via video chat and answer your questions, exchange ideas, and +present new developments! diff --git a/saved_replies/circleci-blocking-merge.md b/saved_replies/circleci-blocking-merge.md index e1a7929..04029ae 100644 --- a/saved_replies/circleci-blocking-merge.md +++ b/saved_replies/circleci-blocking-merge.md @@ -1,5 +1,4 @@ -Unfortunately, for some reason, the CircleCI tests are not running. Do you maybe follow your/a fork of this repository on -CircleCI? If so, you need to unsubscribe / unwatch from that CircleCI project. Then, make another push to your branch using: +Unfortunately, for some reason, the CircleCI tests are not running. Do you maybe follow your/a fork of this repository on CircleCI? If so, you need to unsubscribe / unwatch from that CircleCI project. Then, make another push to your branch using: ``` $ git commit --amend --allow-empty diff --git a/saved_replies/cla-wrong-e-mail.md b/saved_replies/cla-wrong-e-mail.md index d95186f..a3c6367 100644 --- a/saved_replies/cla-wrong-e-mail.md +++ b/saved_replies/cla-wrong-e-mail.md @@ -4,8 +4,7 @@ Thank you, this looks great! It looks like the CLA bot is not properly detecting $ git commit --amend --author="Author Name " ``` -Ensure that `Author Name` is replaced with your GitHub username (e.g. `aeneasr`) and that the email address is replaced with the -email address you have set up in GitHub (e.g. `3372410+aeneasr@users.noreply.github.com`): +Ensure that `Author Name` is replaced with your GitHub username (e.g. `aeneasr`) and that the email address is replaced with the email address you have set up in GitHub (e.g. `3372410+aeneasr@users.noreply.github.com`): ``` $ git commit --amend --author="aeneasr <3372410+aeneasr@users.noreply.github.com>" diff --git a/saved_replies/docs-update-all-versions.md b/saved_replies/docs-update-all-versions.md index a358070..2201680 100644 --- a/saved_replies/docs-update-all-versions.md +++ b/saved_replies/docs-update-all-versions.md @@ -1,5 +1,4 @@ -Thank you very much for your contribution to the documentation! Due to the way [Docusaurus](https://docusaurus.io) versioning -works, you need to make the changes in two locations: +Thank you very much for your contribution to the documentation! Due to the way [Docusaurus](https://docusaurus.io) versioning works, you need to make the changes in two locations: - `docs/versioned_docs/version-v{version}/path/to/file` - `docs/docs/path/to/file` diff --git a/saved_replies/mark-as-draft.md b/saved_replies/mark-as-draft.md index 33195bc..fdac93f 100644 --- a/saved_replies/mark-as-draft.md +++ b/saved_replies/mark-as-draft.md @@ -1,6 +1,5 @@ While the PR is being worked on I will mark it as a draft. That declutters our review backlog :) -Once you're done with your changes and would like someone to review them, mark the PR as ready and request a review from one of -the maintainers. +Once you're done with your changes and would like someone to review them, mark the PR as ready and request a review from one of the maintainers. Thank you! diff --git a/saved_replies/not-using-issue-template.md b/saved_replies/not-using-issue-template.md index edea528..03b92e2 100644 --- a/saved_replies/not-using-issue-template.md +++ b/saved_replies/not-using-issue-template.md @@ -1,17 +1,12 @@ Thank you for contributing to this repository by creating an issue! -Unfortunately, your issue lacks vital information, such as log files, the error message, the software version, your configuration -or other pieces of the puzzle. +Unfortunately, your issue lacks vital information, such as log files, the error message, the software version, your configuration or other pieces of the puzzle. -Please also ensure that your issue is appropriately formatted. If you do not know how to write markdown, you can find help -[here](https://guides.github.com/features/mastering-markdown/). +Please also ensure that your issue is appropriately formatted. If you do not know how to write markdown, you can find help [here](https://guides.github.com/features/mastering-markdown/). -Helping you with your problem is only possible if you share this information, and it will save a lot of time of back and forth on -your as well as our end! +Helping you with your problem is only possible if you share this information, and it will save a lot of time of back and forth on your as well as our end! -For this reason, this repository uses [issue templates](../tree/master/.github/ISSUE_TEMPLATE) which you can select when pressing -"New issue". Please use one of those issue templates to fill in the required information. You can either create a new issue for -this purpose and close this one, or leave a comment. +For this reason, this repository uses [issue templates](../tree/master/.github/ISSUE_TEMPLATE) which you can select when pressing "New issue". Please use one of those issue templates to fill in the required information. You can either create a new issue for this purpose and close this one, or leave a comment. > Do not edit the original post as we will not be notified when you do so. diff --git a/templates/repository/action/.github/workflows/release_tagger.yml b/templates/repository/action/.github/workflows/release_tagger.yml index f37d4ad..11eb443 100644 --- a/templates/repository/action/.github/workflows/release_tagger.yml +++ b/templates/repository/action/.github/workflows/release_tagger.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: Actions-R-Us/actions-tagger@latest env: - GITHUB_TOKEN: '${{ github.token }}' + GITHUB_TOKEN: "${{ github.token }}" with: publish_latest_tag: true diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 8f5222e..a3458f2 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -1,17 +1,17 @@ -description: 'Create a bug report' +description: "Create a bug report" labels: - bug -name: 'Bug Report' +name: "Bug Report" body: - attributes: value: "Thank you for taking the time to fill out this bug report!\n" type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + "I could not find a solution in the existing issues, docs, nor + discussions." required: true - label: "I agree to follow this project's [Code of @@ -22,18 +22,18 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + "This issue affects my [Ory Cloud](https://www.ory.sh/) project." - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + "I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes - attributes: - description: 'A clear and concise description of what the bug is.' - label: 'Describe the bug' - placeholder: 'Tell us what you see!' + description: "A clear and concise description of what the bug is." + label: "Describe the bug" + placeholder: "Tell us what you see!" id: describe-bug type: textarea validations: @@ -47,17 +47,17 @@ body: 1. Run `docker run ....` 2. Make API Request to with `curl ...` 3. Request fails with response: `{"some": "error"}` - label: 'Reproducing the bug' + label: "Reproducing the bug" id: reproduce-bug type: textarea validations: required: true - attributes: description: - 'Please copy and paste any relevant log output. This will be + "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information' - label: 'Relevant log output' + redact any sensitive information" + label: "Relevant log output" render: shell placeholder: | log=error .... @@ -65,10 +65,10 @@ body: type: textarea - attributes: description: - 'Please copy and paste any relevant configuration. This will be + "Please copy and paste any relevant configuration. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information!' - label: 'Relevant configuration' + redact any sensitive information!" + label: "Relevant configuration" render: yml placeholder: | server: @@ -77,14 +77,14 @@ body: id: config type: textarea - attributes: - description: 'What version of our software are you running?' + description: "What version of our software are you running?" label: Version id: version type: input validations: required: true - attributes: - label: 'On which operating system are you observing this issue?' + label: "On which operating system are you observing this issue?" options: - Ory Cloud - macOS @@ -95,19 +95,19 @@ body: id: operating-system type: dropdown - attributes: - label: 'In which environment are you deploying?' + label: "In which environment are you deploying?" options: - Ory Cloud - Docker - - 'Docker Compose' - - 'Kubernetes with Helm' + - "Docker Compose" + - "Kubernetes with Helm" - Kubernetes - Binary - Other id: deployment type: dropdown - attributes: - description: 'Add any other context about the problem here.' + description: "Add any other context about the problem here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 309d1d7..e657ee7 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,8 +1,8 @@ description: - 'A design document is needed for non-trivial changes to the code base.' + "A design document is needed for non-trivial changes to the code base." labels: - rfc -name: 'Design Document' +name: "Design Document" body: - attributes: value: | @@ -18,11 +18,11 @@ body: after code reviews, and your pull requests will be merged faster. type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + "I could not find a solution in the existing issues, docs, nor + discussions." required: true - label: "I agree to follow this project's [Code of @@ -33,18 +33,18 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + "This issue affects my [Ory Cloud](https://www.ory.sh/) project." - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + "I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes - attributes: description: | This section gives the reader a very rough overview of the landscape in which the new system is being built and what is actually being built. This isn’t a requirements doc. Keep it succinct! The goal is that readers are brought up to speed but some previous knowledge can be assumed and detailed info can be linked to. This section should be entirely focused on objective background facts. - label: 'Context and scope' + label: "Context and scope" id: scope type: textarea validations: @@ -53,7 +53,7 @@ body: - attributes: description: | A short list of bullet points of what the goals of the system are, and, sometimes more importantly, what non-goals are. Note, that non-goals aren’t negated goals like “The system shouldn’t crash”, but rather things that could reasonably be goals, but are explicitly chosen not to be goals. A good example would be “ACID compliance”; when designing a database, you’d certainly want to know whether that is a goal or non-goal. And if it is a non-goal you might still select a solution that provides it, if it doesn’t introduce trade-offs that prevent achieving the goals. - label: 'Goals and non-goals' + label: "Goals and non-goals" id: goals type: textarea validations: @@ -65,7 +65,7 @@ body: The design doc is the place to write down the trade-offs you made in designing your software. Focus on those trade-offs to produce a useful document with long-term value. That is, given the context (facts), goals and non-goals (requirements), the design doc is the place to suggest solutions and show why a particular solution best satisfies those goals. The point of writing a document over a more formal medium is to provide the flexibility to express the problem set at hand in an appropriate manner. Because of this, there is no explicit guidance for how to actually describe the design. - label: 'The design' + label: "The design" id: design type: textarea validations: @@ -74,21 +74,21 @@ body: - attributes: description: | If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead focus on the parts that are relevant to the design and its trade-offs. - label: 'APIs' + label: "APIs" id: apis type: textarea - attributes: description: | Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead focus on the parts that are relevant to the design and its trade-offs. - label: 'Data storage' + label: "Data storage" id: persistence type: textarea - attributes: description: | Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the implementability of the design. - label: 'Code and pseudo-code' + label: "Code and pseudo-code" id: pseudocode type: textarea @@ -101,7 +101,7 @@ body: On the other end are systems where the possible solutions are very well defined, but it isn’t at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn’t designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. In this situation you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are really great, and hence such a document should focus on selecting the best way given all identified trade-offs. - label: 'Degree of constraint' + label: "Degree of constraint" id: constrait type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index e173ba2..0e48be3 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,8 +1,8 @@ description: - 'Suggest an idea for this project without a plan for implementation' + "Suggest an idea for this project without a plan for implementation" labels: - feat -name: 'Feature Request' +name: "Feature Request" body: - attributes: value: | @@ -11,11 +11,11 @@ body: If you already have a plan to implement a feature or a change, please create a [design document](https://github.com/aeneasr/gh-template-test/issues/new?assignees=&labels=rfc&template=DESIGN-DOC.yml) instead if the change is non-trivial! type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + "I could not find a solution in the existing issues, docs, nor + discussions." required: true - label: "I agree to follow this project's [Code of @@ -26,18 +26,18 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - 'This issue affects my [Ory Cloud](https://www.ory.sh/) project.' + "This issue affects my [Ory Cloud](https://www.ory.sh/) project." - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53).' + "I am signed up to the [Ory Security Patch + Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes - attributes: description: - 'Is your feature request related to a problem? Please describe.' - label: 'Describe your problem' + "Is your feature request related to a problem? Please describe." + label: "Describe your problem" placeholder: "A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]" @@ -50,20 +50,20 @@ body: Describe the solution you'd like placeholder: | A clear and concise description of what you want to happen. - label: 'Describe your ideal solution' + label: "Describe your ideal solution" id: solution type: textarea validations: required: true - attributes: description: "Describe alternatives you've considered" - label: 'Workarounds or alternatives' + label: "Workarounds or alternatives" id: alternatives type: textarea validations: required: true - attributes: - description: 'What version of our software are you running?' + description: "What version of our software are you running?" label: Version id: version type: input @@ -71,7 +71,7 @@ body: required: true - attributes: description: - 'Add any other context or screenshots about the feature request here.' + "Add any other context or screenshots about the feature request here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml index 0d121fe..ea33569 100644 --- a/templates/repository/common/.github/config.yml +++ b/templates/repository/common/.github/config.yml @@ -1,3 +1,3 @@ todo: - keyword: '@todo' + keyword: "@todo" label: todo diff --git a/templates/repository/common/.github/workflows/closed_references.yml b/templates/repository/common/.github/workflows/closed_references.yml index ebafc8a..2789ac4 100644 --- a/templates/repository/common/.github/workflows/closed_references.yml +++ b/templates/repository/common/.github/workflows/closed_references.yml @@ -2,13 +2,13 @@ name: Closed Reference Notifier on: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" workflow_dispatch: inputs: issueLimit: description: Max. number of issues to create required: true - default: '5' + default: "5" jobs: find_closed_references: @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: - node-version: '14' + node-version: "14" - uses: ory/closed-reference-notifier@v1 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index 395cb69..eb36db1 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: 'Close Stale Issues' +name: "Close Stale Issues" on: workflow_dispatch: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: stale: @@ -35,10 +35,10 @@ jobs: Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you! Thank you 🙏✌️ - stale-issue-label: 'stale' - exempt-issue-labels: 'bug,blocking,docs,backlog' + stale-issue-label: "stale" + exempt-issue-labels: "bug,blocking,docs,backlog" days-before-stale: 365 days-before-close: 30 exempt-milestones: true exempt-assignees: true - only-pr-labels: 'stale' + only-pr-labels: "stale" diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 5428946..d109c0d 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -1,16 +1,20 @@ -The Ory community stands on the shoulders of individuals, companies, and maintainers. We thank everyone involved - from submitting -bug reports and feature requests, to contributing patches, to sponsoring our work. Our community is 1000+ strong and growing -rapidly. The Ory stack protects 16.000.000.000+ API requests every month with over 250.000+ active service nodes. We would have +The Ory community stands on the shoulders of individuals, companies, and +maintainers. We thank everyone involved - from submitting bug reports and +feature requests, to contributing patches, to sponsoring our work. Our community +is 1000+ strong and growing rapidly. The Ory stack protects 16.000.000.000+ API +requests every month with over 250.000+ active service nodes. We would have never been able to achieve this without each and everyone of you! -The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our -ecosystem. _If you think that your company deserves a spot here, reach out to +The following list represents companies that have accompanied us along the way +and that have made outstanding contributions to our ecosystem. _If you think +that your company deserves a spot here, reach out to office-muc@ory.sh now_! -**Please consider giving back by becoming a sponsor of our open source work on Patreon -or Open Collective.** +**Please consider giving back by becoming a sponsor of our open source work on +Patreon or +Open Collective.**
@@ -177,8 +181,10 @@ as well as all of our backers -and past & current supporters (in alphabetical order) on [Patreon](https://www.patreon.com/_ory): Alexander Alimovs, Billy, Chancy -Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, TheCrealm. +and past & current supporters (in alphabetical order) on +[Patreon](https://www.patreon.com/_ory): Alexander Alimovs, Billy, Chancy +Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, +TheCrealm. \* Uses one of Ory's major projects in production. diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index f9ab1ec..2351896 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -2,14 +2,17 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation -in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, -sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and +expression, level of experience, education, socio-economic status, nationality, +personal appearance, race, religion, or sexual identity and orientation. ## Our Standards -Examples of behavior that contributes to creating a positive environment include: +Examples of behavior that contributes to creating a positive environment +include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences @@ -19,43 +22,56 @@ Examples of behavior that contributes to creating a positive environment include Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or advances +- The use of sexualized language or imagery and unwelcome sexual attention or + advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment -- Publishing others' private information, such as a physical or electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and -fair corrective action in response to any instances of unacceptable behavior. +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and -other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other -behaviors that they deem inappropriate, threatening, offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. ## Scope -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its -community. Examples of representing a project or community include using an official project e-mail address, posting via an -official social media account, or acting as an appointed representative at an online or offline event. Representation of a project -may be further defined and clarified by project maintainers. +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at -office@ory.sh. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and -appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an -incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at office@ory.sh. All complaints will be +reviewed and investigated and will result in a response that is deemed necessary +and appropriate to the circumstances. The project team is obligated to maintain +confidentiality with regard to the reporter of an incident. Further details of +specific enforcement policies may be posted separately. -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions -as determined by other members of the project's leadership. +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org -For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 950792f..c57b0b2 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -28,37 +28,45 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING ## Introduction -There are many ways in which you can contribute, beyond writing code. The goal of this document is to provide a high-level -overview of how you can get involved. - -_Please note_: We take Ory $PROJECT's security and our users' trust very seriously. If you believe you have found a security issue -in Ory $PROJECT, please responsibly disclose by contacting us at security@ory.sh. - -First: As a potential contributor, your changes and ideas are welcome at any hour of the day or night, weekdays, weekends, and -holidays. Please do not ever hesitate to ask a question or send a pull request. - -If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. -The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't -want a wall of rules to get in the way of that. - -That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure -that your contribution won't clash or be obviated by Ory +There are many ways in which you can contribute, beyond writing code. The goal +of this document is to provide a high-level overview of how you can get +involved. + +_Please note_: We take Ory $PROJECT's security and our users' trust very +seriously. If you believe you have found a security issue in Ory $PROJECT, +please responsibly disclose by contacting us at security@ory.sh. + +First: As a potential contributor, your changes and ideas are welcome at any +hour of the day or night, weekdays, weekends, and holidays. Please do not ever +hesitate to ask a question or send a pull request. + +If you are unsure, just ask or submit the issue or pull request anyways. You +won't be yelled at for giving it your best effort. The worst that can happen is +that you'll be politely asked to change something. We appreciate any sort of +contributions, and don't want a wall of rules to get in the way of that. + +That said, if you want to ensure that a pull request is likely to be merged, +talk to us! You can find out our thoughts and ensure that your contribution +won't clash or be obviated by Ory $PROJECT's normal direction. A great way to do this is via -[Ory $PROJECT Discussions]($DISCUSSIONS) or the -[Ory Chat](https://www.ory.sh/chat). +[Ory $PROJECT Discussions]($DISCUSSIONS) +or the [Ory Chat](https://www.ory.sh/chat). ## FAQ - I am new to the community. Where can I find the [Ory Community Code of Conduct?](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md) -- I have a question. Where can I get [answers to questions regarding Ory $PROJECT?](#communication) +- I have a question. Where can I get + [answers to questions regarding Ory $PROJECT?](#communication) -- I would like to contribute but I am not sure how. Are there [easy ways to contribute?](#how-can-i-contribute) +- I would like to contribute but I am not sure how. Are there + [easy ways to contribute?](#how-can-i-contribute) [Or good first issues?](https://github.com/search?l=&o=desc&q=label%3A%22help+wanted%22+label%3A%22good+first+issue%22+is%3Aopen+user%3Aory+user%3Aory-corp&s=updated&type=Issues) -- I want to talk to other Ory $PROJECT users. [How can I become a part of the community?](#communication) +- I want to talk to other Ory $PROJECT users. + [How can I become a part of the community?](#communication) - I would like to know what I am agreeing to when I contribute to Ory $PROJECT. @@ -73,63 +81,80 @@ do this is via If you want to start contributing code right away, we have a [list of good first issues](https://github.com/$REPOSITORY/labels/good%20first%20issue). -There are many other ways you can contribute without writing any code. Here are a few things you can do to help out: +There are many other ways you can contribute without writing any code. Here are +a few things you can do to help out: -- **Give us a star.** It may not seem like much, but it really makes a difference. This is something that everyone can do to help - out Ory $PROJECT. Github stars help the project gain visibility and stand out. +- **Give us a star.** It may not seem like much, but it really makes a + difference. This is something that everyone can do to help out Ory $PROJECT. + Github stars help the project gain visibility and stand out. -- **Join the community.** Sometimes helping people can be as easy as listening to their problems and offering a different - perspective. Join our Slack, have a look at discussions in the forum and take part in our weekly hangout. More info on this in - [Communication](#communication). +- **Join the community.** Sometimes helping people can be as easy as listening + to their problems and offering a different perspective. Join our Slack, have a + look at discussions in the forum and take part in our weekly hangout. More + info on this in [Communication](#communication). -- **Helping with open issues.** We have a lot of open issues for Ory $PROJECT and some of them may lack necessary information, - some are duplicates of older issues. You can help out by guiding people through the process of filling out the issue template, - asking for clarifying information, or pointing them to existing issues that match their description of the problem. +- **Helping with open issues.** We have a lot of open issues for Ory $PROJECT + and some of them may lack necessary information, some are duplicates of older + issues. You can help out by guiding people through the process of filling out + the issue template, asking for clarifying information, or pointing them to + existing issues that match their description of the problem. -- **Reviewing documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a - document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info on contributing to - documentation [here](#documentation). +- **Reviewing documentation changes.** Most documentation just needs a review + for proper spelling and grammar. If you think a document can be improved in + any way, feel free to hit the `edit` button at the top of the page. More info + on contributing to documentation [here](#documentation). -- **Help with tests.** Some pull requests may lack proper tests or test plans. These are needed for the change to be implemented - safely. +- **Help with tests.** Some pull requests may lack proper tests or test plans. + These are needed for the change to be implemented safely. ## Communication -We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask questions, discuss bugs and feature requests, talk to -other users of Ory, etc. +We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask +questions, discuss bugs and feature requests, talk to other users of Ory, etc. -Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for in-depth discussions and lots of code examples, logs -and similar data. +Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for +in-depth discussions and lots of code examples, logs and similar data. -You can also join our community hangout, if you want to speak to the Ory team directly or ask some questions. You can find more -info on the hangouts in [Slack](https://www.ory.sh/chat). +You can also join our community hangout, if you want to speak to the Ory team +directly or ask some questions. You can find more info on the hangouts in +[Slack](https://www.ory.sh/chat). -If you want to receive regular notifications about updates to Ory $PROJECT, consider joining the mailing list. We will _only_ send -you vital information on the projects that you are interested in. +If you want to receive regular notifications about updates to Ory $PROJECT, +consider joining the mailing list. We will _only_ send you vital information on +the projects that you are interested in. Also [follow us on twitter](https://twitter.com/orycorp). ## Contributing Code -Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue or -[in our chat](https://www.ory.sh/chat) before getting started to ensure your work is consistent with Ory $PROJECT's roadmap and -architecture. +Unless you are fixing a known bug, we **strongly** recommend discussing it with +the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) +before getting started to ensure your work is consistent with Ory $PROJECT's +roadmap and architecture. -All contributions are made via pull requests. To make a pull request, you will need a GitHub account; if you are unclear on this -process, see GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo) and -[pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at the `master` branch. -Before creating a pull request, go through this checklist: +All contributions are made via pull requests. To make a pull request, you will +need a GitHub account; if you are unclear on this process, see GitHub's +documentation on [forking](https://help.github.com/articles/fork-a-repo) and +[pull requests](https://help.github.com/articles/using-pull-requests). Pull +requests should be targeted at the `master` branch. Before creating a pull +request, go through this checklist: 1. Create a feature branch off of `master` so that changes do not get mixed up. -1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local changes against the `master` branch. -1. Run the full project test suite with the `go test -tags sqlite ./...` (or equivalent) command and confirm that it passes. -1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is written in Go, `npm run format` if the project is - written for NodeJS. -1. Ensure that each commit has a descriptive prefix. This ensures a uniform commit history and helps structure the changelog. - Please refer to this [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) for an - overview. -1. Sign-up with CircleCI so that it has access to your repository with the branch containing your PR. Simply creating a CircleCI - account is sufficient for the CI jobs to run, you do not need to setup a CircleCI project for the branch. +1. [Rebase](http://git-scm.com/book/en/Git-Branching-Rebasing) your local + changes against the `master` branch. +1. Run the full project test suite with the `go test -tags sqlite ./...` (or + equivalent) command and confirm that it passes. +1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is + written in Go, `npm run format` if the project is written for NodeJS. +1. Ensure that each commit has a descriptive prefix. This ensures a uniform + commit history and helps structure the changelog. + Please refer to this + [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) + for an overview. +1. Sign-up with CircleCI so that it has access to your repository with the + branch containing your PR. Simply creating a CircleCI account is sufficient + for the CI jobs to run, you do not need to setup a CircleCI project for the + branch. If a pull request is not ready to be reviewed yet [it should be marked as a "Draft"](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). @@ -137,46 +162,55 @@ If a pull request is not ready to be reviewed yet Before your contributions can be reviewed you need to sign our [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY). -This agreement defines the terms under which your code is contributed to Ory. More specifically it declares that you have the -right to, and actually do, grant us the rights to use your contribution. You can see the Apache 2.0 license under which our -projects are published [here](https://github.com/ory/meta/blob/master/LICENSE). +This agreement defines the terms under which your code is contributed to Ory. +More specifically it declares that you have the right to, and actually do, grant +us the rights to use your contribution. You can see the Apache 2.0 license under +which our projects are published +[here](https://github.com/ory/meta/blob/master/LICENSE). -When pull requests fail testing, authors are expected to update their pull requests to address the failures until the tests pass. +When pull requests fail testing, authors are expected to update their pull +requests to address the failures until the tests pass. Pull requests eligible for review 1. follow the repository's code formatting conventions; -2. include tests which prove that the change works as intended and does not add regressions; +2. include tests which prove that the change works as intended and does not add + regressions; 3. document the changes in the code and/or the project's documentation; 4. pass the CI pipeline; -5. have signed our [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY); +5. have signed our + [Contributor License Agreement](https://cla-assistant.io/$REPOSITORY); 6. include a proper git commit message following the [Conventional Commit Specification](https://www.conventionalcommits.org/en/v1.0.0/). -If all of these items are checked, the pull request is ready to be reviewed and you should change the status to "Ready for review" -and +If all of these items are checked, the pull request is ready to be reviewed and +you should change the status to "Ready for review" and [request review from a maintainer](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review). Reviewers will approve the pull request once they are satisfied with the patch. ## Documentation -Please provide documentation when changing, removing, or adding features. Documentation resides in the project's -[docs](https://github.com/$REPOSITORY/tree/master/docs) folder. Generate API and configuration reference documentation using -`cd docs; npm run gen`. +Please provide documentation when changing, removing, or adding features. +Documentation resides in the project's +[docs](https://github.com/$REPOSITORY/tree/master/docs) folder. Generate API and +configuration reference documentation using `cd docs; npm run gen`. -For further instructions please head over to [docs/README.md](https://github.com/$REPOSITORY/blob/master/README.md). +For further instructions please head over to +[docs/README.md](https://github.com/$REPOSITORY/blob/master/README.md). ## Disclosing vulnerabilities -Please disclose vulnerabilities exclusively to [security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. +Please disclose vulnerabilities exclusively to +[security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. ## Code Style Please follow these guidelines when formatting source code: - Go code should match the output of `gofmt -s` and pass `golangci-lint run`. -- NodeJS and JavaScript code should be prettified using `npm run format` where appropriate. +- NodeJS and JavaScript code should be prettified using `npm run format` where + appropriate. ### Working with Forks @@ -207,19 +241,25 @@ Now go to the project's GitHub Pull Request page and click "New pull request" ## Conduct -Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your -back. +Whether you are a regular contributor or a newcomer, we care about making this +community a safe place for you and we've got your back. -- We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, - disability, ethnicity, religion, or similar personal characteristic. -- Please avoid using nicknames that might detract from a friendly, safe and welcoming environment for all. +- We are committed to providing a friendly, safe and welcoming environment for + all, regardless of gender, sexual orientation, disability, ethnicity, + religion, or similar personal characteristic. +- Please avoid using nicknames that might detract from a friendly, safe and + welcoming environment for all. - Be kind and courteous. There is no need to be mean or rude. -- We will exclude you from interaction if you insult, demean or harass anyone. In particular, we do not tolerate behavior that - excludes people in socially marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made - uncomfortable by a community member, please contact one of the channel ops or a member of the Ory $PROJECT core team - immediately. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing behaviour is not welcome. - -We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, -feedback, or concerns [please let us know](https://www.ory.sh/chat). +- We will exclude you from interaction if you insult, demean or harass anyone. + In particular, we do not tolerate behavior that excludes people in socially + marginalized groups. +- Private harassment is also unacceptable. No matter who you are, if you feel + you have been or are being harassed or made uncomfortable by a community + member, please contact one of the channel ops or a member of the Ory $PROJECT + core team immediately. +- Likewise any spamming, trolling, flaming, baiting or other attention-stealing + behaviour is not welcome. + +We welcome discussion about creating a welcoming, safe, and productive +environment for the community. If you have any questions, feedback, or concerns +[please let us know](https://www.ory.sh/chat). diff --git a/templates/repository/common/PROJECTS.md b/templates/repository/common/PROJECTS.md index 3127443..4c9c9b1 100644 --- a/templates/repository/common/PROJECTS.md +++ b/templates/repository/common/PROJECTS.md @@ -1,40 +1,49 @@ -We build Ory on several guiding principles when it comes to our architecture design: +We build Ory on several guiding principles when it comes to our architecture +design: - Minimal dependencies - Runs everywhere - Scales without effort - Minimize room for human and network errors -Ory's architecture is designed to run best on a Container Orchestration system such as Kubernetes, CloudFoundry, OpenShift, and -similar projects. Binaries are small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) and operating -systems (FreeBSD, Linux, macOS, Windows) without system dependencies (Java, Node, Ruby, libxml, ...). +Ory's architecture is designed to run best on a Container Orchestration system +such as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are +small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) +and operating systems (FreeBSD, Linux, macOS, Windows) without system +dependencies (Java, Node, Ruby, libxml, ...). ### Ory Kratos: Identity and User Infrastructure and Management -[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User Management system that is built according to -[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). It implements core -use cases that almost every software application needs to deal with: Self-service Login and Registration, Multi-Factor -Authentication (MFA/2FA), Account Recovery and Verification, Profile, and Account Management. +[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User +Management system that is built according to +[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). +It implements core use cases that almost every software application needs to +deal with: Self-service Login and Registration, Multi-Factor Authentication +(MFA/2FA), Account Recovery and Verification, Profile, and Account Management. ### Ory Hydra: OAuth2 & OpenID Connect Server -[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and OpenID Connect Provider which easily connects to any -existing identity system by writing a tiny "bridge" application. Gives absolute control over user interface and user experience -flows. +[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and +OpenID Connect Provider which easily connects to any existing identity system by +writing a tiny "bridge" application. Gives absolute control over user interface +and user experience flows. ### Ory Oathkeeper: Identity & Access Proxy -[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust Identity & Access Proxy (IAP) with configurable -authentication, authorization, and request mutation rules for your web services: Authenticate JWT, Access Tokens, API Keys, mTLS; -Check if the contained subject is allowed to perform the request; Encode resulting content into custom headers (`X-User-ID`), JSON -Web Tokens and more! +[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust +Identity & Access Proxy (IAP) with configurable authentication, authorization, +and request mutation rules for your web services: Authenticate JWT, Access +Tokens, API Keys, mTLS; Check if the contained subject is allowed to perform the +request; Encode resulting content into custom headers (`X-User-ID`), JSON Web +Tokens and more! ### Ory Keto: Access Control Policies as a Server -[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a set of access control policies, similar to AWS IAM -Policies, in order to determine whether a subject (user, application, service, car, ...) is authorized to perform a certain action -on a resource. +[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a +set of access control policies, similar to AWS IAM Policies, in order to +determine whether a subject (user, application, service, car, ...) is authorized +to perform a certain action on a resource. diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 8152c97..70f1ef4 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -21,8 +21,8 @@ https://github.com/ory/meta/blob/master/templates/repository/SECURITY.md ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible receiving such patches depend on the CVSS v3.0 -Rating: +We release patches for security vulnerabilities. Which versions are eligible +receiving such patches depend on the CVSS v3.0 Rating: | CVSS v3.0 | Supported Versions | | --------- | ----------------------------------------- | @@ -31,6 +31,7 @@ Rating: ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to **[security@ory.sh](mailto:security@ory.sh)**. You will receive a response -from us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but -historically within a few days. +Please report (suspected) security vulnerabilities to +**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from +us within 48 hours. If the issue is confirmed, we will release a patch as soon +as possible depending on complexity but historically within a few days. diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index 29d4613..1f51f75 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -37,9 +37,9 @@ them, don't hesitate to ask. We're here to help! This is simply a reminder of wh - [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md) and signed the CLA. - [ ] I have referenced an issue containing the design document if my change introduces a new feature. - [ ] I have read the [security policy](../security/policy). -- [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security - vulnerability, I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the - maintainers to push the changes. +- [ ] I confirm that this pull request does not address a security vulnerability. + If this pull request addresses a security vulnerability, + I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added necessary documentation within the code base (if appropriate). diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index d8bcb16..d22b92a 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -41,9 +41,9 @@ If you're unsure about any of them, don't hesitate to ask. We're here to help! - [ ] I have referenced an issue containing the design document if my change introduces a new feature. - [ ] I am following the [contributing code guidelines](../blob/master/CONTRIBUTING.md#contributing-code). - [ ] I have read the [security policy](../security/policy). -- [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security. - vulnerability, I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the - maintainers to push the changes. +- [ ] I confirm that this pull request does not address a security vulnerability. + If this pull request addresses a security. vulnerability, + I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added or changed [the documentation](https://github.com/ory/docs). diff --git a/templates/repository/server/.github/workflows/milestone.yml b/templates/repository/server/.github/workflows/milestone.yml index b4a3069..fb47e4a 100644 --- a/templates/repository/server/.github/workflows/milestone.yml +++ b/templates/repository/server/.github/workflows/milestone.yml @@ -3,7 +3,7 @@ name: Generate and Publish Milestone Document on: workflow_dispatch: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: milestone: @@ -23,8 +23,8 @@ jobs: - name: Commit Milestone Documentation uses: EndBug/add-and-commit@v4.4.0 with: - message: 'autogen(docs): update milestone document' + message: "autogen(docs): update milestone document" author_name: aeneasr - author_email: '3372410+aeneasr@users.noreply.github.com' + author_email: "3372410+aeneasr@users.noreply.github.com" env: GITHUB_TOKEN: ${{ secrets.TOKEN_PRIVILEGED }} From 8a3d37122ffbfd7323a9189367d8616a69e82b01 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 22 Jun 2022 17:11:58 +0200 Subject: [PATCH 049/164] docs: update CONTRIBUTING & COC (#148) --- .../repository/common/CODE_OF_CONDUCT.md | 147 ++++++++++++------ templates/repository/common/CONTRIBUTING.md | 140 +++++++++-------- 2 files changed, 180 insertions(+), 107 deletions(-) diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index 2351896..da4b276 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -2,76 +2,131 @@ ## Our Pledge -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and -expression, level of experience, education, socio-economic status, nationality, -personal appearance, race, religion, or sexual identity and orientation. +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. ## Our Standards -Examples of behavior that contributes to creating a positive environment -include: +Examples of behavior that contributes to a positive environment for our +community include: -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall + community -Examples of unacceptable behavior by participants include: +Examples of unacceptable behavior include: -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks +- The use of sexualized language or imagery, and sexual attention or advances of + any kind +- Trolling, insulting or derogatory comments, and personal or political attacks - Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission +- Publishing others' private information, such as a physical or email address, + without their explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting -## Our Responsibilities +## Enforcement Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. -Project maintainers have the right and responsibility to remove, edit, or reject +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, or to ban temporarily or permanently any -contributor for other behaviors that they deem inappropriate, threatening, -offensive, or harmful. +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. ## Scope -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at office@ory.sh. All complaints will be -reviewed and investigated and will result in a response that is deemed necessary -and appropriate to the circumstances. The project team is obligated to maintain -confidentiality with regard to the reporter of an incident. Further details of -specific enforcement policies may be posted separately. +reported to the community leaders responsible for enforcement at +[office@ory.sh](mailto:office@ory.sh). All complaints will be reviewed and +investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.4, available at -https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. -[homepage]: https://www.contributor-covenant.org +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder][mozilla coc]. -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][faq]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[mozilla coc]: https://github.com/mozilla/diversity +[faq]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index c57b0b2..54b4a9c 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -8,7 +8,7 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING --> -# Contributing to Ory $PROJECT +# Contribute to Ory $PROJECT @@ -17,28 +17,28 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING - [FAQ](#faq) - [How can I contribute?](#how-can-i-contribute) - [Communication](#communication) -- [Contributing Code](#contributing-code) -- [Documentation](#documentation) +- [Contribute examples](#contribute-examples) +- [Contribute code](#contribute-code) +- [Contribute documentation](#contribute-documentation) - [Disclosing vulnerabilities](#disclosing-vulnerabilities) -- [Code Style](#code-style) - - [Working with Forks](#working-with-forks) +- [Code style](#code-style) + - [Working with forks](#working-with-forks) - [Conduct](#conduct) ## Introduction -There are many ways in which you can contribute, beyond writing code. The goal -of this document is to provide a high-level overview of how you can get -involved. - _Please note_: We take Ory $PROJECT's security and our users' trust very seriously. If you believe you have found a security issue in Ory $PROJECT, -please responsibly disclose by contacting us at security@ory.sh. +please disclose by contacting us at security@ory.sh. + +There are many ways in which you can contribute. The goal of this document is to +provide a high-level overview of how you can get involved in Ory. -First: As a potential contributor, your changes and ideas are welcome at any -hour of the day or night, weekdays, weekends, and holidays. Please do not ever -hesitate to ask a question or send a pull request. +As a potential contributor, your changes and ideas are welcome at any hour of +the day or night, weekdays, weekends, and holidays. Please do not ever hesitate +to ask a question or send a pull request. If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. The worst that can happen is @@ -47,8 +47,8 @@ contributions, and don't want a wall of rules to get in the way of that. That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure that your contribution -won't clash or be obviated by Ory -$PROJECT's normal direction. A great way to +won't clash with Ory +$PROJECT's direction. A great way to do this is via [Ory $PROJECT Discussions]($DISCUSSIONS) or the [Ory Chat](https://www.ory.sh/chat). @@ -78,11 +78,11 @@ or the [Ory Chat](https://www.ory.sh/chat). ## How can I contribute? -If you want to start contributing code right away, we have a +If you want to start to contribute code right away, take a look at the [list of good first issues](https://github.com/$REPOSITORY/labels/good%20first%20issue). -There are many other ways you can contribute without writing any code. Here are -a few things you can do to help out: +There are many other ways you can contribute. Here are a few things you can do +to help out: - **Give us a star.** It may not seem like much, but it really makes a difference. This is something that everyone can do to help out Ory $PROJECT. @@ -90,22 +90,29 @@ a few things you can do to help out: - **Join the community.** Sometimes helping people can be as easy as listening to their problems and offering a different perspective. Join our Slack, have a - look at discussions in the forum and take part in our weekly hangout. More - info on this in [Communication](#communication). - -- **Helping with open issues.** We have a lot of open issues for Ory $PROJECT - and some of them may lack necessary information, some are duplicates of older + look at discussions in the forum and take part in community events. More info + on this in [Communication](#communication). + +- **Answer discussions.** There are at all times a number of unanswered + discussions on GitHub, you can see an + [overview here](https://github.com/discussions?discussions_q=is%3Aunanswered+org%3Aory+sort%3Aupdated-desc). + If you think you know an answer or can provide some information that might + help, please share it! Bonus: You get GitHub achievements for answered + discussions. + +- **Help with open issues.** We have a lot of open issues for Ory $PROJECT and + some of them may lack necessary information, some are duplicates of older issues. You can help out by guiding people through the process of filling out the issue template, asking for clarifying information, or pointing them to existing issues that match their description of the problem. -- **Reviewing documentation changes.** Most documentation just needs a review - for proper spelling and grammar. If you think a document can be improved in - any way, feel free to hit the `edit` button at the top of the page. More info - on contributing to documentation [here](#documentation). +- **Review documentation changes.** Most documentation just needs a review for + proper spelling and grammar. If you think a document can be improved in any + way, feel free to hit the `edit` button at the top of the page. More info on + contributing to documentation [here](#contribute-documentation). -- **Help with tests.** Some pull requests may lack proper tests or test plans. - These are needed for the change to be implemented safely. +- **Help with tests.** Pull requests may lack proper tests or test plans. These + are needed for the change to be implemented safely. ## Communication @@ -115,9 +122,9 @@ questions, discuss bugs and feature requests, talk to other users of Ory, etc. Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for in-depth discussions and lots of code examples, logs and similar data. -You can also join our community hangout, if you want to speak to the Ory team -directly or ask some questions. You can find more info on the hangouts in -[Slack](https://www.ory.sh/chat). +You can also join our community calls, if you want to speak to the Ory team +directly or ask some questions. You can find more info and participate in +[Slack](https://www.ory.sh/chat) in the #community-call channel. If you want to receive regular notifications about updates to Ory $PROJECT, consider joining the mailing list. We will _only_ send you vital information on @@ -125,7 +132,34 @@ the projects that you are interested in. Also [follow us on twitter](https://twitter.com/orycorp). -## Contributing Code +## Contribute examples + +One of the most impactful ways to make a contribution is adding examples. You +can find an overview of examples using Ory services in the +[documentation examples page](https://www.ory.sh/docs/examples). Source code for +examples can be found in most cases in the +[ory/examples](https://github.com/ory/examples) repository. + +_If you would like to contribute a new example, we would love to hear from you!_ + +Please [open an issue](https://github.com/ory/examples/issues/new/choose) to +describe your example before you start working on it. We would love to provide +guidance to make for a pleasant contribution experience. Go through this +checklist to contribute an example: + +1. Create a github issue proposing a new example and make sure it's different + from an existing one. +1. Fork the repo and create a feature branch off of `master` so that changes do + not get mixed up. +1. Add a descriptive prefix to commits. This ensures a uniform commit history + and helps structure the changelog. Please refer to this + [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) + for an overview. +1. Create a `README.md` that explains how to use the example. (Use + [the README template](https://github.com/ory/examples/blob/master/_common/README)). +1. Open a pull request and maintainers will review and merge your example. + +## Contribute code Unless you are fixing a known bug, we **strongly** recommend discussing it with the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) @@ -146,8 +180,8 @@ request, go through this checklist: equivalent) command and confirm that it passes. 1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is written in Go, `npm run format` if the project is written for NodeJS. -1. Ensure that each commit has a descriptive prefix. This ensures a uniform - commit history and helps structure the changelog. +1. Add a descriptive prefix to commits. This ensures a uniform commit history + and helps structure the changelog. Please refer to this [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) for an overview. @@ -189,22 +223,20 @@ you should change the status to "Ready for review" and Reviewers will approve the pull request once they are satisfied with the patch. -## Documentation - -Please provide documentation when changing, removing, or adding features. -Documentation resides in the project's -[docs](https://github.com/$REPOSITORY/tree/master/docs) folder. Generate API and -configuration reference documentation using `cd docs; npm run gen`. +## Contribute documentation -For further instructions please head over to -[docs/README.md](https://github.com/$REPOSITORY/blob/master/README.md). +Please provide documentation when changing, removing, or adding features. All +Ory Documentation resides in the +[Ory documentation repository](https://github.com/ory/docs/). For further +instructions please head over to the Ory Documentation +[README.md](https://github.com/ory/docs/blob/master/README.md). ## Disclosing vulnerabilities Please disclose vulnerabilities exclusively to [security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. -## Code Style +## Code style Please follow these guidelines when formatting source code: @@ -212,9 +244,9 @@ Please follow these guidelines when formatting source code: - NodeJS and JavaScript code should be prettified using `npm run format` where appropriate. -### Working with Forks +### Working with forks -``` +```bash # First you clone the original repository git clone git@github.com:ory/$REPOSITORY.git @@ -244,21 +276,7 @@ Now go to the project's GitHub Pull Request page and click "New pull request" Whether you are a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. -- We are committed to providing a friendly, safe and welcoming environment for - all, regardless of gender, sexual orientation, disability, ethnicity, - religion, or similar personal characteristic. -- Please avoid using nicknames that might detract from a friendly, safe and - welcoming environment for all. -- Be kind and courteous. There is no need to be mean or rude. -- We will exclude you from interaction if you insult, demean or harass anyone. - In particular, we do not tolerate behavior that excludes people in socially - marginalized groups. -- Private harassment is also unacceptable. No matter who you are, if you feel - you have been or are being harassed or made uncomfortable by a community - member, please contact one of the channel ops or a member of the Ory $PROJECT - core team immediately. -- Likewise any spamming, trolling, flaming, baiting or other attention-stealing - behaviour is not welcome. +[Ory Community Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md) We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, feedback, or concerns From f137be52b779803005351d275e536e927a7d8be0 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 23 Jun 2022 15:22:34 -0500 Subject: [PATCH 050/164] fix: update prettier CI job (#152) --- .github/workflows/format.yml | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 3e2796c..f216289 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,17 +1,27 @@ -name: Check format +name: format on: pull_request: branches: - master - push: - branches: - - master jobs: - check-format: + format: runs-on: ubuntu-latest - name: Check format steps: - - uses: actions/checkout@v2 - - uses: ory/prettier-styles@v1.0.1 + - name: Checkout + uses: actions/checkout@v3 + - name: Cache node modules + id: cache-nodemodules + uses: actions/cache@v3 + with: + path: node_modules + key: + ${{ runner.os }}-nodemodules-${{ hashFiles('package-lock.json') }} + - name: Install Dependencies + if: steps.cache-nodemodules.outputs.cache-hit != 'true' + run: npm ci + - run: npm run format + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "autogen(docs): formatting changes" From 81cbfd3d9e49770d8701731420ef32045e1ce796 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 29 Jun 2022 11:00:15 -0500 Subject: [PATCH 051/164] feat: improved conventional commits (#154) --- .../repository/common/.github/semantic.yml | 17 ----- .../workflows/conventional_commits.yml | 75 +++++++++++++++++++ 2 files changed, 75 insertions(+), 17 deletions(-) delete mode 100644 templates/repository/common/.github/semantic.yml create mode 100644 templates/repository/common/.github/workflows/conventional_commits.yml diff --git a/templates/repository/common/.github/semantic.yml b/templates/repository/common/.github/semantic.yml deleted file mode 100644 index 4f8499c..0000000 --- a/templates/repository/common/.github/semantic.yml +++ /dev/null @@ -1,17 +0,0 @@ -titleOnly: true -commitsOnly: false -titleAndCommits: false - -types: - - feat - - fix - - revert - - docs - - style - - refactor - - test - - build - - autogen - - security - - ci - - chore diff --git a/templates/repository/common/.github/workflows/conventional_commits.yml b/templates/repository/common/.github/workflows/conventional_commits.yml new file mode 100644 index 0000000..9d92dcb --- /dev/null +++ b/templates/repository/common/.github/workflows/conventional_commits.yml @@ -0,0 +1,75 @@ +name: Conventional commits + +on: + pull_request_target: # enable Pull Requests from forks, uses config from master branch + types: [opened, edited, reopened, ready_for_review] + # pull_request: # for debugging, uses config in local branch but supports only Pull Requests from this repo + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v4 + id: check-title + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: | + feat + fix + revert + docs + style + refactor + test + build + autogen + security + ci + chore + + scopes: | + blog + cms + deps + docs + home + hydra + keto + kratos + stats + + requireScope: false + + # Configure which scopes are disallowed in PR titles. For instance by setting + # the value below, `chore(release): ...` and `ci(e2e,release): ...` will be rejected. + # disallowScopes: | + # release + + # Configure additional validation for the subject based on a regex. + # This example ensures the subject doesn't start with an uppercase character. + subjectPattern: ^(?![A-Z]).+$ + + # If `subjectPattern` is configured, you can use this property to override + # the default error message that is shown when the pattern doesn't match. + # The variables `subject` and `title` can be used within the message. + subjectPatternError: | + The subject should start with a lowercase letter, yours is uppercase: + "{subject}" + + # If the PR contains one of these labels, the validation is skipped. + # Multiple labels can be separated by newlines. + # If you want to rerun the validation when labels change, you might want + # to use the `labeled` and `unlabeled` event triggers in your workflow. + # ignoreLabels: | + # bot + # ignore-semantic-pull-request + + # For work-in-progress PRs you can typically use draft pull requests + # from GitHub. However, private repositories on the free plan don't have + # this option and therefore this action allows you to opt-in to using the + # special "[WIP]" prefix to indicate this state. This will avoid the + # validation of the PR title and the pull request checks remain pending. + # Note that a second check will be reported if this is enabled. + # wip: true From cf6976d38d494021102d4a73ff77dc445514afbf Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 29 Jun 2022 11:07:25 -0500 Subject: [PATCH 052/164] fix: remove auto-commit from format action (#155) --- .github/workflows/format.yml | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index f216289..8b05a11 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,27 +1,22 @@ -name: format +name: Format on: pull_request: - branches: - - master + types: [opened, reopened] + push: jobs: format: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Cache node modules - id: cache-nodemodules + - uses: actions/checkout@v3 + - id: cache-node uses: actions/cache@v3 with: path: node_modules - key: - ${{ runner.os }}-nodemodules-${{ hashFiles('package-lock.json') }} - - name: Install Dependencies - if: steps.cache-nodemodules.outputs.cache-hit != 'true' - run: npm ci + key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} + - run: npm ci --legacy-peer-deps + if: steps.cache-node.outputs.cache-hit != 'true' - run: npm run format - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "autogen(docs): formatting changes" + - name: Indicate formatting issues + run: git diff HEAD --exit-code From ef42ba2d6c427f5f60359a1b81079b8483585b0d Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Mon, 4 Jul 2022 03:07:29 -0500 Subject: [PATCH 053/164] chore: delete semantic.yml (#156) Replaced by https://github.com/ory/meta/pull/154 --- .github/semantic.yml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 .github/semantic.yml diff --git a/.github/semantic.yml b/.github/semantic.yml deleted file mode 100644 index 4f8499c..0000000 --- a/.github/semantic.yml +++ /dev/null @@ -1,17 +0,0 @@ -titleOnly: true -commitsOnly: false -titleAndCommits: false - -types: - - feat - - fix - - revert - - docs - - style - - refactor - - test - - build - - autogen - - security - - ci - - chore From 44cf1a812de176ad5c6923a9cae7edc5195ced0d Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 11 Jul 2022 10:49:44 +0200 Subject: [PATCH 054/164] docs: add new adopter connctd (#157) --- static/adopters/connctd.svg | 86 +++++++++++++++++++++++++ templates/repository/common/ADOPTERS.md | 6 ++ 2 files changed, 92 insertions(+) create mode 100644 static/adopters/connctd.svg diff --git a/static/adopters/connctd.svg b/static/adopters/connctd.svg new file mode 100644 index 0000000..8ca9b48 --- /dev/null +++ b/static/adopters/connctd.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index d109c0d..ee54234 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -170,6 +170,12 @@ that your company deserves a spot here, reach out to + + + + + +
Buhta buhta.com
Adopter *ConnctdConnctdconnctd.com
From 32137ce422e5241bef5d7fd12c928ad39e34add0 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 27 Jul 2022 01:39:47 -0500 Subject: [PATCH 055/164] feat: conventional commits v2 (#160) --- .../workflows/conventional_commits.yml | 73 +++++++------------ 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/templates/repository/common/.github/workflows/conventional_commits.yml b/templates/repository/common/.github/workflows/conventional_commits.yml index 9d92dcb..eb5de54 100644 --- a/templates/repository/common/.github/workflows/conventional_commits.yml +++ b/templates/repository/common/.github/workflows/conventional_commits.yml @@ -1,8 +1,19 @@ name: Conventional commits +# This GitHub CI Action enforces that pull request titles follow conventional commits. +# More info at https://www.conventionalcommits.org. +# +# The Ory-wide defaults for commit titles and scopes are below. +# Your repository can add/replace elements via a configuration file at the path below. +# More info at https://github.com/ory/ci/blob/master/conventional_commit_config/README.md + on: - pull_request_target: # enable Pull Requests from forks, uses config from master branch - types: [opened, edited, reopened, ready_for_review] + pull_request_target: + types: + - edited + - opened + - ready_for_review + - reopened # pull_request: # for debugging, uses config in local branch but supports only Pull Requests from this repo jobs: @@ -10,12 +21,12 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v4 - id: check-title - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v3 + - id: config + uses: ory/ci/conventional_commit_config@master with: - types: | + config_path: .github/conventional_commits.json + default_types: | feat fix revert @@ -28,48 +39,18 @@ jobs: security ci chore - - scopes: | - blog - cms + default_scopes: | deps docs - home - hydra - keto - kratos - stats - - requireScope: false - - # Configure which scopes are disallowed in PR titles. For instance by setting - # the value below, `chore(release): ...` and `ci(e2e,release): ...` will be rejected. - # disallowScopes: | - # release - - # Configure additional validation for the subject based on a regex. - # This example ensures the subject doesn't start with an uppercase character. + default_require_scope: false + - uses: amannn/action-semantic-pull-request@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: ${{ steps.config.outputs.types }} + scopes: ${{ steps.config.outputs.scopes }} + requireScope: ${{ steps.config.outputs.requireScope }} subjectPattern: ^(?![A-Z]).+$ - - # If `subjectPattern` is configured, you can use this property to override - # the default error message that is shown when the pattern doesn't match. - # The variables `subject` and `title` can be used within the message. subjectPatternError: | The subject should start with a lowercase letter, yours is uppercase: "{subject}" - - # If the PR contains one of these labels, the validation is skipped. - # Multiple labels can be separated by newlines. - # If you want to rerun the validation when labels change, you might want - # to use the `labeled` and `unlabeled` event triggers in your workflow. - # ignoreLabels: | - # bot - # ignore-semantic-pull-request - - # For work-in-progress PRs you can typically use draft pull requests - # from GitHub. However, private repositories on the free plan don't have - # this option and therefore this action allows you to opt-in to using the - # special "[WIP]" prefix to indicate this state. This will avoid the - # validation of the PR title and the pull request checks remain pending. - # Note that a second check will be reported if this is enabled. - # wip: true From 38af4400702ca1e7eeffe42270f5e9a23906bf63 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Mon, 1 Aug 2022 20:06:17 +0200 Subject: [PATCH 056/164] fix: remove cloud repo --- .github/workflows/sync.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index df862b3..0a92729 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -186,11 +186,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize Ory Corp - run: ./scripts/sync-server.sh ory-corp/cloud master "Ory SaaS" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - name: Synchronize keto-client-dotnet run: ./scripts/sync-library.sh ory/keto-client-dotnet master "Ory Keto From 93406389c87ece491fe9775500af1dd7e8aaa86f Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Sat, 6 Aug 2022 23:47:45 -0500 Subject: [PATCH 057/164] fix: repo name (#161) --- .github/workflows/sync.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 0a92729..d315d79 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -171,8 +171,8 @@ jobs: - name: Synchronize Ory Oathkeeper Maester run: - ./scripts/sync-library.sh ory/hydra-maester master "Ory Oathkeeper - Maester" + ./scripts/sync-library.sh ory/oathkeeper-maester master "Ory + Oathkeeper Maester" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} From 430183216bf2d03ee7e20d26e19000c2d55fbb54 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 10 Aug 2022 19:09:11 -0500 Subject: [PATCH 058/164] fix: correct numbering in pull-request templates (#163) --- templates/repository/library/.github/pull_request_template.md | 4 ++-- templates/repository/server/.github/pull_request_template.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index 1f51f75..e77af32 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -17,8 +17,8 @@ If this pull request 1. is a fix for a known bug, link the issue where the bug was reported in the format of `#1234`; 2. is a fix for a previously unknown bug, explain the bug and how to reproduce it in this pull request; -2. implements a new feature, link the issue containing the design document in the format of `#1234`; -3. improves the documentation, no issue reference is required. +3. implements a new feature, link the issue containing the design document in the format of `#1234`; +4. improves the documentation, no issue reference is required. Pull requests introducing new features, which do not have a design document linked are more likely to be rejected and take on average 2-8 weeks longer to get merged. diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index d22b92a..3d85438 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -17,8 +17,8 @@ If this pull request 1. is a fix for a known bug, link the issue where the bug was reported in the format of `#1234`; 2. is a fix for a previously unknown bug, explain the bug and how to reproduce it in this pull request; -2. implements a new feature, link the issue containing the design document in the format of `#1234`; -3. improves the documentation, no issue reference is required. +3. implements a new feature, link the issue containing the design document in the format of `#1234`; +4. improves the documentation, no issue reference is required. Pull requests introducing new features, which do not have a design document linked are more likely to be rejected and take on average 2-8 weeks longer to get merged. From 34c4f7ec6c0128421e0d055fd80ea21a6b27e78e Mon Sep 17 00:00:00 2001 From: Vincent Date: Sat, 13 Aug 2022 16:15:03 +0200 Subject: [PATCH 059/164] docs: paralus adopter (#162) --- static/adopters/paralus.svg | 5060 +++++++++++++++++++++++ templates/repository/common/ADOPTERS.md | 6 + 2 files changed, 5066 insertions(+) create mode 100644 static/adopters/paralus.svg diff --git a/static/adopters/paralus.svg b/static/adopters/paralus.svg new file mode 100644 index 0000000..402c50b --- /dev/null +++ b/static/adopters/paralus.svg @@ -0,0 +1,5060 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + 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 +V9XmMBdrj9HZPjFPoo2l5ivXsohw9Ta2qVep+uc5utG7W+O+Dg/dBg9rnXqae5DuZMNVPELEPcxd +otktbvpcpZ1K9T1LN3dE9du02oMug2ReVP3RUe8aHW/RMI9dRjH3zH72521SGTTj6jWJ7Ohv6mne +W1WzYypTz3NYVqn0ReedW5vS/eGVjOoo3lzxSPGcyiDmF69WVgfxJldpf0trn3OZpCvrjVdIKA5M +2e0uHlcZrSozKv179G4Uj6/bs1uqUhpqJv1s5vnWhGhWpnaztT2dD10Zo8Q6au6N3c+tzNquR701 +HasetYr2EKlp3dqzDlaZtbUfFY11ym5ue0Y+JkNENbs9WTfPuqLb1PvB0qpENebPc0lLbe9s566M +mYkS6+a3uba2ss3nJp4y37dP/9hKUW0Jj8smLbu1189Vmf9HZefq5vIM65ZI6WSVqXQtKhnlSd+c +rc23lFqnrIxfdEr1jad8W9dW/zpqZdTISmlfFRIKBhQSCgWM5c/si6R4Tm10y+qoFgGz68T7Itmd +TZvd0zvUu53TZ/uW6p2rTSlW5dHTH1WbvZIVatLp/G50bb+fN1RKo0N38+/Z9VymXQ== + + + IaEcxgrPoQ1qqR1qrumeWf+l8p5LGxfpD/V6Omg3qS61r37zlNqg95ClnVQbRctK1MO187pCQlmY +wA8Zs6kZT7e4ZeYsM51RFZoM125tgEJCIYBCQhFABQoMEBoeoPDAoWEDDhYMBQUKiggMhIcHYwDG +CgllAgMCiAWHh4YIBw1IBEQxAIWE4qCQUBSgAAUYhYSCgVFIKBVM4AJDFqiAWYAhGw8YGw0YMgkA +wQQMmQiFOYWEkoFCQmEoPDCBwpBCQjG0vaM9Ix1NM5g/07VyfWxvMvWobe4wt3Cf/8GzKRIwPFho +gPCQiMBM4NDwgMEwkybl72rRbnHrhGp4dEtdw7vEUkoppRTEMG4YUhSFVkEFkrRJSb1mPrGYPu6w +YhRmhTmxYsZS+FLJC5KHiw0tpsMojKNCxVgrEgiAIaIhAxL4oqlSLwm9+0sTXpWq3tOb5wwNi5QO +7Yich7R4ROtU/T6pKKm0AuVEGiEkqUuj7ocmZmWwTsd54zkztn2MBs3x6NLxK5fwprJarVSbotXq +6dpP2aIYB0KmL0dSVjap4zZ5QQq53DGL76UoiYIltWxxIInEOFIPuVtSEuMwKjEKMUolWZJEcr3F +jm7tKIpiuVVJioxNxNctgSSMKhBSvapD9DrbwpfVq5a5q5hWq0RIp7l630sr26UzVklkHV7ZwjgK +JZQY8dVISrLFZXdM3aIcSKIodeVrIMU4jjKQ4pA80oePPCNF3pKyRbOYrRInWEUeGVmSFFoSXZJE +jtUnipZ7mtGxVMXV21UJj4tGP/vuDpnEq8urkmk9nXV2h8zvL6M1F+r5mqn4v+gVR1LuMA7jjqll +kS2K645iK3m4MHULA0GSl3JHQZJElTumblEOJI1WWIq95EdIMaoShSBFUbTwqiiBFGVdJP5KFS5Y +RZ6R2SgpRRlVZDopiQ8jx2EUW1IzsyzelkocWtbW9AWtUFHivi8P/le2vVOe6m/Vqrtq1yvVvMrU +qhNaK/V1PC7dmm56yNxlv0iR9GqaeyR01SFTdaa4q/o6hT8lu6pllS3dXe4Z0VPNSKkCdS60WYrE +y1khyIEkSGLJFUmBFJsUq22CVWaUApS9Q08sQG1qlR7KQ3moTnWZhbh3ng8Va+n3IaNHP+6tXDTZ +I0seRuK10EgxinJ1Ph95kS0I+ZBcLnGpW7xQqaNsskmyxSiKkr5sFYqlyuxD8ec6tiQlmbZosaq6 +27IdKx/CQ+aXdchyk+rKuHsy3fVPSzqYhhLvdTbq2qbaHhnqFdWPTEtpooSSSiTIYSBJkiQuySvV +7VZVdcjsWe+7qZpahmd6N6qVx/zDvLvUMvPmEV0R2vZOn6p0okN90ZqP4nGJ4gcmlyhyHKUoB1Lu +mKVYI1HOio+yiVdHURTF3lEUK6UABROL0wVaIsmrQ7G2HMhRtNTaWEXFcr1pJZhAygQiZVExjXw+ +McMKO9BPGGWqO5YE2WbThK1gYSWqQMoPC+SQepE4dFqWzSOTPGxvE1sFGbUJw8ZREqryJBtqScjW +2GK2RNTlykOm9JA5O2SeSmhkJLo72+kq786/lqmaKRnJTt7zeE0PU2l9Rmv5bK0iu59yxQUhLrtj +0S2MA0kKuewKo/hqICUhl92xFKCQIuUrEs6CWMJ8dqCRSHk+M/VI5HqQre0WiLHFEiPLCc8MLfir +4l0Jds/2IUxy6b3p20xj3S9Xfd+acRNRV8nK1s71e24lS8LwQQUxBCn3WxV2bHGFpl5LKWmSRxYJ +HlhcYsgdWNbS0JbAsnrIlkwcWvY4Y1+OKqoow0DjKI5EMVJlxMwJpBjHsYcWNzoS5bx4LopihKhm +njNmg6ZEMNB/4d7LhYaVtZpHmw6Z28Qswqw1NEw8/YZX9nWhUkqhUnYFU9cotiupWxiJ9bgEQkm9 +ZNEthUG2FyRR0pjlSApuHnrsIpUHJnRLUYVRECplZ1q2GKvcYaPSKEovEocRUaRIJE5Y4ki5sjIX +KzKVkng6q/JyhJREghSb5M1IkRwliyxurJFookdBS2QikzzMhpGX44dxRWLTSqISe5ePdFpCi1Vx +oiTIYRRNLF6Mo8gryrFFJnlIiuRx4IFV7nzGRO1VFVVSXBYZCRD1J0i2Uj4vN0vxZaNpMzxVQrPO +RLWiMQ8SLrps7mivbElOxbWyQfxhZi5RnTDV9Mc6alg2n7T3OHePOXBAtwcNj9nxR+t+5qm9U1O6 +1FO7o3tKlmq6dorqqOVUtH+W/iRdVCPaua/qTbWzxsKtSyPW3VIVHiqtvcuk+runebiVRIS3Zgd5 +pranmC56ronqTm9vc5fK7JOWrrf60IMfF6nOaVrc++GpMivb6tnDFk0lluU1vyeVlCpLCXePadGJ +tjRL9WCiUXQt5RqSz23zcqL5lhbl5hmetA3i7tk0MVA6YpnerZ1CCUwzYGCAAg5s1rU0RKXSb55s +0UpzbZtYqrj101+XzqaJaLt20pXS+Q4ufsnko5S2Fh5dfGk+fWjRZUtapLg3JduZ6R47YGq7tmlF +tttX3dJRnbK3aPX2iXWK6lqEazP/mT6zk2tTl9a8vcMfpLqstVtX3al/izbMWyp/yehj66S8MnVd +zEQf3ll7FyItffVm59aJ1+9tqvkmFX1v8sm1j2pWeaLnukxv7fhzVHnCs2ss6+2pkvSq8tbkPUo3 +XdSzZPD2XIV5eGsbyyX7nqLCpUs6u77W4t6ud+1E196aCk9fVcTztTk6tC46qu/19Kw6vUv1XTWu +61hk37rbc/Xaq2v1Ra07qjbdrS/+dFBdeF9DwrPpO/99Gm/T9r3a1OlldK7O27+YPspz2qXl18zy +KGamES7e6cH7p7pfvY2Fm2e9/aqmHcolMj14+qr8lsvOorGMFL90u4fSZuls49qt6SMurf2UnZ/V +e+gmMu7dr1QX7q149mx4v6O1Vekko5ZYq7VlqWi7JePerWu4Z0Jce++c6R4N9+p67Gw04t5X02d6 +bG2snrm3d9aj61RVtKPr+tplHVybver5W2vv/XtXH0wv5TnaGPdne34fnT2TX/vFIztGm8L9Vp5L +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 + + + 8jiL1pSKbIt2aIa2Vd9Wc/Pg9fBqpa0l1THNtkR3p857V+eznbWtQx+uzdKrZniZZvjz5jlduGe8 +q+Z/lE8rXn34XxLu7z3htzLzHPqsKO1meUY70500f15Fh1hm0yaizc6Xe7TIEM1+J581o5X5iPR4 +O6pZ65TWa5cd+nyIZLh4dhka13fZarzzymz33bdll1qEeautC3087m/0YqHXaKJ/v4S+uY4Q72Om +yWct3Nw8/vPgK49ipUJCwWBvJ/OU1jw/a5Zm2cmz2rkK12cMfAoJ5UHaWukevFpbX+GqEd3ebycd ++NZ1dcjKbq/qZHa3VLX3u0shoVDg+1rb2jra+qWQUDqgi0VXR1WbtGhnr1B9qHqMdXVWp7Z+la+W +rihf+6s85erAsaRXSCgUoIADOj0+hYTSAfvcffCwU6l0duyeVcdWPvbmTxLWWbufS9KTUSXZ1iu9 +c3i6eud4pf9c4uWeTDqH6juXzixdPIi26Tks22PcvJ+0Q78r8h28ZdXesZIP7VnN0tLI3lXbrPO9 +Fx3bpNzbX83FXRvJ0HWonOXVw7NT+qh0l5FR8cq4eWrnpuRVRStcJKXcI/y5T2m2p4z1ddpVd8dS +fC1SuUyVl0u0lLS4VYg2q1v0MSWa+ugqJJQOHJqdI9t+WlGmr7y66cNzNNadY2JuHrM6e7RTeEl4 +FrH29uim2rQv01b5Ltdk0z36cW7anW+aqeokXZZiZu2p3eFu1Z3OV6etqsQtKySUw6WpuFfS8zKu +/ndIZ1vt+RkXzZd0hndexB8a3mLqN62Fe3de7lnPjnQqM8K8NxVRF1GteUQf9cfQp5lXuHpePTLu +pebPuHWbKUu9drdamM8XYqLpTkbKO0tl3/31mtT3GdmvvnXeLhWunn6sCn1W50rzrVWmHrOyrSo7 +W4WkR7u1qsSirdtb08EqG+nVrXlPydJHVva6k1X2od0tVS05b6nwN13at9T1NKYlXR6XqvFJv7Wm +vuhrREdYZ3fyvcdrrGc6SRW/l4qH0qh1ZGtvnaHtUjGXbvFL6RcR3bfUpXdftUJCceD9+d9MVyHl +z6LXbsLNu+72OktFY2b6VK++PtuRWu2Ztt/eUq1VN1GPUdnWJa2rrvaS6+7U21yiY1QmusJj161r +yUiv0o5e+Vh56qrWEAt1XVZaVbW01p+r6up56vqauehslZeOv7tIkyoPNe/2Cn/UlVWGdN/a6qpu +lUr1ppBQMNiqWvua+luLp5x4SKdml3a2vNbA4FqlUVoWGX1xfZqn0nN13eppWnfr7qteKtsyfKW9 +1vyX0q6svtrD76/qVNo+K1Pb2+Yy49p9Q9sTWpFOE2utd47W+lkWnXEpNU/de6ciu7uePaMzE415 +mPh1Ws31f02RDqZt8+haIaFgsKbSWyzSs1Wuel7h3tn1fcl+x2qi8zQWIn6d/prVj6U3d++aTn+T +SA+ticpOYyaVQkI50Gd3rMXKW02vVerzNqm8V0a01buMVEZz3Xj+LWoh1erd3lUd5n971+u0dltV +eGusrLLSKrwtax2kykVDvTWqetluZqXfeivve7vWJdOeqWzpu95Wrm1XeatUmXr6c5V9l2mZdt7u +VE3vSL87TKOzMjpj1lpdaP6uviyzcE+dCdPKdq6abmDUdy3MpaN7dRMZ5qGpWo9bh47ZwBjtrlir +lahK6KQ3MKiK5/uyCvcuVTe3jtWhdROX0F5mWHb5bAnL9Kxn6xsdfS3eGtq+qnyfLRXiISy7l5Yd +KwsPZRl+fbaFeoew9op8W3z5SWl79dfdrtMWvz96pa9fqW1e+Uxdd7lbV+eu0vSmW6t02urVLqbX +6Mq6t6q0O93e6la7X7usblKrW02lo1UZLEShcAFDxAIDBxgqUIhAwVevdExbuWdIJ8n0bvUs5VrR +8PaUDU+PeVfvXCW8Uz76fM51llmUzqTc25SrLj3N/VlLtOumHabVT3+a9tWWfFaPadTE81N9JdIf +1Cvh3lFNsiXSn65Gwls61dmSmZ4u4pp17/bmRJlYtod7WlzN+ykzItMjtL1VXdQ9VtbT3DK0ROtZ +SzKelerpfZN2I9rj13XLiF/al72nlFqGS5lkPO8WnbJTI54m+Y6NrivSVe8oPn/mcmrajunT+xPa +oW3pOTcwJqJVrO+dfZCy8D9dIW6eKv8NzNPspWtao9Sz+jQ3pdVTtqj7NzCKtpuZpkg+Wg1M7TnF +v4Gx3e+i1WEsjexLpGdhmilR+ZBoj319u1UmrVV6442i82oRzfRlmbaZeAevfPLapk/HdJbXQ1Ou +PivLd99CvJbtJ/GmSLXW/vzVttDq2JVZr6Vdse4XoU9dGUMi9e0Wru0v906fZkRqZ3W883yepzvf +yLdUvmNW5uyOdr2Smd3dt4drznX6moh7UNe6Pmt1q966pX9vzaWvPtNOJS3mjfDWd3abp3qsyiSZ +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 +b4p46LUa50fFEHwmrShJNX9znL0uD0HQSapa9B/FE3ui5HbILLPelifFUeyi6ln+uN0MSa3JelXY +3L7ot/SuPGq63mdqGrppdui53rWklqgWTbkpi35ZN016W19VazH0zbI3R70U6dCrw04nQxGbmtp1 +FcP+Wc6ex49j6CxRbWpCy18EPSX5o+hHRT3paY8hHXq9SQJglTKA2u5vnfRlcsiYSHyvyZq8SZ4m +6RYpJE3apAtvyzTLAGApJCk1omLGxQ4VpnkAqRSSJlt2ADdU5MAhM+LXNVw6v+87ieM1RmRt2/1e +8/uO73uP9/nd43iO83tM2jm/1zLqAcjspZ2udZzfofMuFdLm8Zrfd3LX6Zrfd7LfY5B2j+O3zu80 +LeP7vt81r9c6bvP1XeM8v8czuszP9Pu+5zRdy8Ri6Py+7zsPMpfpAYxSyJ7O7/zm7fzm97q27duW +abImcZ7H9z6/dZvHbT6XaTKn7Xu39/yWSQbg0vl933cyt/k9HsCLxEkeL8iaZJH1AEYpZI3XtUzr +Oo7beI3T+Y3r+83ju97ne4/vMk3qfH739ABGZgzAtbtofq9tXu75fSfzXcZ5fq/JHDIhJM2MEwy/ +GqUDMBnAigGU7B3fcRvfa7re+3u3+7y2a92l6/dd57yM2q7rvs5zHNfzOudxWq5zvL73nu97ub/v +u+9vl333d2/r9n3f+X3zMl/fN4/rvK7fuS2D521b32vdtl18vdv87spreed1+s7ze+93ubf1Htdz +Wbd33d71W8d1W7d3m+Z3PJdx+5ZxW5d5e9dvGbf7u+ZrfLd3167fNi739l3frtre832/7xq36X3P +a17mc5ynTdwBrBhAqe/pvu5v3t5l+u5z+qbv+65rfOf3vNfxXN533dbr+zaR9U7zuFzj+H7rMr7T ++L7rNd73+a7ncr7bvS7r+17v+77vtd3v/R3v/d3fvNzv/U7vu0yXaB6neZqneV6m+bq2c7nmeZ6v +eR7nd7nma37nbZ6nc9nmefnu75u/+f3mdVu+bZzPZZyvcX7Hed7G+Zzncd7m9d7e+Vrnd16Xd961 +87TN8zvP1zVv9zxP13LP23zP8zzP93Sp5nkdl3k+33u573me7++evu+a7uu6t227t3u57u3+7vX+ +7vH+7nFdxmkb7/O+p+2813vctvV+5+u+t+26rne+7+9SbtO5rdO0be92r+O8nNO0vuN3nuf2XtM8 +T9N4TdM7Tts0jdt7rdd1TeO1vN84zct939M2TeN6TtO4Xfd139M0Hu/3btf0vde1bvc0jcd73eP0 +3ee4zPc33+O8Lu99juPyvve9ze+4rPf73d/xvtd9X+Oy3fd93bv4uu/rusf1uq93uu/t+sb3nqf7 +/o71ut/1fpd1nt9znrZpGedtPr9vvr9jHtdlvpdtnpdtXrd7ueZ32eb32uZtvr/jnb9vud9xud/z +Xdb7nef3fd9vWd/1ne/zPN/tHdd3Hd/vfcftm97pWqd3fedzXdf1PddrXNZ1XN/5Ws91Wc91Xbd1 +Xd/tXN9zGdfv/dbvXbdpXa53+r77O+ZrudZ3mdZzHL/xPZf7nM53Xd913Obz/d7zW95tW9/zW9/1 ++s53Wc/z/Nb3Pq/zfa/pvJbpfKdzHddx3pZ7/M5zXd57nO95Wpd5+t7vvebxncd53Nb5Xsd1vdd5 +2+7lXO91vOdxnMb1HLdtnedvvadrHK/rfb/pWr7x2r5t3MZ5Xq53HufrW6f3+s71+75tWc9v25Z1 +vL51XrbvnadlPedp+97lmsfz+tbpm6Zv137vNU/neI3fO9/LvI3rO23Xco/Tcm/rvQ== + + + Tdc8z8s83/M4zdu6jtu6nfNyLus1vduyXtu9jsu7vePybvczO2/vvM3fdm/vtI7LvS33dW/nMn3L +tm3fdr3zei3bd63LfN3TuMzXd33z9Y3T/R3vO0/fN93ntV3vO37jet3f913rPa7jJZ3fZfy283un +5b62Zb3E1zXP33zey/u947XN97XM330t83d/xzt+0/t+y/2N33su93d/93fc3/fd77ytyzRe63wu +0zat43Qv93Vd4zbP63KN93dM27tc43y92/0t2zfO3zde53dt3zKO47iO77e+5/0t2zhf57m81/eO +yzeu37Xc43h/xziO57ec47XN17Wc43VP2zqe2/iO93Uu77u+7/iO13nP4zxu1z2Oyz3e97hM2zyO +07Zt47XcBy5co6vIfWlSJZOeb82zSFVzckTixgwKEKCIEtAvgmERXXtiWiTXd1mqW5ZuGvt9vdqq +HnhuHKppfbryqDqHIy2OJCdbO09155+1VbWtT9XXvqtgpUL0nOS6+1mWWhZ/H0hlZxCMPy8vydw0 +c7JEs8zjbNgwxE0U9sJOhxNllrmft5ulaqZZQCAWEWjktjL40cBcO9DIiPA6TUrEA4uIDhPWa5c9 +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 +PGRGZFrUiDFSwUJGxorE7dVIBQ2NGRczTGayncllVOA0Kmh+X0ETy8jsfJyChsfjeibFHvM0KvJ7 +xZ6zZAwZmCplADI5ZEw0M05pKgASVoSYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpia +mJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqY +mpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpia +mJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqYmpiamJqY +mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqYmpqampqa +mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa +mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa +mpqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqa +mpqampqampqampqampqampqampqamhp866zsNQ5YygAtYGZGHtvjQCqaAupJbcqPXt1tJwoUaodj +ctGRisbbJupwwidFH1BEZqRMqjUdlWGbbVwua9ExyY7DcNsGv54cR25aZbdFZljeOiWIDi+ngVy1 +B4zKC89LEJC302Cyq0NlWuHJT+IWlZYhCAp4HEdEI9Rs6+N4SlOY26rw9Q4oLlfLrhyO23GxHK/F +UN2yGfRgc/ySZZ4cU07n5HTiL4RBsOW4uevYLGM5HPzzWjz6ipFvcsslN+3R8gS/JZbNx/HltnfL +7vDbSxL1vrsIvlsGc9knRUFnKTpJnwT5MuxRErSip9jtSZAPO9EIvnh2Fn8fpaenFGuwu0cxVtcm +dpW7DO4y3hRjMxzj2VtAPclNd9Gz4ToZoAUMCk7/paiP4Mtp7GYja1roRFvORge5khvmIZIiYmUk +RYhnwWoOeipng4cgLoJpZyN/HCtmZ0A8i37r44h2OGfGoUHvR1GY02hQC6lkjI+vGHlS7jp33Jt1 +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 +/ABxMqHdkzAczYqk0fu92yFhYiQGAIMGFjwuMoAZA0AZQIv9tmkdj8Hj+b7z+s7n/M3vsS6jYgVu +p7BX4Pod09Cs4GOc7/HYppG5435mpu5V0Dd+z/Q0PZPf/Ewf6zfOxza/47Fd43Scr8DxFbsKmjMe +AFAMrk86B1WRAPukJ8xAqT7sK9HyKdI5c4KuKNknjYAYqKgZmAE8IIcJSAmAzAI7cLmT3mElBTXg +Sg4EDCn3OifZZq9OWjDVU7EyNLF4GAUqNiZ+hRUrvz26aOtJe4CD6BHgfMK4Dq7cCgDzSyg4H+87 +3e9139t6j+e3Tef0nd/8vfe8LuM8jfO3zOMpVtx5ChqX6WXwFXGN731MY6vAY57v95gmX1GrsFPQ +3LvMzds0K24bz+NaJkWKWIXMDB7jMzN9TDPTq8BT9Pau3/ue9zS2CpmcJtftvo9T3Cn6uKd7PKbB +9RTxzvcrVOw93usyK1bQ7ClSrOj7eIWKFH2cgqbxOEWv2zGN4/uKHVdREzYg4YRBQ4Qvvj0aLOsT +dqAuMH9vAc7f6x6bmjiD3wX195OrfR8ibAeUKEBCjYAzNGEJILMD6PXyi3aBt5/k7nh+a8MIKuVg +p7eMnrZQKz8yf7ZtzL0nGTAD1KVJoG/4fMImSCjkQMUhEsoE5KBwTm1JL1NCsY37/UVso85BoCjF +BXw5cH0aAsgZNgEIIN/B9FMzuD7ZINvJAn6eNANyAkN8EzCyFR2tOWJ7iU+fwyr0EZ//EuzDFexh +AMQxODgzMjMzZTQ5LWU0NTYtNDIxNC04NTJkLTEwNWQ1ZGEwOTExZjE2LTE5YTgtNDk1NS05ZTg0 +LWYzM2MyN2FkYzJiZTMyNG1sMTBTVkdGaWx0ZXINLyA6DS9YTUxOb2RlIDoNKGZ4bWxub2RlLW5v +ZGVuYW12YWx1MXQvQXJyYXllVHVyYnVsZW5jO2NoaWxkcmVuKHQyYXR0cmlidXRlOyAoc3RpdGNo +VGlsZXNub1NudW1PY3RhdmJhc2VGcmVxdWVuY3koMC4wNXJlc3VsdHR1cmIsZmVDb21wb3NpdGlu +KFNvdXJjZUdyYXBoaWluaW5vcGV4MCV4eWgxMGlkQUlfXzFpZG9iamVjdHdpZHRoL0RlZiA7ZnJh +Y3RhbE5vaXM0NEdhdXNzaWFuQmx1cjFzdGREZXZpKDJiZmVPZmZzZWRkZG9TcGVjdWxhckxpZ2h0 +UG9pbnRMLTUwMDAtMTB5ejJ6c3VyZmFjZXN0eWxsLWNvbG9yOndoc3BlY091c0NvbnN0YW50KEV4 +cG9uZWtrazM0MDQxMWFyaXRobWV0bGl0TWVyZ05vZC0yeSgxNEJldmVsU2hhZG93NE1vcnBob2xv +Z3lyYWRpdTEuYWRpbGFiYmQtZGI1MkRpc3BsYWNlbWVudE1hcDNzM3hDaGFubmVsU2VsZWNSeUFN +YXRyaTQzbTAgMCAxYW5pbWJlZzBmaWxsKGZyZWV6Y2FsY00obGluZWFyZXN0YXJhbHdheXRvdG9m +cm9tMWFkZGl0aXZyZWQ1YWNjdW11bm9uTjU0YzhjY2MxY2M4Y2NjYzFjY2NjKC01NENvb2xCMURf +NjYzZXJFcm9kNl8xKDcyNygxIDE7MjAgMTU7MjAwIDIwMDsgMTUgMjA7MSAxIHJlbW92cmVwZWF0 +RChpbmRlZmluc3BsaTFSYzUwIDVQaXhlbFBsYXk7MjAgMjA7RGlmZnVzZXllbGxvdztncmVlbjti +bHVlO2luZGlnbzt2aW9sZXQ7cmVkO29yYW41RGlhemltdThlbGV2NmQxbG4xcmU1MDAxMTEwMjJu +boNHqHKdNDMjIkkKUkoH8ggSAoohgzTO4lSaNAcSQFAgDIiDKAoCEYiBEARBCBACBGEQikEIMUop +QwwxAseaNAdIC/q6MW6OyeEA/cyvkOjiUcEwxwLI8LoUjsCk8NqXY2r9DJ8GWQfwOMsQujNbaRcY +8AwfetStXEhGdxcd8I8UDapUs6/xCUe24vYjaE6iCfsbLU8C26xlP4ctPGgUUeIxjfl1tC36Mzpk +iqk8026w9w9yYX1WCqlGR4dRNYxvI9wGe1c6DCr8s0ba4/oBpuF/btCNvCqLrS1brJEsKnl8o4vQ +NumhyXIh1n5Dm6JYY2pcLrp9370TVX6QNsAvoxhkc1gWPyHDH+XuIuDVp45SZgt/uwabKWb8KRif +cJYB/HpmzYtQ8OMSIGW0S8mnWYr5+EkQJ6QADKiPlRRo4SIj8X9iLsd278VhmeKlkQW/IiBL8z1H +hm69VxtOr3Tekq04exhUkthi6KVWXkxkZ6K2XTBlnTZ66vx7giCOFdcwbAr2JWjGNmlK/gabvB1v +WLVzABh6lJoQtMiuHgzoOPGxc8Hdi5Ct8axpLXVMfa/v95vkEMeyXY+mCFbuitO/K+32gd8da/Jp +JINjJD/nd7sA+6j2zZ3DAb6wDOjvvDM9fMFRljLOQYdkUud6bXf1ErhbuZThGVXIDRzE5Tl9cTkW +sRL0MxcBWWAY1qMp0hBm7PoeTiAI/j5yNfxMjgctHOgj0Xd36HSLAmKLQc2GbDPZ3sZztmjuEgFA +XktzG0KnXmCLp75yA47EIPUlcyKcpkLXiXdFiGz2gkRM68j4oR/1yF3OuGUemUzZIXvwyAE9a14q +bRsipmTWrAMXIogDIjdiKsg9ZexLTLubZIZjEIRXZvCMyQxLsmX9/Ncy+dhJPBATJjFGegSZljCP +cCkSW2ZPu40E7pE+Y9vtL8JaBjNilBRSMH3IZ+yqbSnDj42QwwQnnVfyyTjbTFd4LWqv2Am+6Xiw +kWWK8X7pDvRv7ssLR4I+UkCIR+SY8OahfYtWTVXDQ/UXiWBs6Kt4sDmGCjrdLQC7Lh55+LIIscW9 +jXcsGcg1hwCURL8Fzeb1HXBF8HkEePFEL2Se1KIIx9Cw8eAMvXC6ZndZCpMdYAZaiE6oQUy7Rqbr +3pKT2rENpq3X0HOc4mYygQgjEkCduiDWcH+STdqvvjchypy2CLBaKroK8aYaxiF25R6msuIlu8Wm +dT6xmhOdZIxnCSJkj3gfH5TBC4ybh08bw/LRd4pmzyLC0U83bhx86Cy4gzq4Cu4CnJOekiMYkRUi +u4ecYwQ3gpn8cJj1mrNxcowIIo6iH6LAByUz4/IUEwXytTvZeCtvuFW0Me9kNVmaS44lpTaGQHkG +VUlKnBERi4m8zMAiOljSiEwbx3EUkEwapPWoM9Z3QPxZm/lljE213EQ0y8eMbDh7jDL6VSyDLpG4 +OESuS+P9P0MpE7BAZ5RQ46aWYGs3uhwXU+ziB0EpDNAB+QuyyKelGlhfx62fGoaI63nBe35BVEIV ++JAl9v2NvxhT1ESYpByUcZcKQ+95LRRrpyxmwlTMbZEq2gsh7tRhK04UaYtCuqCCmNZ1WcSyLDeO +c55t14q26jKYZ9ZtpM9Lcvs8tYBOnG8LS0fgOsF019Uv8fJ2ly7R0Cfb2UwjIjr1sfCjjbPNUmoK +yxdBdkP4z2q21w0Vk0VrRRpULIB8/+1pOkOaxJ2T7IMaNuYxbHqNc9V4cSZFCcP8QG/YE222pq+n +FP8/OjopkhKjaBsOzuiPSJOG6r/Chk1wp/eOgDeygs/wH9JbsTcnZ9vO7H2BNkg8ig== + + + mWFvamzSXKLoBsKhQW9nwqS6VahcxkN4qTS0sHtrAw6B+0y8z2F8ERvSvLj4rPqi2RSRODPSGNeP +jEFGI4QCjtT1dWRyKjhDFkNc6QlAXmghzjf0zif79uBDrgT/jC2uAS9g6i8igYZTHcfGG7U+U/qE +Fn0UbP+iM91VKbIdA1kN6zFudLJZvy7plCF1y165GoMi3WWtmxQv/+wP9Nr8DsDbwzPvsef2MSA5 +YUhASQk8a7OEsvmb7Xtw3AzpuWgOpznnVLIbN5rvn+p0kDH0/MuwGZJfnSI5AGfsnhAoVVFnNk+W +QAlrvxJzRtm6T+9Te3IURwPBx3FHGA4kIjADGF6HJtbHT79/k8JORkZjii5R+mAPUdNFhyvqcBMG +EBTnPSuRydAfdLlQZ0/KdbECoIgxmC+cf2JVNBP6LYJxwXbY5KBIza2C+wUgkTwSSIPNGSEBOVLA +gp3SyxRAmXXYfnQsQlZkfp1CGKTJNbuqZJNserB40Tm2BxoIsvzCKP9BHfHmL+2eeGDZ6qOhMmfW +1DJjqBdGBoE082PyRRtl7/HaE4mXRESxBSwZSSbTU8PDI6HWN8kyU1T8BswYZrpFD6rcQV6hxGXj ++X3egnt/YB8amJoC2Ac+FQnnKJiyvRM8CGJRgKE2SOAEOkB0Q/sbdydLXt5EcTNkx2C+6CyMQizs +LhJAcSyMYszHMWlGDSXyKECHVvU8Hvx3oIIBNrUefxZa8yjRi2mF7ptXOiSU3Y3stsJUFsq/r2/d +U4PRK0Qfcd7iPEnVaDgYDwj7wHVtgYA20Kre4FoEG3/XSioBYXBp9j3wXuxprRYCCYKlmMFo2s55 +rsoMnE6A6yhyFug5GDVBMzDYhrtlSpYtFcYeGCDZHXJeCy0ReMoOPWnwzzjZpZAaA19masbUeM63 +zbN9KvnUBqUOQ9Mes/lvPVq2dtVKvliyM1+kjavLKFKzbIxzRNcAkfc3aPenefA1w8CDqvtZg4oC +WYcOk/4+5cKGL26/8npTCs4qkEIJfzuo8WYaAqI7DuZp0A0UsN7FNwuUw0OCZGKfE7fBc7i5GXLF +woCwO2hR3bIQxWMh18otlLDM640cZrjnGPAwG92XmBCxn7dqFvlQo1/DbhzQtHaStI6Rqwwmb3vF +UuSAHpEssLQS3QVD+4Sfr3p7rXoFFqi5jumSBMwBBiKCp7Z9yUGRae98asBm2MqoAhsfRQZsfEDm +gAovrE+OKqcxgo2jnxyhnIKwPpn0B0ADQs+Tx30ADp8cgsCkh9+8NEHLRP4+9kUOIFokfzo4OzDc +EpNl4VYeFOQ6A3qOKTcr0K4mSR7LgkrsNbp7WqVlBasGJ8tw4NpolicGXYQUISzHJ8NAlHoYC7zA +M5QDfwNPAzkj0TR1p3NjlDMcKPWIFrZZEs+ocOCR98y1zV1Bd0WFxOFcNRsVXgFxsBo5neu0HZtR +JBCHUWGfJod5y3HIxD454prJ9VoRj+Isr3hma10jAtHeEesaCeERluvxhymls204kDW+D8Q40OFI +iOIS4kCgDgei/ORjNvyogEB8m/AgjSNmdb4J74wKiHEQHdLnOGhSNjPlSIiqmY4FCCT3Skmx1dBe +qKjPF9WoUOMgTZ9RjGIUo7BSob2kOirh49UZVZOKsQ6E6IgAj5goUa1RgUyOw4GYodiK7TczWxBm +LzqTLEkr2lFIpug4CJfsf6QdxT8mGIdUFnQgaYLNR+/7OMhaHfHsrN04IhDLrRP+IyGGonKTlkRB +GwdRlrOWvuFA0E6LL503I5Y1YiGU9zLeGA7yj4MeNTKTvtyTq5GbXOL5QmZqI185G12OSi7FVFZ3 +eIYD+RbznjZfOJWy6JXjGQkW1gjoLvfPcJBmu1S3C/PgJVJRd05/SRuxS+Yo5CvLp4ckllU0ajlZ +5csW1CuqJ4ra0krLe6TlXL8l5+XlqN85RxuZUYy87Sg/TPYZiJHosmLbMtEZCdUxVBvpGrMZBc/9 +I72WRTiyy5+RQEJ8DLdOO8nzGQ6ov7elmslStRkHpdXsWep7R0CbujMQO3g8HVmmnFGM4jdzS//Q +yHUGgnbkOOOAt7t0wznX7THBQGgN8xxqM6bm4kiP2BP4oZsIJLmoZhzkcOS5c7abaNqVbDZ9IGoc +REewS/LCZd8zizVd98hHrKWSPn12l2lxIyKQ/Pzon/twkMKbpptL9hHpz173x4GqT/ujnroPhFyO +nY4gy+lt37ZP9GcfDuR6JMtwRD8OF5sRxpEQG3kjSi6nJbTKJ97vQGRTyRatJPadi3YsQIBnWJi3 +Z0kluO/MPsOq3Syqli1Zkn8c7FT1Oqq5Ee7hQHokl26VPoKX4747whGdf0aMR3LGQXCEK5N4ZHlT +I5Ds2wj3CK9Ovq+uqfFnV5erfg2ibSTOBG1hAgQJJkB4gIGBn3nQYIAJ1A/QAAByYQIFDyRIgEA+ +gwYYsCAh4TAhggMTIEwAwRuULD1QNGDggDkoGjBwYIILGhYmOIBCA4SGO2ACBgwNLEhIOChAAWmB +hoYMFiY8wEC9oaHhQd7hwQAyoBChWLBAghCAAsUCgwQPJEhgmOCBBAkMDkh48OABZmXAFBYoNFjD +qajsPsz6AMKECgJZALkDAzEIs6VCTttLbGzl7T3uRm3QjYPcr0rMsUrkUWZD3sFfMi9uHyPpBwUN +JKn6FTTIth/+18Wv13bbq0ux8b1nyqVYmEulWMd0Jq+q4l3pHbnEbqojUhuh1o01DoM4VJ72YXfj +kep62X0/LgYKGhYoFBAYIA8iYPAABAYJFhqKwgQJFljAAPcDNNAgoaEBBuSjYQIAmAAAHjAuSIBc +KiDGt64s3NqlErNMpJK2uqz8qwBKiMPB8BI4HBiHktxLy1FKCwSAt4Qv5OPTlrj3fT7ZDRsb15kV +j/KK3sxIrfLp7fjJ21uUDRo0EKwb2nErabFtW+utprxBV5btSDRgvLxoIJprYgkIhHe7R05BA3lL +yYcEDWpU68SFrKSJkgcQKCw0REhgwMBwgPwNhN1AnAzxkdhzUg2WFQJxBKIJxe7qJsrF14gUhJq+ +kxJBiBjr55EpNVaiahZ9IOxOfimZaHQjgWKonQNBR+BIWDCKz9ww0uVqcW2z1AotpTifWf9HcfPh +JZwVs8bWsQDBMd/blnX3l9VGpfsJBgJxA7E6ELtfHYiBwDndkAnnzKivQ2CW0ueal9QOr2m348qK +VcoxtyEE0z4QOxDyu4EQzRyIptOmHIknrj078Rrv6s6Z1dW3L71ir6lGgSgpa1kUoxjFKMxGwTCK +QooU1rnfi+JWcq+onXxeURSvfBY5ilGYLKaSjWIUoxjFTROOYhSjYC5JThRAjofvFZONCvqlvKd0 +jsIoj9JGIlvJRgVGHAdJlhvFKEgTT3QkEAcUa6XkcRBWubXe0z3KPPIoRnEehWaFwyhuaRR7SYsq +R7kU5CYdB65z4UjsmGAcRoVNwnG4HH8URbfceRyoJcXO9JEQ7OFAkm+r5sysyJSkallpxbqWFJa0 +jwRSHxWn9NH6Wpyb7qqKWPQluPVi4VxuGendo3dunrIUy4uJ1ZYqa5Ny3a2aYiz5YR0VEj2pXA5a +uk3J2Og/rL2zQMo6FH0imSMoqvO60gOp4KacHu2cdAki4/m0uFK5dIsnvHOETSl1W1qTs/o0HS2j +mrDOOMht0ihQNW+XqrmovUu2kR3tdA7a1tHm6vfaiEe0SvCKUeEwilGMCorNWcUocmRy+kCmc926 +Y+Ju2hmJM48KyIfFKC6Hbu64xqFONzwRyDBlZhLnST8cHP1HY2XKveEZRW7ebI3DTc4Gm9qHyMBm +N31iWt52bk1tbRl6e22vWG039xbpzDp/hoa4eDt0pn0c6creVSq5ai1W0WIZ6mpWaWFyLlYe7c5Q +i5DzdHjMs61rW+QuzFNCbuY8Q77jr62pEfKMIGYaIdpHeP7kJ+7t4XZycmMXsrUm8/WRO0/1zBQZ +f3qYPBdQgJTdBRGo689I3ZG3Salu+7Dw3EoIs67Wospd07I9NtfPjZj4reNzPnFp99CSuw8N25br +lI6ztPOo5JBv95A3+/67JyZr7VKt8RFf2/ayrd3LW/Lx/rud9927yyfh5Z3RrJbbjNK2Mo+TSq1u +rMxnp3fLZj+p8fuZupZpt7KfrSrVG9W2jkH4M+MCENwmvhpVG2u/po23bVxqGAgEYrqpW6oeAAlA +KCIwNGBaKqAQoQIMSEAuoMCEhQRIIsIEB1RA/gkQKEzQALOpsG3JplxlHuf1WJcsj1V4EdmWx2w3 +lRCVL+90U/Q6/pip6djNRi2suYTHmzWm7u1zfyssdqY0sSOXDhWvWVdzs+rFmPS3dOLbXV0urfFG +ApFWbqyXepsbNqWz0k3VMq+aGTHZyZyQTYvOW0dZzhO/1W5/XFckHQnB5tw6sivFK9rZo7TPvgiR ++JYpbzl2m/SiZCc25flngnfhXlyqvfn9I1EXW7qxOfct8xc83UK9sknuEg+PYteqaK/S+V7SG9uv +e9kkPJ3a/mwPHdkUDo+hWu51auFp20bwTH9VRvbpos41ZXoikx7T6CZZvbRFl0O8peFHcbetYtIZ +Rd2obXrsaG+4hp86ChS+pr+g3qIeabtrtZW8ospWOsuvadEdb9FvFG3yZ5vtr8iT9EucUex3eG3a +sq4gG+JVuU6yIUQmpLr7SVo96ZJarTSK1uuZ9P6Ii+rs5HC1KO9izHceCfmN8AWjkLsxyuxTHmfk +palIS5XLype0u1lnzd5oT987wdT8HZ1Ymn+netSGoxBltaLzzVTvTFCLNHH0CigsLAABDEyQMAGE +BhIcUEFBYSEBCEQDFVBYWIAFCxU0oAEDyMAFo5icG9Gx0mP53WmqMa3ZpM4P+fcr2vfK2ijkLimp +/BtFN5rg8j98SuEbJhyJG1K9QYIEEkRgQO6lBkEFkJoAAB6QAQRlzIgEBokjZrKKOLvyO+nKWW4m +6QrfKWWOdK2w5urZePpbeoVbioraaZrGzCmqMw6Xybo5jYlUjbd45kExnHFossIRRlPqbksdiSfe +cPaOQ5OaDe9INJkuGuNh5RrqXPF4bw+3lzhxJXMEexzkzXQ5oiqGmJI7wm05mz0OmCPXHGF5jhwn +4k15TNd0hG8c5Ax3MItTc5WzOYmz9VR6PQ6mskatrbPaqjkOq3otI9WE/JuLvGNYPJg4jLyGdnQd +wdw58M71CDMj2/EB+djo0jxy1stlh+9ILSsKK5LqnM6O2O2kjhyHVEe0UucjtsfMycpLyiO4PwUi +gESECQ+IAwpQKCBMMAFCPogw4QEKGiIwLBQNaMk9Zj7vRpG4dtX51k3V/Dz5mJWsa4VaKXVVx5h3 +rL2I9t8obhTH12omRpUDiJmGiPVBw7XbBePwuzr7iADWVndXVX0acAg9q7ruqlmqSSrTtSuGoqiy +5r+7PLy7M6L9Z/iToXW3qJ73LKua11QVw11N5uD8xXBjI7ub3d397vKsvmxmhigwMw== + + + MzMz8+6UmadMVDRk4C1EPP7/637Vvd5d/0M8fGZTnqrqqape/0p7WmZSollaZtozcykv7WlXtftd +r/N+qUh5mffOe/a2JuU98//7Z4jaern7vuLj128NlUqtX5uWloaWlmZmZmZoZmZmZmaGZmZpZmmW +ZmmZlpZmaWZpaWlp99/df6dqV9q3mdlda6h1d8zJjGxsZthMdruljAy3d3R3nLbHgEZ3m7e3ZAlE +kZm3mdnZmamdmZmJlJmZuUmZmQVTZlHq4TCwoV4ynB7qvU+PVW9QUVUvdwi/ebiXhHuDeoe/vL/V +qpCX7Xln/VxdTrZuKqu00raqPTT8vY4FoiGu3tExcqF3x8h4NsfAt7OxKZmZ2TGYNVqjmR3VGLhv +t/EaMzszn4vDh4yDR2ZkTEVGxkTCRUb8MI9wZmNrE2Jj7xW7FbERG+uSsBux8dWIjYuNhIiDh3Wq +ysKyrZuct/cS9d22g0Ve393xHR3bGTAzDX+9p6h1zetd6jKgEpqyFdfa3HE1c7Uv72qL0Yqr9BCI +VVQSMuEmMqAZGuIlwyUSEuIGorSo1LQLJSlEIwEAAQRzEQAAaCQOCYYDErlcKIcAAPwBFIAFvJQ6 +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 +mtMh6SLzQr6P + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index ee54234..213d49a 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -176,6 +176,12 @@ that your company deserves a spot here, reach out to Connctd connctd.com + + Adopter * + Paralus + Paralus + paralus.io + From 7beb63ca4d9f88e09538a27b91ec556d1f1a4950 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Sat, 13 Aug 2022 09:15:56 -0500 Subject: [PATCH 060/164] chore: make the sync action testable (#164) --- .github/workflows/sync.yml | 420 +-------------------------- .github/workflows/test.yml | 13 + .gitignore | 4 +- Makefile | 37 +++ README.md | 22 +- install.sh | 579 ++++++++++++++++++------------------- package.json | 4 +- scripts/format.sh | 2 +- scripts/release.sh | 75 +++-- scripts/sync-action.sh | 20 -- scripts/sync-library.sh | 20 -- scripts/sync-server.sh | 20 -- scripts/sync.sh | 362 +++++++++++++++++------ 13 files changed, 679 insertions(+), 899 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 Makefile delete mode 100755 scripts/sync-action.sh delete mode 100755 scripts/sync-library.sh delete mode 100755 scripts/sync-server.sh diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index d315d79..5d4ef79 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -18,422 +18,18 @@ jobs: name: Synchronize Repositories runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 - uses: actions/setup-node@v3 with: - node-version: 16 - - name: Checkout - uses: actions/checkout@v2 - # installs moreutils on the Action worker node to use the sponge function - - name: Install sponge - run: sudo apt-get update -y && sudo apt-get install -y moreutils - # Ssh-agent action to get a ssh key with privileges to repos outside of /meta in this case the repositories you want to sync. + node-version: 18 - uses: webfactory/ssh-agent@v0.4.1 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - - name: Synchronize Ory Hydra - run: ./scripts/sync-server.sh ory/hydra master Hydra - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Keto - run: ./scripts/sync-server.sh ory/keto master Keto - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Oathkeeper - run: ./scripts/sync-server.sh ory/oathkeeper master Oathkeeper - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize server - - name: Synchronize Ory Kratos - # runs the sync-server bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName - run: ./scripts/sync-server.sh ory/kratos master Kratos - # sets the required github token as enviromental variable - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Hydra Login, Logout And Consent Node Example - run: | - ./scripts/sync-library.sh ory/hydra-login-consent-node master "Hydra Login, Logout And Consent Node Example" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Documentation - run: | - ./scripts/sync-library.sh ory/docs master "Documentation" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory CLI - run: | - ./scripts/sync-library.sh ory/cli master CLI - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize library - - name: Synchronize Ory Kratos SelfService UI Node Example - # runs the sync-library bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName - run: | - ./scripts/sync-library.sh ory/kratos-selfservice-ui-node master "Kratos SelfService UI Node Example" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Kratos SelfService UI React Native Example - run: | - ./scripts/sync-library.sh ory/kratos-selfservice-ui-react-native master "Kratos SelfService UI React Native Example" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Fosite - run: ./scripts/sync-library.sh ory/fosite master Fosite - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Dockertest - run: ./scripts/sync-library.sh ory/dockertest v3 Dockertest - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Herodot - run: ./scripts/sync-library.sh ory/herodot master Herodot - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Graceful - run: ./scripts/sync-library.sh ory/graceful master Graceful - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Themes - run: ./scripts/sync-library.sh ory/themes master Themes - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Kubernetes Resources - run: ./scripts/sync-library.sh ory/k8s master "Kubernetes Resources" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory X - run: ./scripts/sync-library.sh ory/x master X - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Web - run: ./scripts/sync-library.sh ory/web master Web - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - # Synchronize action - - name: Syncronize Ory Closed Reference Notifier - # runs the sync-action bash script in the Action workers CLI with arguments: $1=workdir (the repository you want to sync) $2=branch $3=humanName - run: - ./scripts/sync-action.sh ory/closed-reference-notifier master "Closed - Reference Notifier" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Syncronize Ory Label Sync Action - run: - ./scripts/sync-action.sh ory/label-sync-action master "Label Sync - Action" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Syncronize Ory Milestone Action - run: - ./scripts/sync-action.sh ory/milestone-action master "Milestone - Action" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Syncronize Ory Prettier Styles Action - run: - ./scripts/sync-action.sh ory/prettier-styles master "Prettier Styles" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Syncronize Ory Buildbuf Action - run: - ./scripts/sync-action.sh ory/build-buf-action main "Buildbuf Action" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Examples - run: ./scripts/sync-library.sh ory/examples master Examples - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Hydra Maester - run: - ./scripts/sync-library.sh ory/hydra-maester master "Ory Hydra Maester" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Oathkeeper Maester - run: - ./scripts/sync-library.sh ory/oathkeeper-maester master "Ory - Oathkeeper Maester" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory SDK - run: ./scripts/sync-library.sh ory/sdk master "Ory SDK" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize Ory Platform - run: ./scripts/sync-library.sh ory/platform master "Ory Platform" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-dotnet - run: - ./scripts/sync-library.sh ory/keto-client-dotnet master "Ory Keto - Dotnet Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-java - run: - ./scripts/sync-library.sh ory/keto-client-java master "Ory Keto Java - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-rust - run: - ./scripts/sync-library.sh ory/keto-client-rust master "Ory Keto Rust - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-dart - run: - ./scripts/sync-library.sh ory/keto-client-dart master "Ory Keto Dart - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-js - run: - ./scripts/sync-library.sh ory/keto-client-js master "Ory Keto - JavaScript Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-php - run: - ./scripts/sync-library.sh ory/keto-client-php master "Ory Keto PHP - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-go - run: - ./scripts/sync-library.sh ory/keto-client-go master "Ory Keto Go - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-ruby - run: - ./scripts/sync-library.sh ory/keto-client-ruby master "Ory Keto Ruby - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize keto-client-python - run: - ./scripts/sync-library.sh ory/keto-client-python master "Ory Keto - Python Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-dotnet - run: - ./scripts/sync-library.sh ory/kratos-client-dotnet master "Ory Kratos - Dotnet Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-java - run: - ./scripts/sync-library.sh ory/kratos-client-java master "Ory Kratos - Java Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-rust - run: - ./scripts/sync-library.sh ory/kratos-client-rust master "Ory Kratos - Rust Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-dart - run: - ./scripts/sync-library.sh ory/kratos-client-dart master "Ory Kratos - Dart Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-js - run: - ./scripts/sync-library.sh ory/kratos-client-js master "Ory Kratos - JavaScript Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-php - run: - ./scripts/sync-library.sh ory/kratos-client-php master "Ory Kratos PHP - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-go - run: - ./scripts/sync-library.sh ory/kratos-client-go master "Ory Kratos Go - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-ruby - run: - ./scripts/sync-library.sh ory/kratos-client-ruby master "Ory Kratos - Ruby Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize kratos-client-python - run: - ./scripts/sync-library.sh ory/kratos-client-python master "Ory Kratos - Python Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-dotnet - run: - ./scripts/sync-library.sh ory/hydra-client-dotnet master "Ory Hydra - Dotnet Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-java - run: - ./scripts/sync-library.sh ory/hydra-client-java master "Ory Hydra Java - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-rust - run: - ./scripts/sync-library.sh ory/hydra-client-rust master "Ory Hydra Rust - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-dart - run: - ./scripts/sync-library.sh ory/hydra-client-dart master "Ory Hydra Dart - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-js - run: - ./scripts/sync-library.sh ory/hydra-client-js master "Ory Hydra - JavaScript Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-php - run: - ./scripts/sync-library.sh ory/hydra-client-php master "Ory Hydra PHP - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-go - run: - ./scripts/sync-library.sh ory/hydra-client-go master "Ory Hydra Go - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-ruby - run: - ./scripts/sync-library.sh ory/hydra-client-ruby master "Ory Hydra Ruby - Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize hydra-client-python - run: - ./scripts/sync-library.sh ory/hydra-client-python master "Ory Hydra - Python Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-dotnet - run: - ./scripts/sync-library.sh ory/oathkeeper-client-dotnet master "Ory - Oathkeeper Dotnet Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-java - run: - ./scripts/sync-library.sh ory/oathkeeper-client-java master "Ory - Oathkeeper Java Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-rust - run: - ./scripts/sync-library.sh ory/oathkeeper-client-rust master "Ory - Oathkeeper Rust Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-dart - run: - ./scripts/sync-library.sh ory/oathkeeper-client-dart master "Ory - Oathkeeper Dart Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-js - run: - ./scripts/sync-library.sh ory/oathkeeper-client-js master "Ory - Oathkeeper JavaScript Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-php - run: - ./scripts/sync-library.sh ory/oathkeeper-client-php master "Ory - Oathkeeper PHP Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-go - run: - ./scripts/sync-library.sh ory/oathkeeper-client-go master "Ory - Oathkeeper Go Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-ruby - run: - ./scripts/sync-library.sh ory/oathkeeper-client-ruby master "Ory - Oathkeeper Ruby Client" - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} - - - name: Synchronize oathkeeper-client-python - run: - ./scripts/sync-library.sh ory/oathkeeper-client-python master "Ory - Oathkeeper Python Client" + - run: | + source ./scripts/sync.sh + install_dependencies_on_ci + configure_git_on_ci + workspace=$(create_workspace) + replicate_all "$workspace" "push" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..d004b70 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,13 @@ +name: Test + +on: + pull_request: + types: [opened, reopened] + push: + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: make test diff --git a/.gitignore b/.gitignore index 308e2a1..c496caf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ +.bin +.idea node_modules - -.idea \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..03b4ed7 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +format: .bin/shfmt node_modules # formats the source code + echo formatting ... + .bin/shfmt --write . + npm run format + +help: # shows all available Make commands + cat Makefile | grep '^[^ ]*:' | grep -v '^\.bin/' | grep -v '^node_modules' | grep -v '.SILENT:' | grep -v help | sed 's/:.*#/#/' | column -s "#" -t + +test: .bin/shellcheck .bin/shfmt node_modules # runs all linters + echo running tests ... + find . -name '*.sh' | xargs .bin/shellcheck + echo Verifying formatting ... + .bin/shfmt --list . + npm run format:check + +.bin/shellcheck: Makefile + echo installing Shellcheck ... + curl -sSL https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz | tar xJ + mkdir -p .bin + mv shellcheck-stable/shellcheck .bin + rm -rf shellcheck-stable + touch .bin/shellcheck # update the timestamp so that Make doesn't re-install the file over and over again + +.bin/shfmt: Makefile + echo installing Shellfmt ... + mkdir -p .bin + curl -sSL https://github.com/mvdan/sh/releases/download/v3.5.1/shfmt_v3.5.1_linux_amd64 -o .bin/shfmt + chmod +x .bin/shfmt + +node_modules: package.json package-lock.json + echo installing Prettier ... + npm ci + touch node_modules # update timestamp so that Make doesn't reinstall it over and over + + +.SILENT: +.DEFAULT_GOAL := help diff --git a/README.md b/README.md index cca90b8..d1685c5 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,28 @@ will be published using a GitHub Action. The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to synchronize all Ory repositories to a common template, including README, CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero -manual interaction. +manual interaction. + Depending on repository type (server, library, action) specific templates can be -copied as well. +copied as well. + The project names, links to documentation ect. are being substituted for each -project in [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). +project in [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). For more details please refer to the documentation within the [scripts](https://github.com/ory/meta/tree/master/scripts). For more details on the workflow please refer to the documentation within [sync.yml](https://github.com/ory/meta/blob/master/.github/workflows/sync.yml) + +To test the sync script locally, open a Bash terminal and copy the respective +commands from [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh) +into the terminal. For example, to run all sync jobs: + +``` +source ./scripts/sync.sh +workspace=$(create_workspace) +replicate_all "$workspace" "keep" +``` + +Please make sure to change `"push"` to `"keep"` to skip committing and pushing +the changes. `cd $workspace` goes to the folder that contains the cloned and +modified repos so that you can see the changes made to them. diff --git a/install.sh b/install.sh index a87f49a..26a4fba 100755 --- a/install.sh +++ b/install.sh @@ -4,8 +4,8 @@ set -e FLAVOR="_sqlite" usage() { - this=$1 - cat < [] @@ -28,66 +28,66 @@ Usage: $this [-b] bindir [-d] [] $ bash <(curl -s https://raw.githubusercontent.com/ory/meta/master/install.sh) kratos v0.8.0-alpha.2 EOF - exit 2 + exit 2 } parse_args() { - #BINDIR is ./bin unless set be ENV - # over-ridden by flag below - - BINDIR=${BINDIR:-./bin} - while getopts "b:dhs?x" arg; do - case "$arg" in - b) BINDIR="$OPTARG" ;; - s) FLAVOR="" ;; - d) log_set_priority 10 ;; - h | \?) usage "$0" ;; - x) set -x ;; - esac - done - shift $((OPTIND - 1)) - - [ -z "$1" ] && (echo "Please specify the project you want to download. Possible values are: keto, kratos, hydra, oathkeeper, ory." && exit 1) - TAG=$2 - - case "$1" in - - ory) - REPO="cli" - BINARY=ory - PROJECT_NAME=ory - ;; - - keto) - REPO="keto" - BINARY=keto - PROJECT_NAME=keto - ;; - - kratos) - REPO="kratos" - BINARY=kratos - PROJECT_NAME=kratos - ;; - - hydra) - REPO="hydra" - BINARY=hydra - PROJECT_NAME=hydra - ;; - - oathkeeper) - REPO="oathkeeper" - BINARY=oathkeeper - PROJECT_NAME=oathkeeper - FLAVOR="" - ;; - - *) - echo "The project you specified is unknown. Please choose one of \"ory\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." - exit 1 - ;; - esac + #BINDIR is ./bin unless set be ENV + # over-ridden by flag below + + BINDIR=${BINDIR:-./bin} + while getopts "b:dhs?x" arg; do + case "$arg" in + b) BINDIR="$OPTARG" ;; + s) FLAVOR="" ;; + d) log_set_priority 10 ;; + h | \?) usage "$0" ;; + x) set -x ;; + esac + done + shift $((OPTIND - 1)) + + [ -z "$1" ] && (echo "Please specify the project you want to download. Possible values are: keto, kratos, hydra, oathkeeper, ory." && exit 1) + TAG=$2 + + case "$1" in + + ory) + REPO="cli" + BINARY=ory + PROJECT_NAME=ory + ;; + + keto) + REPO="keto" + BINARY=keto + PROJECT_NAME=keto + ;; + + kratos) + REPO="kratos" + BINARY=kratos + PROJECT_NAME=kratos + ;; + + hydra) + REPO="hydra" + BINARY=hydra + PROJECT_NAME=hydra + ;; + + oathkeeper) + REPO="oathkeeper" + BINARY=oathkeeper + PROJECT_NAME=oathkeeper + FLAVOR="" + ;; + + *) + echo "The project you specified is unknown. Please choose one of \"ory\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." + exit 1 + ;; + esac } # this function wraps all the destructive operations @@ -95,75 +95,75 @@ parse_args() { # network, either nothing will happen or will syntax error # out preventing half-done work execute() { - tmpdir=$(mktemp -d) - log_debug "downloading files into ${tmpdir}" - http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}" - http_download "${tmpdir}/${CHECKSUM}" "${CHECKSUM_URL}" - hash_sha256_verify "${tmpdir}/${TARBALL}" "${tmpdir}/${CHECKSUM}" - srcdir="${tmpdir}" - (cd "${tmpdir}" && untar "${TARBALL}") - test ! -d "${BINDIR}" && install -d "${BINDIR}" - for binexe in $BINARIES; do - if [ "$OS" = "windows" ]; then - binexe="${binexe}.exe" - fi - install "${srcdir}/${binexe}" "${BINDIR}/" - log_info "installed ${BINDIR}/${binexe}" - done - rm -rf "${tmpdir}" + tmpdir=$(mktemp -d) + log_debug "downloading files into ${tmpdir}" + http_download "${tmpdir}/${TARBALL}" "${TARBALL_URL}" + http_download "${tmpdir}/${CHECKSUM}" "${CHECKSUM_URL}" + hash_sha256_verify "${tmpdir}/${TARBALL}" "${tmpdir}/${CHECKSUM}" + srcdir="${tmpdir}" + (cd "${tmpdir}" && untar "${TARBALL}") + test ! -d "${BINDIR}" && install -d "${BINDIR}" + for binexe in $BINARIES; do + if [ "$OS" = "windows" ]; then + binexe="${binexe}.exe" + fi + install "${srcdir}/${binexe}" "${BINDIR}/" + log_info "installed ${BINDIR}/${binexe}" + done + rm -rf "${tmpdir}" } get_binaries() { - case "$PLATFORM" in - darwin/amd64) BINARIES="$BINARY" ;; - darwin/arm64) BINARIES="$BINARY" ;; - linux/amd64) BINARIES="$BINARY" ;; - linux/arm64) BINARIES="$BINARY" ;; - windows/amd64) BINARIES="$BINARY" ;; - *) - log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" - exit 1 - ;; - esac + case "$PLATFORM" in + darwin/amd64) BINARIES="$BINARY" ;; + darwin/arm64) BINARIES="$BINARY" ;; + linux/amd64) BINARIES="$BINARY" ;; + linux/arm64) BINARIES="$BINARY" ;; + windows/amd64) BINARIES="$BINARY" ;; + *) + log_crit "platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" + exit 1 + ;; + esac } tag_to_version() { - if [ -z "${TAG}" ]; then - log_info "checking GitHub for latest tag" - else - log_info "checking GitHub for tag '${TAG}'" - fi - REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true - if test -z "$REALTAG"; then - log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details" - exit 1 - fi - # if version starts with 'v', remove it - TAG="$REALTAG" - VERSION=${TAG#v} + if [ -z "${TAG}" ]; then + log_info "checking GitHub for latest tag" + else + log_info "checking GitHub for tag '${TAG}'" + fi + REALTAG=$(github_release "$OWNER/$REPO" "${TAG}") && true + if test -z "$REALTAG"; then + log_crit "unable to find '${TAG}' - use 'latest' or see https://github.com/${PREFIX}/releases for details" + exit 1 + fi + # if version starts with 'v', remove it + TAG="$REALTAG" + VERSION=${TAG#v} } adjust_format() { - # change format (tar.gz or zip) based on OS - case ${OS} in - windows) FORMAT=zip ;; - esac - true + # change format (tar.gz or zip) based on OS + case ${OS} in + windows) FORMAT=zip ;; + esac + true } adjust_os() { - # adjust archive name based on OS - case ${OS} in - 386) OS=32bit ;; - amd64) OS=64bit ;; - darwin) OS=macOS ;; - esac - true + # adjust archive name based on OS + case ${OS} in + 386) OS=32bit ;; + amd64) OS=64bit ;; + darwin) OS=macOS ;; + esac + true } adjust_arch() { - # adjust archive name based on ARCH - case ${ARCH} in - 386) ARCH=32bit ;; - amd64) ARCH=64bit ;; - darwin) ARCH=macOS ;; - esac - true + # adjust archive name based on ARCH + case ${ARCH} in + 386) ARCH=32bit ;; + amd64) ARCH=64bit ;; + darwin) ARCH=macOS ;; + esac + true } cat /dev/null </dev/null + command -v "$1" >/dev/null } echoerr() { - echo "$@" 1>&2 + echo "$@" 1>&2 } log_prefix() { - echo "$0" + echo "$0" } _logp=6 log_set_priority() { - _logp="$1" + _logp="$1" } log_priority() { - if test -z "$1"; then - echo "$_logp" - return - fi - [ "$1" -le "$_logp" ] + if test -z "$1"; then + echo "$_logp" + return + fi + [ "$1" -le "$_logp" ] } log_tag() { - case $1 in - 0) echo "emerg" ;; - 1) echo "alert" ;; - 2) echo "crit" ;; - 3) echo "err" ;; - 4) echo "warning" ;; - 5) echo "notice" ;; - 6) echo "info" ;; - 7) echo "debug" ;; - *) echo "$1" ;; - esac + case $1 in + 0) echo "emerg" ;; + 1) echo "alert" ;; + 2) echo "crit" ;; + 3) echo "err" ;; + 4) echo "warning" ;; + 5) echo "notice" ;; + 6) echo "info" ;; + 7) echo "debug" ;; + *) echo "$1" ;; + esac } log_debug() { - log_priority 7 || return 0 - echoerr "$(log_prefix)" "$(log_tag 7)" "$@" + log_priority 7 || return 0 + echoerr "$(log_prefix)" "$(log_tag 7)" "$@" } log_info() { - log_priority 6 || true - echoerr "$(log_prefix)" "$(log_tag 6)" "$@" + log_priority 6 || true + echoerr "$(log_prefix)" "$(log_tag 6)" "$@" } log_err() { - log_priority 3 || true - echoerr "$(log_prefix)" "$(log_tag 3)" "$@" + log_priority 3 || true + echoerr "$(log_prefix)" "$(log_tag 3)" "$@" } log_crit() { - log_priority 2 || true - echoerr "$(log_prefix)" "$(log_tag 2)" "$@" + log_priority 2 || true + echoerr "$(log_prefix)" "$(log_tag 2)" "$@" } uname_os() { - os=$(uname -s | tr '[:upper:]' '[:lower:]') - case "$os" in - cygwin_nt*) os="windows" ;; - mingw*) os="windows" ;; - msys_nt*) os="windows" ;; - esac - echo "$os" + os=$(uname -s | tr '[:upper:]' '[:lower:]') + case "$os" in + cygwin_nt*) os="windows" ;; + mingw*) os="windows" ;; + msys_nt*) os="windows" ;; + esac + echo "$os" } uname_arch() { - arch=$(uname -m) - case $arch in - x86_64) arch="amd64" ;; - x86) arch="386" ;; - i686) arch="386" ;; - i386) arch="386" ;; - aarch64) arch="arm64" ;; - armv5*) arch="armv5" ;; - armv6*) arch="armv6" ;; - armv7*) arch="armv7" ;; - esac - echo ${arch} + arch=$(uname -m) + case $arch in + x86_64) arch="amd64" ;; + x86) arch="386" ;; + i686) arch="386" ;; + i386) arch="386" ;; + aarch64) arch="arm64" ;; + armv5*) arch="armv5" ;; + armv6*) arch="armv6" ;; + armv7*) arch="armv7" ;; + esac + echo ${arch} } uname_os_check() { - os=$(uname_os) - case "$os" in - darwin) return 0 ;; - dragonfly) return 0 ;; - freebsd) return 0 ;; - linux) return 0 ;; - android) return 0 ;; - nacl) return 0 ;; - netbsd) return 0 ;; - openbsd) return 0 ;; - plan9) return 0 ;; - solaris) return 0 ;; - windows) return 0 ;; - esac - log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" - return 1 + os=$(uname_os) + case "$os" in + darwin) return 0 ;; + dragonfly) return 0 ;; + freebsd) return 0 ;; + linux) return 0 ;; + android) return 0 ;; + nacl) return 0 ;; + netbsd) return 0 ;; + openbsd) return 0 ;; + plan9) return 0 ;; + solaris) return 0 ;; + windows) return 0 ;; + esac + log_crit "uname_os_check '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" + return 1 } uname_arch_check() { - arch=$(uname_arch) - case "$arch" in - 386) return 0 ;; - amd64) return 0 ;; - arm64) return 0 ;; - armv5) return 0 ;; - armv6) return 0 ;; - armv7) return 0 ;; - ppc64) return 0 ;; - ppc64le) return 0 ;; - mips) return 0 ;; - mipsle) return 0 ;; - mips64) return 0 ;; - mips64le) return 0 ;; - s390x) return 0 ;; - amd64p32) return 0 ;; - esac - log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" - return 1 + arch=$(uname_arch) + case "$arch" in + 386) return 0 ;; + amd64) return 0 ;; + arm64) return 0 ;; + armv5) return 0 ;; + armv6) return 0 ;; + armv7) return 0 ;; + ppc64) return 0 ;; + ppc64le) return 0 ;; + mips) return 0 ;; + mipsle) return 0 ;; + mips64) return 0 ;; + mips64le) return 0 ;; + s390x) return 0 ;; + amd64p32) return 0 ;; + esac + log_crit "uname_arch_check '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" + return 1 } untar() { - tarball=$1 - case "${tarball}" in - *.tar.gz | *.tgz) tar --no-same-owner -xzf "${tarball}" ;; - *.tar) tar --no-same-owner -xf "${tarball}" ;; - *.zip) unzip "${tarball}" ;; - *) - log_err "untar unknown archive format for ${tarball}" - return 1 - ;; - esac + tarball=$1 + case "${tarball}" in + *.tar.gz | *.tgz) tar --no-same-owner -xzf "${tarball}" ;; + *.tar) tar --no-same-owner -xf "${tarball}" ;; + *.zip) unzip "${tarball}" ;; + *) + log_err "untar unknown archive format for ${tarball}" + return 1 + ;; + esac } http_download_curl() { - local_file=$1 - source_url=$2 - header=$3 - if [ -z "$header" ]; then - code=$(curl -w '%{http_code}' -sL -o "$local_file" "$source_url") - else - code=$(curl -w '%{http_code}' -sL -H "$header" -o "$local_file" "$source_url") - fi - if [ "$code" != "200" ]; then - log_debug "http_download_curl received HTTP status $code" - return 1 - fi - return 0 + local_file=$1 + source_url=$2 + header=$3 + if [ -z "$header" ]; then + code=$(curl -w '%{http_code}' -sL -o "$local_file" "$source_url") + else + code=$(curl -w '%{http_code}' -sL -H "$header" -o "$local_file" "$source_url") + fi + if [ "$code" != "200" ]; then + log_debug "http_download_curl received HTTP status $code" + return 1 + fi + return 0 } http_download_wget() { - local_file=$1 - source_url=$2 - header=$3 - if [ -z "$header" ]; then - wget -q -O "$local_file" "$source_url" - else - wget -q --header "$header" -O "$local_file" "$source_url" - fi + local_file=$1 + source_url=$2 + header=$3 + if [ -z "$header" ]; then + wget -q -O "$local_file" "$source_url" + else + wget -q --header "$header" -O "$local_file" "$source_url" + fi } http_download() { - log_debug "http_download $2" - if is_command curl; then - http_download_curl "$@" - return - elif is_command wget; then - http_download_wget "$@" - return - fi - log_crit "http_download unable to find wget or curl" - return 1 + log_debug "http_download $2" + if is_command curl; then + http_download_curl "$@" + return + elif is_command wget; then + http_download_wget "$@" + return + fi + log_crit "http_download unable to find wget or curl" + return 1 } http_copy() { - tmp=$(mktemp) - http_download "${tmp}" "$1" "$2" || return 1 - body=$(cat "$tmp") - rm -f "${tmp}" - echo "$body" + tmp=$(mktemp) + http_download "${tmp}" "$1" "$2" || return 1 + body=$(cat "$tmp") + rm -f "${tmp}" + echo "$body" } github_release() { - owner_repo=$1 - version=$2 - test -z "$version" && version="latest" - giturl="https://github.com/${owner_repo}/releases/${version}" - json=$(http_copy "$giturl" "Accept:application/json") - test -z "$json" && return 1 - version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//') - test -z "$version" && return 1 - echo "$version" + owner_repo=$1 + version=$2 + test -z "$version" && version="latest" + giturl="https://github.com/${owner_repo}/releases/${version}" + json=$(http_copy "$giturl" "Accept:application/json") + test -z "$json" && return 1 + version=$(echo "$json" | tr -s '\n' ' ' | sed 's/.*"tag_name":"//' | sed 's/".*//') + test -z "$version" && return 1 + echo "$version" } hash_sha256() { - TARGET=${1:-/dev/stdin} - if is_command gsha256sum; then - hash=$(gsha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command sha256sum; then - hash=$(sha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command shasum; then - hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command openssl; then - hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f a - else - log_crit "hash_sha256 unable to find command to compute sha-256 hash" - return 1 - fi + TARGET=${1:-/dev/stdin} + if is_command gsha256sum; then + hash=$(gsha256sum "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command sha256sum; then + hash=$(sha256sum "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command shasum; then + hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 + echo "$hash" | cut -d ' ' -f 1 + elif is_command openssl; then + hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 + echo "$hash" | cut -d ' ' -f a + else + log_crit "hash_sha256 unable to find command to compute sha-256 hash" + return 1 + fi } hash_sha256_verify() { - TARGET=$1 - checksums=$2 - if [ -z "$checksums" ]; then - log_err "hash_sha256_verify checksum file not specified in arg2" - return 1 - fi - BASENAME=${TARGET##*/} - want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) - if [ -z "$want" ]; then - log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'" - return 1 - fi - got=$(hash_sha256 "$TARGET") - if [ "$want" != "$got" ]; then - log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got" - return 1 - fi + TARGET=$1 + checksums=$2 + if [ -z "$checksums" ]; then + log_err "hash_sha256_verify checksum file not specified in arg2" + return 1 + fi + BASENAME=${TARGET##*/} + want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) + if [ -z "$want" ]; then + log_err "hash_sha256_verify unable to find checksum for '${TARGET}' in '${checksums}'" + return 1 + fi + got=$(hash_sha256 "$TARGET") + if [ "$want" != "$got" ]; then + log_err "hash_sha256_verify checksum for '$TARGET' did not verify ${want} vs $got" + return 1 + fi } cat /dev/null < "$workdir/docs/docs/contributing.md" +set -Eexuo pipefail # abort the script on error + +# replicate shared data from this repo into all repositories at Ory +# +# Arguments: +# $push == "push" --> commit and push to Github +# $push == "none" --> don't commit or push +function replicate_all { + # verify arguments + local -r workspace=$1 + if [ -z "$workspace" ]; then + echo "ERROR (sync_all): please provide the path to a workspace directory" + exit 1 + fi + if [ ! -d "$workspace" ]; then + echo "ERROR (sync_all): provided workspace ($workspace) is not a directory" + exit 1 + fi + local -r push=$2 + if [ "$push" != "push" ] && [ "$push" != "none" ]; then + echo "ERROR (sync_all): unknown value for \"push\" argument: \"$push\". Please provide either \"push\" or \"none\"." + exit 1 + fi + replicate ory/hydra server "Hydra" "$workspace" "$push" + replicate ory/keto server "Keto" "$workspace" "$push" + replicate ory/oathkeeper server "Oathkeeper" "$workspace" "$push" + replicate ory/kratos server "Kratos" "$workspace" "$push" + replicate ory/hydra-login-consent-node library "Hydra Login, Logout And Consent Node Example" "$workspace" "$push" + replicate ory/docs library "Documentation" "$workspace" "$push" + replicate ory/cli library "CLI" "$workspace" "$push" + replicate ory/kratos-selfservice-ui-node library "Kratos SelfService UI Node Example" "$workspace" "$push" + replicate ory/kratos-selfservice-ui-react-native library "Kratos SelfService UI React Native Example" "$workspace" "$push" + replicate ory/fosite library "Fosite" "$workspace" "$push" + replicate ory/dockertest library "Dockertest" "$workspace" "$push" + replicate ory/herodot library "Herodot" "$workspace" "$push" + replicate ory/graceful library "Graceful" "$workspace" "$push" + # TODO: uncomment once https://github.com/ory/themes/pull/62 ships + # replicate ory/themes library "Themes" "$workspace" "$push" + replicate ory/k8s library "Kubernetes Resources" "$workspace" "$push" + replicate ory/x library "X" "$workspace" "$push" + replicate ory/web library "Web" "$workspace" "$push" + replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$push" + replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$push" + replicate ory/milestone-action action "Milestone Action" "$workspace" "$push" + replicate ory/prettier-styles action "Prettier Styles" "$workspace" "$push" + replicate ory/build-buf-action action "Buildbuf Action" "$workspace" "$push" + replicate ory/examples library "Examples" "$workspace" "$push" + replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$push" + replicate ory/oathkeeper-maester library "Ory Oathkeeper Maester" "$workspace" "$push" + replicate ory/sdk library "Ory SDK" "$workspace" "$push" + replicate ory/platform library "Ory Platform" "$workspace" "$push" + replicate ory/keto-client-dotnet library "Ory Keto Dotnet Client" "$workspace" "$push" + replicate ory/keto-client-java library "Ory Keto Java Client" "$workspace" "$push" + replicate ory/keto-client-rust library "Ory Keto Rust Client" "$workspace" "$push" + replicate ory/keto-client-dart library "Ory Keto Dart Client" "$workspace" "$push" + replicate ory/keto-client-js library "Ory Keto JavaScript Client" "$workspace" "$push" + replicate ory/keto-client-php library "Ory Keto PHP Client" "$workspace" "$push" + replicate ory/keto-client-go library "Ory Keto Go Client" "$workspace" "$push" + replicate ory/keto-client-ruby library "Ory Keto Ruby Client" "$workspace" "$push" + replicate ory/keto-client-python library "Ory Keto Python Client" "$workspace" "$push" + replicate ory/kratos-client-dotnet library "Ory Kratos Dotnet Client" "$workspace" "$push" + replicate ory/kratos-client-java library "Ory Kratos Java Client" "$workspace" "$push" + replicate ory/kratos-client-rust library "Ory Kratos Rust Client" "$workspace" "$push" + replicate ory/kratos-client-dart library "Ory Kratos Dart Client" "$workspace" "$push" + replicate ory/kratos-client-js library "Ory Kratos JavaScript Client" "$workspace" "$push" + replicate ory/kratos-client-php library "Ory Kratos PHP Client" "$workspace" "$push" + replicate ory/kratos-client-go library "Ory Kratos Go Client" "$workspace" "$push" + replicate ory/kratos-client-ruby library "Ory Kratos Ruby Client" "$workspace" "$push" + replicate ory/kratos-client-python library "Ory Kratos Python Client" "$workspace" "$push" + replicate ory/hydra-client-dotnet library "Ory Hydra Dotnet Client" "$workspace" "$push" + replicate ory/hydra-client-java library "Ory Hydra Java Client" "$workspace" "$push" + replicate ory/hydra-client-rust library "Ory Hydra Rust Client" "$workspace" "$push" + replicate ory/hydra-client-dart library "Ory Hydra Dart Client" "$workspace" "$push" + replicate ory/hydra-client-js library "Ory Hydra JavaScript Client" "$workspace" "$push" + replicate ory/hydra-client-php library "Ory Hydra PHP Client" "$workspace" "$push" + replicate ory/hydra-client-go library "Ory Hydra Go Client" "$workspace" "$push" + replicate ory/hydra-client-ruby library "Ory Hydra Ruby Client" "$workspace" "$push" + replicate ory/hydra-client-python library "Ory Hydra Python Client" "$workspace" "$push" + replicate ory/oathkeeper-client-dotnet library "Ory Oathkeeper Dotnet Client" "$workspace" "$push" + replicate ory/oathkeeper-client-java library "Ory Oathkeeper Java Client" "$workspace" "$push" + replicate ory/oathkeeper-client-rust library "Ory Oathkeeper Rust Client" "$workspace" "$push" + replicate ory/oathkeeper-client-dart library "Ory Oathkeeper Dart Client" "$workspace" "$push" + replicate ory/oathkeeper-client-js library "Ory Oathkeeper JavaScript Client" "$workspace" "$push" + replicate ory/oathkeeper-client-php library "Ory Oathkeeper PHP Client" "$workspace" "$push" + replicate ory/oathkeeper-client-go library "Ory Oathkeeper Go Client" "$workspace" "$push" + replicate ory/oathkeeper-client-ruby library "Ory Oathkeeper Ruby Client" "$workspace" "$push" + replicate ory/oathkeeper-client-python library "Ory Oathkeeper Python Client" "$workspace" "$push" +} + +# replicates the info in this repository into the given target repository +function replicate { + # verify arguments + local -r repo_id=$1 + if [ -z "$repo_id" ]; then + echo "ERROR (replicate): argument \"repo_id\" is missing. Please provide the XXX part of the URL: https://github.com/XXX" + exit 1 + fi + local -r repo_type=$2 + if [ "$repo_type" != "action" ] && [ "$repo_type" != "library" ] && [ "$repo_type" != "server" ]; then + echo "ERROR (replicate): invalid argument \"repo_type\": \"$repo_type\". Please provide either \"action\", \"library\", or \"server\"" + exit 1 + fi + local -r human_name=$3 + if [ -z "$human_name" ]; then + echo 'ERROR (replicate): argument "human_name" is missing' + exit 1 + fi + local -r workspace=$4 + if [ -z "$workspace" ]; then + echo 'ERROR (replicate): argument "workspace" is missing' + exit 1 + fi + local -r push=$5 + if [ "$push" != "push" ] && [ "$push" != "none" ]; then + echo "ERROR (replicate): Unknown value for \"push\" argument: \"$push\". Please provide either \"push\" or \"none\"." + exit 1 + fi + + # clone if the codebase doesn't exist in the workspace yet + local -r repo_name=$(basename "$repo_id") + local -r repo_path="$workspace/$repo_name" + if [ ! -d "$repo_path" ]; then + clone "$repo_id" "$repo_path" + fi + + # replicate changes from meta into this repo + copy_templates "$repo_path" "$repo_type" + substitutePlaceholders "$repo_id" "$repo_path" "https://github.com/$repo_id/discussions" "$human_name" + if [ -d "$repo_id/docs/docs" ]; then + copy_contributing_guide_to_docs "$repo_id" + fi + add_adopters_to_readme "$repo_id" + add_ecosystem_to_readme "$repo_id" + if test -f package.json; then + format "$repo_path" + fi + + # optionally commit + if [ "$push" == "push" ]; then + commit_changes + push_changes + fi +} + +############################################################ +### INDIVIDUAL ACTIVITIES + +function add_adopters_to_readme { + local -r workdir=$1 + perl -0pe 's#.*\n#`cat templates/repository/common/ADOPTERS.md`#gse' -i "$workdir/README.md" +} + +# adds an overview of all projects to README.md +function add_ecosystem_to_readme { + local -r workdir=$1 + perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$workdir/README.md" +} + +# clones the given project onto the local machine +function clone { + local -r repo_id=$1 + local -r repo_path=$2 + git clone --depth 1 "git@github.com:$repo_id.git" "$repo_path" +} + +# commits the changes in the current directory to the local Git client +function commit_changes { + git add -A + git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" +} + +# configures the Git client on CI +function configure_git_on_ci { + # set git email & username + bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/git.sh) + # change global url from https://github.com/ to git@github.com: + git config --global url."git@github.com:".insteadOf https://github.com/ +} + +# copy contributing guide to docs if docs exist +function copy_contributing_guide_to_docs { + local -r workdir=$1 + local -r file="$workdir/docs/docs/contributing.md" + cat <"$file" --- id: contributing title: Contribution Guidelines --- EOF - cat "$workdir/CONTRIBUTING.md" >> "$workdir/docs/docs/contributing.md" - sed '/Contributing to/d' "$workdir/docs/docs/contributing.md" - ( - cd "$workdir/docs" - bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/prettier.sh) - npm run format - ) - fi - - # Add Adopters to README.md - perl -0pe 's#.*\n#`cat templates/repository/common/ADOPTERS.md`#gse' -i "$workdir/README.md" - # Add Ecosystem (overview of all projects) to README.md - perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$workdir/README.md" - - - - # Commit changes - line by line: change to workdir, add all files to git index, show working tree status, commit changes with "chore:..." title, push to upstream - # curl: make pull request through Github API with token to authenticate and the PR titles, body. With pushBranch (the "script" branch) as head and the specified branch (main) as base - (cd "$workdir"; \ - git add -A; \ - git status; \ - ( \ - git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" && \ - git push origin HEAD:master) || true) # && \ - # curl \ - # -X POST \ - # -H "Authorization: token $GITHUB_TOKEN" \ - # -H "Accept: application/vnd.github.v3+json" \ - # https://api.github.com/repos/$project/pulls \ - # -d '{"title":"chore: update repository template to '$hash'","body":"Updated repository templates to https://github.com/ory/meta/commit/'$GITHUB_SHA'.","head":"'$pushBranch'","base":"'$branch'"}' \ - # ) || true) + cat "$workdir/CONTRIBUTING.md" >>"$file" + sed '/Contributing to/d' "$file" +} + +# replicates the template files in templates/repository into the given project +function copy_templates { + local -r repo_path=$1 + local -r repo_type=$2 + rm -rf "$repo_path/.github/ISSUE_TEMPLATE/" + cp "templates/repository/common/CONTRIBUTING.md" "$repo_path/CONTRIBUTING.md" + cp "templates/repository/common/SECURITY.md" "$repo_path/SECURITY.md" + cp "templates/repository/common/LICENSE" "$repo_path/LICENSE" + cp "templates/repository/common/CODE_OF_CONDUCT.md" "$repo_path/CODE_OF_CONDUCT.md" + cp -n "templates/repository/common/.reference-ignore" "$repo_path/.reference-ignore" || true # copy only if it does not exist, as it is meant to help getting started + cp -r "templates/repository/common/.github" "$repo_path/" + cp -r "templates/repository/$repo_type/.github" "$repo_path/" +} + +# creates a pull request with the changes on GitHub +# function create_pull_request { +# curl \ +# -X POST \ +# -H "Authorization: token $GITHUB_TOKEN" \ +# -H "Accept: application/vnd.github.v3+json" \ +# https://api.github.com/repos/$project/pulls \ +# -d '{"title":"chore: update repository template to '$hash'","body":"Updated repository templates to https://github.com/ory/meta/commit/'$GITHUB_SHA'.","head":"'$pushBranch'","base":"'$branch'"}' \ +# ) || true) +# } + +# creates the workspace directory on disk and returns the path to it +function create_workspace { + mktemp -d +} + +function format { + local -r repo_path=$1 + ( + cd "$repo_path" + if [ -f 'package.json' ] && [ -f 'package-lock.json' ]; then + npm i --legacy-peer-deps + prettier --write "*.md" .github + fi + ) +} + +function install_dependencies_on_ci { + sudo apt-get update -y + sudo apt-get install -y moreutils gettext-base +} + +# pushes the committed changes from the local Git client to GitHub +function push_changes { + git push origin HEAD:master +} + +function substitutePlaceholders { + local -r repo_id=$1 + local -r repo_path=$2 + local -r repo_discussions=$3 + local -r human_name=$4 + for file in "$repo_path"/.github/ISSUE_TEMPLATE/*; do + substitute_placeholders_in_file "$file" "$repo_id" "$repo_discussions" "$human_name" + done + substitute_placeholders_in_file "$repo_path/.github/pull_request_template.md" "$repo_id" "$repo_discussions" "$human_name" + substitute_placeholders_in_file "$repo_path/CONTRIBUTING.md" "$repo_id" "$repo_discussions" "$human_name" + substitute_placeholders_in_file "$repo_path/SECURITY.md" "$repo_id" "$repo_discussions" "$human_name" + substitute_placeholders_in_file "$repo_path/CODE_OF_CONDUCT.md" "$repo_id" "$repo_discussions" "$human_name" + substitute_placeholders_in_file "$repo_path/LICENSE" "$repo_id" "$repo_discussions" "$human_name" +} + +# replaces placeholders like "$PROJECT" in the given file with the given values +function substitute_placeholders_in_file { + local -r file=$1 + local -r repo_id=$2 + local -r repo_discussions=$3 + local -r human_name=$4 + case "$repo_id" in + "ory/hydra" | "ory/kratos" | "ory/oathkeeper" | "ory/keto") + discussions=$repo_discussions + ;; + *) + discussions="https://github.com/orgs/ory/discussions" + ;; + esac + if [ -f "$file" ]; then + env -i DISCUSSIONS="$discussions" REPOSITORY="$repo_id" PROJECT="$human_name" /bin/bash -c "envsubst < \"$file\" | sponge \"$file\"" + fi } From 88c98d643fc4f707ccb3ac5719924b9c321bf743 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Mon, 15 Aug 2022 18:23:13 -0500 Subject: [PATCH 061/164] fix: call Prettier in CI-compatible way (#166) --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index a7366ab..0ba90e9 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -230,7 +230,7 @@ function format { cd "$repo_path" if [ -f 'package.json' ] && [ -f 'package-lock.json' ]; then npm i --legacy-peer-deps - prettier --write "*.md" .github + npm exec -- prettier --write "*.md" .github fi ) } From dd3a6a5ff5ca2b8cc15739c114fb1f6eb2ed66e5 Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 16 Aug 2022 14:40:30 +0200 Subject: [PATCH 062/164] docs: add tieriv adopter (#167) --- static/adopters/tieriv.svg | 1 + templates/repository/common/ADOPTERS.md | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 static/adopters/tieriv.svg diff --git a/static/adopters/tieriv.svg b/static/adopters/tieriv.svg new file mode 100644 index 0000000..799b0b7 --- /dev/null +++ b/static/adopters/tieriv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 213d49a..0a35dc7 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -182,6 +182,12 @@ that your company deserves a spot here, reach out to Paralus paralus.io + + Adopter * + TIER IV + TIER IV + tier4.jp + From 8539efbc6192a21b828a49f6a7ae10ed902105a8 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 1 Sep 2022 04:06:51 -0500 Subject: [PATCH 063/164] docs: remove mention of CircleCI (#173) --- templates/repository/common/CONTRIBUTING.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 54b4a9c..4a12913 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -185,10 +185,6 @@ request, go through this checklist: Please refer to this [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) for an overview. -1. Sign-up with CircleCI so that it has access to your repository with the - branch containing your PR. Simply creating a CircleCI account is sufficient - for the CI jobs to run, you do not need to setup a CircleCI project for the - branch. If a pull request is not ready to be reviewed yet [it should be marked as a "Draft"](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). From 61ca92785b42dcb31af0d31cd3f53f6097e92a1e Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 6 Sep 2022 11:47:42 +0200 Subject: [PATCH 064/164] docs: add adopter (#174) --- static/adopters/lunasec.svg | 13 ++++ static/adopters/r2devops.svg | 91 +++++++++++++++++++++++++ templates/repository/common/ADOPTERS.md | 12 ++++ 3 files changed, 116 insertions(+) create mode 100644 static/adopters/lunasec.svg create mode 100644 static/adopters/r2devops.svg diff --git a/static/adopters/lunasec.svg b/static/adopters/lunasec.svg new file mode 100644 index 0000000..449becf --- /dev/null +++ b/static/adopters/lunasec.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/adopters/r2devops.svg b/static/adopters/r2devops.svg new file mode 100644 index 0000000..d1f8351 --- /dev/null +++ b/static/adopters/r2devops.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r2devops.io + \ No newline at end of file diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 0a35dc7..cc41044 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -188,6 +188,18 @@ that your company deserves a spot here, reach out to TIER IV tier4.jp + + Adopter * + R2Devops + R2Devops + r2devops.io + + + Adopter * + LunaSec + LunaSec + lunasec.io + From 92d4c0d1d17b33cb2a001c5f68b80a049df776b7 Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Thu, 8 Sep 2022 14:19:05 +0200 Subject: [PATCH 065/164] feat: dark theme support (#176) --- static/adopters/{ => dark}/3R-horiz.svg | 0 static/adopters/{ => dark}/allmyfunds.svg | 0 static/adopters/{ => dark}/arduino.svg | 0 static/adopters/{ => dark}/buhta.svg | 0 static/adopters/{ => dark}/cloudbear.svg | 0 static/adopters/{ => dark}/commitzero.svg | 0 static/adopters/{ => dark}/connctd.svg | 0 static/adopters/{ => dark}/contraste.svg | 0 static/adopters/{ => dark}/datadetect.svg | 0 static/adopters/{ => dark}/factly.svg | 0 static/adopters/{ => dark}/hanko.svg | 0 static/adopters/{ => dark}/hootsuite.svg | 0 static/adopters/{ => dark}/inmusic.svg | 0 static/adopters/{ => dark}/kyma.svg | 0 static/adopters/dark/lunasec.svg | 8 + static/adopters/{ => dark}/nortal.svg | 0 static/adopters/{ => dark}/ordermygear.svg | 0 static/adopters/{ => dark}/padis.svg | 0 static/adopters/{ => dark}/paralus.svg | 0 static/adopters/{ => dark}/r2devops.svg | 0 static/adopters/{ => dark}/rabbit.svg | 0 static/adopters/{ => dark}/raspi.svg | 0 static/adopters/{ => dark}/reyah.svg | 0 static/adopters/{ => dark}/sainsburys.svg | 0 static/adopters/{ => dark}/securityonion.svg | 0 static/adopters/{ => dark}/segment.svg | 0 static/adopters/{ => dark}/spiribo.svg | 0 static/adopters/{ => dark}/strivacity.svg | 0 static/adopters/dark/tieriv.svg | 10 + static/adopters/{ => dark}/tulip.svg | 0 static/adopters/{ => dark}/tw.svg | 0 static/adopters/light/3R-horiz.svg | 16 ++ static/adopters/light/allmyfunds.svg | 27 +++ static/adopters/light/arduino.svg | 21 ++ static/adopters/light/buhta.svg | 3 + static/adopters/light/cloudbear.svg | 12 ++ static/adopters/light/commitzero.svg | 10 + static/adopters/light/connctd.svg | 9 + static/adopters/light/contraste.svg | 27 +++ static/adopters/light/datadetect.svg | 10 + static/adopters/light/factly.svg | 18 ++ static/adopters/light/hanko.svg | 18 ++ static/adopters/light/hootsuite.svg | 23 +++ static/adopters/light/inmusic.svg | 18 ++ static/adopters/light/kyma.svg | 18 ++ static/adopters/light/lunasec.svg | 8 + static/adopters/light/nortal.svg | 11 + static/adopters/light/ordermygear.svg | 10 + static/adopters/light/padis.svg | 16 ++ static/adopters/light/paralus.svg | 4 + static/adopters/light/r2devops.svg | 91 +++++++++ static/adopters/light/rabbit.svg | 18 ++ static/adopters/light/raspi.svg | 21 ++ static/adopters/light/reyah.svg | 5 + static/adopters/light/sainsburys.svg | 10 + static/adopters/light/securityonion.svg | 13 ++ static/adopters/light/segment.svg | 15 ++ static/adopters/light/spiribo.svg | 34 ++++ static/adopters/light/strivacity.svg | 10 + static/adopters/light/tieriv.svg | 10 + static/adopters/light/tulip.svg | 15 ++ static/adopters/light/tw.svg | 12 ++ static/adopters/lunasec.svg | 13 -- static/adopters/tieriv.svg | 1 - templates/repository/common/ADOPTERS.md | 203 ++++++++++++++++--- 65 files changed, 725 insertions(+), 43 deletions(-) rename static/adopters/{ => dark}/3R-horiz.svg (100%) rename static/adopters/{ => dark}/allmyfunds.svg (100%) rename static/adopters/{ => dark}/arduino.svg (100%) rename static/adopters/{ => dark}/buhta.svg (100%) rename static/adopters/{ => dark}/cloudbear.svg (100%) rename static/adopters/{ => dark}/commitzero.svg (100%) rename static/adopters/{ => dark}/connctd.svg (100%) rename static/adopters/{ => dark}/contraste.svg (100%) rename static/adopters/{ => dark}/datadetect.svg (100%) rename static/adopters/{ => dark}/factly.svg (100%) rename static/adopters/{ => dark}/hanko.svg (100%) rename static/adopters/{ => dark}/hootsuite.svg (100%) rename static/adopters/{ => dark}/inmusic.svg (100%) rename static/adopters/{ => dark}/kyma.svg (100%) create mode 100644 static/adopters/dark/lunasec.svg rename static/adopters/{ => dark}/nortal.svg (100%) rename static/adopters/{ => dark}/ordermygear.svg (100%) rename static/adopters/{ => dark}/padis.svg (100%) rename static/adopters/{ => dark}/paralus.svg (100%) rename static/adopters/{ => dark}/r2devops.svg (100%) rename static/adopters/{ => dark}/rabbit.svg (100%) rename static/adopters/{ => dark}/raspi.svg (100%) rename static/adopters/{ => dark}/reyah.svg (100%) rename static/adopters/{ => dark}/sainsburys.svg (100%) rename static/adopters/{ => dark}/securityonion.svg (100%) rename static/adopters/{ => dark}/segment.svg (100%) rename static/adopters/{ => dark}/spiribo.svg (100%) rename static/adopters/{ => dark}/strivacity.svg (100%) create mode 100644 static/adopters/dark/tieriv.svg rename static/adopters/{ => dark}/tulip.svg (100%) rename static/adopters/{ => dark}/tw.svg (100%) create mode 100755 static/adopters/light/3R-horiz.svg create mode 100755 static/adopters/light/allmyfunds.svg create mode 100755 static/adopters/light/arduino.svg create mode 100644 static/adopters/light/buhta.svg create mode 100755 static/adopters/light/cloudbear.svg create mode 100755 static/adopters/light/commitzero.svg create mode 100755 static/adopters/light/connctd.svg create mode 100755 static/adopters/light/contraste.svg create mode 100755 static/adopters/light/datadetect.svg create mode 100755 static/adopters/light/factly.svg create mode 100755 static/adopters/light/hanko.svg create mode 100755 static/adopters/light/hootsuite.svg create mode 100755 static/adopters/light/inmusic.svg create mode 100755 static/adopters/light/kyma.svg create mode 100644 static/adopters/light/lunasec.svg create mode 100755 static/adopters/light/nortal.svg create mode 100644 static/adopters/light/ordermygear.svg create mode 100755 static/adopters/light/padis.svg create mode 100755 static/adopters/light/paralus.svg create mode 100644 static/adopters/light/r2devops.svg create mode 100755 static/adopters/light/rabbit.svg create mode 100755 static/adopters/light/raspi.svg create mode 100755 static/adopters/light/reyah.svg create mode 100755 static/adopters/light/sainsburys.svg create mode 100755 static/adopters/light/securityonion.svg create mode 100755 static/adopters/light/segment.svg create mode 100755 static/adopters/light/spiribo.svg create mode 100755 static/adopters/light/strivacity.svg create mode 100644 static/adopters/light/tieriv.svg create mode 100755 static/adopters/light/tulip.svg create mode 100755 static/adopters/light/tw.svg delete mode 100644 static/adopters/lunasec.svg delete mode 100644 static/adopters/tieriv.svg diff --git a/static/adopters/3R-horiz.svg b/static/adopters/dark/3R-horiz.svg similarity index 100% rename from static/adopters/3R-horiz.svg rename to static/adopters/dark/3R-horiz.svg diff --git a/static/adopters/allmyfunds.svg b/static/adopters/dark/allmyfunds.svg similarity index 100% rename from static/adopters/allmyfunds.svg rename to static/adopters/dark/allmyfunds.svg diff --git a/static/adopters/arduino.svg b/static/adopters/dark/arduino.svg similarity index 100% rename from static/adopters/arduino.svg rename to static/adopters/dark/arduino.svg diff --git a/static/adopters/buhta.svg b/static/adopters/dark/buhta.svg similarity index 100% rename from static/adopters/buhta.svg rename to static/adopters/dark/buhta.svg diff --git a/static/adopters/cloudbear.svg b/static/adopters/dark/cloudbear.svg similarity index 100% rename from static/adopters/cloudbear.svg rename to static/adopters/dark/cloudbear.svg diff --git a/static/adopters/commitzero.svg b/static/adopters/dark/commitzero.svg similarity index 100% rename from static/adopters/commitzero.svg rename to static/adopters/dark/commitzero.svg diff --git a/static/adopters/connctd.svg b/static/adopters/dark/connctd.svg similarity index 100% rename from static/adopters/connctd.svg rename to static/adopters/dark/connctd.svg diff --git a/static/adopters/contraste.svg b/static/adopters/dark/contraste.svg similarity index 100% rename from static/adopters/contraste.svg rename to static/adopters/dark/contraste.svg diff --git a/static/adopters/datadetect.svg b/static/adopters/dark/datadetect.svg similarity index 100% rename from static/adopters/datadetect.svg rename to static/adopters/dark/datadetect.svg diff --git a/static/adopters/factly.svg b/static/adopters/dark/factly.svg similarity index 100% rename from static/adopters/factly.svg rename to static/adopters/dark/factly.svg diff --git a/static/adopters/hanko.svg b/static/adopters/dark/hanko.svg similarity index 100% rename from static/adopters/hanko.svg rename to static/adopters/dark/hanko.svg diff --git a/static/adopters/hootsuite.svg b/static/adopters/dark/hootsuite.svg similarity index 100% rename from static/adopters/hootsuite.svg rename to static/adopters/dark/hootsuite.svg diff --git a/static/adopters/inmusic.svg b/static/adopters/dark/inmusic.svg similarity index 100% rename from static/adopters/inmusic.svg rename to static/adopters/dark/inmusic.svg diff --git a/static/adopters/kyma.svg b/static/adopters/dark/kyma.svg similarity index 100% rename from static/adopters/kyma.svg rename to static/adopters/dark/kyma.svg diff --git a/static/adopters/dark/lunasec.svg b/static/adopters/dark/lunasec.svg new file mode 100644 index 0000000..c98f1e1 --- /dev/null +++ b/static/adopters/dark/lunasec.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/adopters/nortal.svg b/static/adopters/dark/nortal.svg similarity index 100% rename from static/adopters/nortal.svg rename to static/adopters/dark/nortal.svg diff --git a/static/adopters/ordermygear.svg b/static/adopters/dark/ordermygear.svg similarity index 100% rename from static/adopters/ordermygear.svg rename to static/adopters/dark/ordermygear.svg diff --git a/static/adopters/padis.svg b/static/adopters/dark/padis.svg similarity index 100% rename from static/adopters/padis.svg rename to static/adopters/dark/padis.svg diff --git a/static/adopters/paralus.svg b/static/adopters/dark/paralus.svg similarity index 100% rename from static/adopters/paralus.svg rename to static/adopters/dark/paralus.svg diff --git a/static/adopters/r2devops.svg b/static/adopters/dark/r2devops.svg similarity index 100% rename from static/adopters/r2devops.svg rename to static/adopters/dark/r2devops.svg diff --git a/static/adopters/rabbit.svg b/static/adopters/dark/rabbit.svg similarity index 100% rename from static/adopters/rabbit.svg rename to static/adopters/dark/rabbit.svg diff --git a/static/adopters/raspi.svg b/static/adopters/dark/raspi.svg similarity index 100% rename from static/adopters/raspi.svg rename to static/adopters/dark/raspi.svg diff --git a/static/adopters/reyah.svg b/static/adopters/dark/reyah.svg similarity index 100% rename from static/adopters/reyah.svg rename to static/adopters/dark/reyah.svg diff --git a/static/adopters/sainsburys.svg b/static/adopters/dark/sainsburys.svg similarity index 100% rename from static/adopters/sainsburys.svg rename to static/adopters/dark/sainsburys.svg diff --git a/static/adopters/securityonion.svg b/static/adopters/dark/securityonion.svg similarity index 100% rename from static/adopters/securityonion.svg rename to static/adopters/dark/securityonion.svg diff --git a/static/adopters/segment.svg b/static/adopters/dark/segment.svg similarity index 100% rename from static/adopters/segment.svg rename to static/adopters/dark/segment.svg diff --git a/static/adopters/spiribo.svg b/static/adopters/dark/spiribo.svg similarity index 100% rename from static/adopters/spiribo.svg rename to static/adopters/dark/spiribo.svg diff --git a/static/adopters/strivacity.svg b/static/adopters/dark/strivacity.svg similarity index 100% rename from static/adopters/strivacity.svg rename to static/adopters/dark/strivacity.svg diff --git a/static/adopters/dark/tieriv.svg b/static/adopters/dark/tieriv.svg new file mode 100644 index 0000000..6e9c1d1 --- /dev/null +++ b/static/adopters/dark/tieriv.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/tulip.svg b/static/adopters/dark/tulip.svg similarity index 100% rename from static/adopters/tulip.svg rename to static/adopters/dark/tulip.svg diff --git a/static/adopters/tw.svg b/static/adopters/dark/tw.svg similarity index 100% rename from static/adopters/tw.svg rename to static/adopters/dark/tw.svg diff --git a/static/adopters/light/3R-horiz.svg b/static/adopters/light/3R-horiz.svg new file mode 100755 index 0000000..1ce85cc --- /dev/null +++ b/static/adopters/light/3R-horiz.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/allmyfunds.svg b/static/adopters/light/allmyfunds.svg new file mode 100755 index 0000000..e7110b0 --- /dev/null +++ b/static/adopters/light/allmyfunds.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/arduino.svg b/static/adopters/light/arduino.svg new file mode 100755 index 0000000..7c70f3e --- /dev/null +++ b/static/adopters/light/arduino.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/buhta.svg b/static/adopters/light/buhta.svg new file mode 100644 index 0000000..f407c94 --- /dev/null +++ b/static/adopters/light/buhta.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/light/cloudbear.svg b/static/adopters/light/cloudbear.svg new file mode 100755 index 0000000..43a288c --- /dev/null +++ b/static/adopters/light/cloudbear.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/adopters/light/commitzero.svg b/static/adopters/light/commitzero.svg new file mode 100755 index 0000000..7cae060 --- /dev/null +++ b/static/adopters/light/commitzero.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/connctd.svg b/static/adopters/light/connctd.svg new file mode 100755 index 0000000..7962db7 --- /dev/null +++ b/static/adopters/light/connctd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/adopters/light/contraste.svg b/static/adopters/light/contraste.svg new file mode 100755 index 0000000..66e6cc4 --- /dev/null +++ b/static/adopters/light/contraste.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/datadetect.svg b/static/adopters/light/datadetect.svg new file mode 100755 index 0000000..d2eb442 --- /dev/null +++ b/static/adopters/light/datadetect.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/factly.svg b/static/adopters/light/factly.svg new file mode 100755 index 0000000..3afdaad --- /dev/null +++ b/static/adopters/light/factly.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/hanko.svg b/static/adopters/light/hanko.svg new file mode 100755 index 0000000..a11488a --- /dev/null +++ b/static/adopters/light/hanko.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/hootsuite.svg b/static/adopters/light/hootsuite.svg new file mode 100755 index 0000000..d8ba217 --- /dev/null +++ b/static/adopters/light/hootsuite.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/inmusic.svg b/static/adopters/light/inmusic.svg new file mode 100755 index 0000000..405c31d --- /dev/null +++ b/static/adopters/light/inmusic.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/kyma.svg b/static/adopters/light/kyma.svg new file mode 100755 index 0000000..64b691b --- /dev/null +++ b/static/adopters/light/kyma.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/lunasec.svg b/static/adopters/light/lunasec.svg new file mode 100644 index 0000000..4e15008 --- /dev/null +++ b/static/adopters/light/lunasec.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/adopters/light/nortal.svg b/static/adopters/light/nortal.svg new file mode 100755 index 0000000..3b85298 --- /dev/null +++ b/static/adopters/light/nortal.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/adopters/light/ordermygear.svg b/static/adopters/light/ordermygear.svg new file mode 100644 index 0000000..8426e35 --- /dev/null +++ b/static/adopters/light/ordermygear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/padis.svg b/static/adopters/light/padis.svg new file mode 100755 index 0000000..60a84ac --- /dev/null +++ b/static/adopters/light/padis.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/paralus.svg b/static/adopters/light/paralus.svg new file mode 100755 index 0000000..8c4f35f --- /dev/null +++ b/static/adopters/light/paralus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/light/r2devops.svg b/static/adopters/light/r2devops.svg new file mode 100644 index 0000000..d1f8351 --- /dev/null +++ b/static/adopters/light/r2devops.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r2devops.io + \ No newline at end of file diff --git a/static/adopters/light/rabbit.svg b/static/adopters/light/rabbit.svg new file mode 100755 index 0000000..9d9357d --- /dev/null +++ b/static/adopters/light/rabbit.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/raspi.svg b/static/adopters/light/raspi.svg new file mode 100755 index 0000000..e99ad8c --- /dev/null +++ b/static/adopters/light/raspi.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/reyah.svg b/static/adopters/light/reyah.svg new file mode 100755 index 0000000..e911b8b --- /dev/null +++ b/static/adopters/light/reyah.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/adopters/light/sainsburys.svg b/static/adopters/light/sainsburys.svg new file mode 100755 index 0000000..1fb9810 --- /dev/null +++ b/static/adopters/light/sainsburys.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/securityonion.svg b/static/adopters/light/securityonion.svg new file mode 100755 index 0000000..0d61ce0 --- /dev/null +++ b/static/adopters/light/securityonion.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/adopters/light/segment.svg b/static/adopters/light/segment.svg new file mode 100755 index 0000000..42674af --- /dev/null +++ b/static/adopters/light/segment.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/adopters/light/spiribo.svg b/static/adopters/light/spiribo.svg new file mode 100755 index 0000000..b27009f --- /dev/null +++ b/static/adopters/light/spiribo.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/strivacity.svg b/static/adopters/light/strivacity.svg new file mode 100755 index 0000000..3f6b890 --- /dev/null +++ b/static/adopters/light/strivacity.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/tieriv.svg b/static/adopters/light/tieriv.svg new file mode 100644 index 0000000..391dda6 --- /dev/null +++ b/static/adopters/light/tieriv.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/adopters/light/tulip.svg b/static/adopters/light/tulip.svg new file mode 100755 index 0000000..743cb4f --- /dev/null +++ b/static/adopters/light/tulip.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/adopters/light/tw.svg b/static/adopters/light/tw.svg new file mode 100755 index 0000000..973f03d --- /dev/null +++ b/static/adopters/light/tw.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/adopters/lunasec.svg b/static/adopters/lunasec.svg deleted file mode 100644 index 449becf..0000000 --- a/static/adopters/lunasec.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/adopters/tieriv.svg b/static/adopters/tieriv.svg deleted file mode 100644 index 799b0b7..0000000 --- a/static/adopters/tieriv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index cc41044..a4f4746 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -29,175 +29,320 @@ that your company deserves a spot here, reach out to Sponsor Raspberry PI Foundation - Raspberry PI Foundation + + + + Raspberry PI Foundation + + raspberrypi.org Contributor Kyma Project - Kyma Project + + + + Kyma Project + + kyma-project.io Sponsor Tulip - Tulip Retail + + + + Tulip Retail + + tulip.com Sponsor Cashdeck / All My Funds - All My Funds + + + + All My Funds + + cashdeck.com.au Contributor Hootsuite - Hootsuite + + + + Hootsuite + + hootsuite.com Adopter * Segment - Segment + + + + Segment + + segment.com Adopter * Arduino - Arduino + + + + Arduino + + arduino.cc Adopter * DataDetect - Datadetect + + + + Datadetect + + unifiedglobalarchiving.com/data-detect/ Adopter * Sainsbury's - Sainsbury's + + + + Sainsbury's + + sainsburys.co.uk Adopter * Contraste - Contraste + + + + Contraste + + contraste.com Adopter * Reyah - Reyah + + + + Reyah + + reyah.eu Adopter * Zero - Project Zero by Commit + + + + Project Zero by Commit + + getzero.dev Adopter * Padis - Padis + + + + Padis + + padis.io Adopter * Cloudbear - Cloudbear + + + + Cloudbear + + cloudbear.eu Adopter * Security Onion Solutions - Security Onion Solutions + + + + Security Onion Solutions + + securityonionsolutions.com Adopter * Factly - Factly + + + + Factly + + factlylabs.com Adopter * Nortal - Nortal + + + + Nortal + + nortal.com Sponsor OrderMyGear - OrderMyGear + + + + OrderMyGear + + ordermygear.com Sponsor Spiri.bo - Spiri.bo + + + + Spiri.bo + + spiri.bo Sponsor Strivacity - Strivacity + + + + Spiri.bo + + strivacity.com Adopter * Hanko - Hanko + + + + Hanko + + hanko.io Adopter * Rabbit - Rabbit + + + + Rabbit + + rabbit.co.th Adopter * inMusic - InMusic + + + + InMusic + + inmusicbrands.com Adopter * Buhta - Buhta + + + + Buhta + + buhta.com Adopter * Connctd - Connctd + + + + Connctd + + connctd.com Adopter * Paralus - Paralus + + + + Paralus + + paralus.io Adopter * TIER IV - TIER IV + + + + TIER IV + + tier4.jp Adopter * R2Devops - R2Devops + + + + R2Devops + + r2devops.io Adopter * LunaSec - LunaSec + + + + LunaSec + + lunasec.io From 750f38900695e98e9cd75055cf19f6839bd4f5e7 Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Fri, 9 Sep 2022 12:04:00 +0200 Subject: [PATCH 066/164] fix: links in ADOPTERS.md (#177) --- templates/repository/common/ADOPTERS.md | 116 ++++++++++++------------ 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index a4f4746..945cfa0 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -31,8 +31,8 @@ that your company deserves a spot here, reach out to Raspberry PI Foundation - - Raspberry PI Foundation + + Raspberry PI Foundation raspberrypi.org @@ -42,8 +42,8 @@ that your company deserves a spot here, reach out to Kyma Project - - Kyma Project + + Kyma Project kyma-project.io @@ -53,8 +53,8 @@ that your company deserves a spot here, reach out to Tulip - - Tulip Retail + + Tulip Retail tulip.com @@ -64,8 +64,8 @@ that your company deserves a spot here, reach out to Cashdeck / All My Funds - - All My Funds + + All My Funds cashdeck.com.au @@ -75,8 +75,8 @@ that your company deserves a spot here, reach out to Hootsuite - - Hootsuite + + Hootsuite hootsuite.com @@ -86,8 +86,8 @@ that your company deserves a spot here, reach out to Segment - - Segment + + Segment segment.com @@ -97,8 +97,8 @@ that your company deserves a spot here, reach out to Arduino - - Arduino + + Arduino arduino.cc @@ -108,8 +108,8 @@ that your company deserves a spot here, reach out to DataDetect - - Datadetect + + Datadetect unifiedglobalarchiving.com/data-detect/ @@ -119,8 +119,8 @@ that your company deserves a spot here, reach out to Sainsbury's - - Sainsbury's + + Sainsbury's sainsburys.co.uk @@ -130,8 +130,8 @@ that your company deserves a spot here, reach out to Contraste - - Contraste + + Contraste contraste.com @@ -141,8 +141,8 @@ that your company deserves a spot here, reach out to Reyah - - Reyah + + Reyah reyah.eu @@ -152,8 +152,8 @@ that your company deserves a spot here, reach out to Zero - - Project Zero by Commit + + Project Zero by Commit getzero.dev @@ -163,8 +163,8 @@ that your company deserves a spot here, reach out to Padis - - Padis + + Padis padis.io @@ -174,8 +174,8 @@ that your company deserves a spot here, reach out to Cloudbear - - Cloudbear + + Cloudbear cloudbear.eu @@ -185,8 +185,8 @@ that your company deserves a spot here, reach out to Security Onion Solutions - - Security Onion Solutions + + Security Onion Solutions securityonionsolutions.com @@ -196,8 +196,8 @@ that your company deserves a spot here, reach out to Factly - - Factly + + Factly factlylabs.com @@ -207,8 +207,8 @@ that your company deserves a spot here, reach out to Nortal - - Nortal + + Nortal nortal.com @@ -218,8 +218,8 @@ that your company deserves a spot here, reach out to OrderMyGear - - OrderMyGear + + OrderMyGear ordermygear.com @@ -229,8 +229,8 @@ that your company deserves a spot here, reach out to Spiri.bo - - Spiri.bo + + Spiri.bo spiri.bo @@ -240,8 +240,8 @@ that your company deserves a spot here, reach out to Strivacity - - Spiri.bo + + Spiri.bo strivacity.com @@ -251,8 +251,8 @@ that your company deserves a spot here, reach out to Hanko - - Hanko + + Hanko hanko.io @@ -262,8 +262,8 @@ that your company deserves a spot here, reach out to Rabbit - - Rabbit + + Rabbit rabbit.co.th @@ -273,8 +273,8 @@ that your company deserves a spot here, reach out to inMusic - - InMusic + + InMusic inmusicbrands.com @@ -284,8 +284,8 @@ that your company deserves a spot here, reach out to Buhta - - Buhta + + Buhta buhta.com @@ -295,8 +295,8 @@ that your company deserves a spot here, reach out to Connctd - - Connctd + + Connctd connctd.com @@ -306,8 +306,8 @@ that your company deserves a spot here, reach out to Paralus - - Paralus + + Paralus paralus.io @@ -317,8 +317,8 @@ that your company deserves a spot here, reach out to TIER IV - - TIER IV + + TIER IV tier4.jp @@ -328,8 +328,8 @@ that your company deserves a spot here, reach out to R2Devops - - R2Devops + + R2Devops r2devops.io @@ -339,8 +339,8 @@ that your company deserves a spot here, reach out to LunaSec - - LunaSec + + LunaSec lunasec.io From e06ac8daf39f19cb2ee220b7289c8319e824de72 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Fri, 9 Sep 2022 07:15:51 -0500 Subject: [PATCH 067/164] chore: format (#175) --- package-lock.json | 580 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 14 +- 2 files changed, 585 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52ca7a1..7949ab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "devDependencies": { "ory-prettier-styles": "1.3.0", - "prettier": "2.7.1", + "prettier": "^2.7.1", + "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.1" } }, @@ -48,6 +49,41 @@ "node": ">=6.9.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -231,6 +267,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -247,6 +292,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -426,6 +483,36 @@ "node": ">=10" } }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -490,6 +577,43 @@ "through": "~2.3.1" } }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -537,6 +661,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/git-hooks-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", + "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -557,6 +690,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/glob-promise": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", @@ -576,6 +721,25 @@ "glob": "^7.1.6" } }, + "node_modules/globby": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", + "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/got": { "version": "11.8.2", "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", @@ -659,6 +823,15 @@ "node": ">=6" } }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -726,6 +899,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -812,6 +1003,28 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -926,6 +1139,15 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -935,6 +1157,18 @@ "through": "~2.3" } }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", @@ -950,6 +1184,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-plugin-packagejson": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.18.tgz", + "integrity": "sha512-iBjQ3IY6IayFrQHhXvg+YvKprPUUiIJ04Vr9+EbeQPfwGajznArIqrN33c5bi4JcIvmLHGROIMOm9aYakJj/CA==", + "dev": true, + "dependencies": { + "sort-package-json": "1.57.0" + }, + "peerDependencies": { + "prettier": ">= 1.16.0" + } + }, "node_modules/ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -975,6 +1221,26 @@ "once": "^1.3.1" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -1044,6 +1310,16 @@ "node": ">=8" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -1059,12 +1335,67 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "dev": true + }, + "node_modules/sort-package-json": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.57.0.tgz", + "integrity": "sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "detect-newline": "3.1.0", + "git-hooks-list": "1.0.3", + "globby": "10.0.0", + "is-plain-obj": "2.1.0", + "sort-object-keys": "^1.1.3" + }, + "bin": { + "sort-package-json": "cli.js" + } + }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -1209,6 +1540,18 @@ "tmp": "^0.2.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -1287,6 +1630,32 @@ "js-tokens": "^4.0.0" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -1440,6 +1809,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1456,6 +1831,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -1593,6 +1977,27 @@ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -1651,6 +2056,37 @@ "through": "~2.3.1" } }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", @@ -1689,6 +2125,12 @@ "pump": "^3.0.0" } }, + "git-hooks-list": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", + "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", + "dev": true + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1703,6 +2145,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "glob-promise": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", @@ -1712,6 +2163,22 @@ "@types/glob": "^7.1.3" } }, + "globby": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", + "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, "got": { "version": "11.8.2", "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", @@ -1777,6 +2244,12 @@ "decamelize": "^2.0.0" } }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1829,6 +2302,18 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1907,6 +2392,22 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -1994,6 +2495,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -2003,12 +2510,27 @@ "through": "~2.3" } }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, + "prettier-plugin-packagejson": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.18.tgz", + "integrity": "sha512-iBjQ3IY6IayFrQHhXvg+YvKprPUUiIJ04Vr9+EbeQPfwGajznArIqrN33c5bi4JcIvmLHGROIMOm9aYakJj/CA==", + "dev": true, + "requires": { + "sort-package-json": "1.57.0" + } + }, "ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -2028,6 +2550,12 @@ "once": "^1.3.1" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -2079,6 +2607,12 @@ "signal-exit": "^3.0.2" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2088,12 +2622,47 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "dev": true + }, + "sort-package-json": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.57.0.tgz", + "integrity": "sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==", + "dev": true, + "requires": { + "detect-indent": "^6.0.0", + "detect-newline": "3.1.0", + "git-hooks-list": "1.0.3", + "globby": "10.0.0", + "is-plain-obj": "2.1.0", + "sort-object-keys": "^1.1.3" + } + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -2214,6 +2783,15 @@ "tmp": "^0.2.0" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", diff --git a/package.json b/package.json index e9b9585..4cc6092 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,20 @@ { "name": "meta", "version": "1.0.0", - "prettier": "ory-prettier-styles", - "config": { - "prettierTarget": "**/*.{js,ts,md,mdx,yml}" + "repository": { + "type": "git", + "url": "git+https://github.com/ory/meta.git" }, "scripts": { "format": "prettier --write .", "format:check": "prettier --check .", "text-run": "text-run" }, - "repository": { - "type": "git", - "url": "git+https://github.com/ory/meta.git" - }, + "prettier": "ory-prettier-styles", "devDependencies": { "ory-prettier-styles": "1.3.0", - "prettier": "2.7.1", + "prettier": "^2.7.1", + "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.1" } } From 8639eebf855a65d6c1ec986ff5b55f7802145325 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Mon, 12 Sep 2022 05:04:52 -0500 Subject: [PATCH 068/164] feat: allow empty commits + CI (#170) --- .github/workflows/sync.yml | 3 - .github/workflows/test.yml | 12 +++ README.md | 29 +++---- scripts/sync.sh | 162 +++++++++++++++++++------------------ 4 files changed, 109 insertions(+), 97 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 5d4ef79..a8393cf 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -19,9 +19,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 - with: - node-version: 18 - uses: webfactory/ssh-agent@v0.4.1 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d004b70..5f947bd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,3 +11,15 @@ jobs: steps: - uses: actions/checkout@v3 - run: make test + - uses: webfactory/ssh-agent@v0.4.1 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Dry-run the sync + run: | + source ./scripts/sync.sh + install_dependencies_on_ci + configure_git_on_ci + workspace=$(create_workspace) + replicate_all "$workspace" "commit" + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} diff --git a/README.md b/README.md index d1685c5..21dc27e 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,9 @@ will be published using a GitHub Action. ## Github Sync action -The [meta scripts](https://github.com/ory/meta/tree/master/scripts) serve to -synchronize all Ory repositories to a common template, including README, -CONTRIBUTING, COC, SECURITY, LICENCE and Github Workflows with close to zero -manual interaction. +The [meta scripts](https://github.com/ory/meta/tree/master/scripts) synchronize +all Ory repositories to a common template including README, CONTRIBUTING, COC, +SECURITY, LICENCE and Github Workflows with close to zero manual interaction. Depending on repository type (server, library, action) specific templates can be copied as well. @@ -33,20 +32,22 @@ copied as well. The project names, links to documentation ect. are being substituted for each project in [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh). For more details please refer to the documentation within the -[scripts](https://github.com/ory/meta/tree/master/scripts). For more details on -the workflow please refer to the documentation within -[sync.yml](https://github.com/ory/meta/blob/master/.github/workflows/sync.yml) +[scripts](https://github.com/ory/meta/tree/master/scripts). -To test the sync script locally, open a Bash terminal and copy the respective +To run the sync script locally, open a Bash terminal and copy the respective commands from [sync.sh](https://github.com/ory/meta/blob/master/scripts/sync.sh) -into the terminal. For example, to run all sync jobs: +into the terminal. For example, to see the changes made by all sync jobs: ``` -source ./scripts/sync.sh +source scripts/sync.sh workspace=$(create_workspace) -replicate_all "$workspace" "keep" +GITHUB_SHA=12345 +replicate_all "$workspace" keep ``` -Please make sure to change `"push"` to `"keep"` to skip committing and pushing -the changes. `cd $workspace` goes to the folder that contains the cloned and -modified repos so that you can see the changes made to them. +Then `cd $workspace` to see all repositories with the uncommitted changes made +by the sync script. To test committing, replace the last line with this one: + +``` +replicate_all "$workspace" commit +``` diff --git a/scripts/sync.sh b/scripts/sync.sh index 0ba90e9..4ce1e79 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -1,12 +1,7 @@ #!/bin/bash - set -Eexuo pipefail # abort the script on error # replicate shared data from this repo into all repositories at Ory -# -# Arguments: -# $push == "push" --> commit and push to Github -# $push == "none" --> don't commit or push function replicate_all { # verify arguments local -r workspace=$1 @@ -18,75 +13,74 @@ function replicate_all { echo "ERROR (sync_all): provided workspace ($workspace) is not a directory" exit 1 fi - local -r push=$2 - if [ "$push" != "push" ] && [ "$push" != "none" ]; then - echo "ERROR (sync_all): unknown value for \"push\" argument: \"$push\". Please provide either \"push\" or \"none\"." + local -r persist=$2 + if [ "$persist" != "push" ] && [ "$persist" != "commit" ] && [ "$persist" != "keep" ]; then + echo "ERROR (sync_all): unknown value for \"persist\" argument: \"$persist\". Please provide either \"push\", \"commit\", or \"keep\"." exit 1 fi - replicate ory/hydra server "Hydra" "$workspace" "$push" - replicate ory/keto server "Keto" "$workspace" "$push" - replicate ory/oathkeeper server "Oathkeeper" "$workspace" "$push" - replicate ory/kratos server "Kratos" "$workspace" "$push" - replicate ory/hydra-login-consent-node library "Hydra Login, Logout And Consent Node Example" "$workspace" "$push" - replicate ory/docs library "Documentation" "$workspace" "$push" - replicate ory/cli library "CLI" "$workspace" "$push" - replicate ory/kratos-selfservice-ui-node library "Kratos SelfService UI Node Example" "$workspace" "$push" - replicate ory/kratos-selfservice-ui-react-native library "Kratos SelfService UI React Native Example" "$workspace" "$push" - replicate ory/fosite library "Fosite" "$workspace" "$push" - replicate ory/dockertest library "Dockertest" "$workspace" "$push" - replicate ory/herodot library "Herodot" "$workspace" "$push" - replicate ory/graceful library "Graceful" "$workspace" "$push" - # TODO: uncomment once https://github.com/ory/themes/pull/62 ships - # replicate ory/themes library "Themes" "$workspace" "$push" - replicate ory/k8s library "Kubernetes Resources" "$workspace" "$push" - replicate ory/x library "X" "$workspace" "$push" - replicate ory/web library "Web" "$workspace" "$push" - replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$push" - replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$push" - replicate ory/milestone-action action "Milestone Action" "$workspace" "$push" - replicate ory/prettier-styles action "Prettier Styles" "$workspace" "$push" - replicate ory/build-buf-action action "Buildbuf Action" "$workspace" "$push" - replicate ory/examples library "Examples" "$workspace" "$push" - replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$push" - replicate ory/oathkeeper-maester library "Ory Oathkeeper Maester" "$workspace" "$push" - replicate ory/sdk library "Ory SDK" "$workspace" "$push" - replicate ory/platform library "Ory Platform" "$workspace" "$push" - replicate ory/keto-client-dotnet library "Ory Keto Dotnet Client" "$workspace" "$push" - replicate ory/keto-client-java library "Ory Keto Java Client" "$workspace" "$push" - replicate ory/keto-client-rust library "Ory Keto Rust Client" "$workspace" "$push" - replicate ory/keto-client-dart library "Ory Keto Dart Client" "$workspace" "$push" - replicate ory/keto-client-js library "Ory Keto JavaScript Client" "$workspace" "$push" - replicate ory/keto-client-php library "Ory Keto PHP Client" "$workspace" "$push" - replicate ory/keto-client-go library "Ory Keto Go Client" "$workspace" "$push" - replicate ory/keto-client-ruby library "Ory Keto Ruby Client" "$workspace" "$push" - replicate ory/keto-client-python library "Ory Keto Python Client" "$workspace" "$push" - replicate ory/kratos-client-dotnet library "Ory Kratos Dotnet Client" "$workspace" "$push" - replicate ory/kratos-client-java library "Ory Kratos Java Client" "$workspace" "$push" - replicate ory/kratos-client-rust library "Ory Kratos Rust Client" "$workspace" "$push" - replicate ory/kratos-client-dart library "Ory Kratos Dart Client" "$workspace" "$push" - replicate ory/kratos-client-js library "Ory Kratos JavaScript Client" "$workspace" "$push" - replicate ory/kratos-client-php library "Ory Kratos PHP Client" "$workspace" "$push" - replicate ory/kratos-client-go library "Ory Kratos Go Client" "$workspace" "$push" - replicate ory/kratos-client-ruby library "Ory Kratos Ruby Client" "$workspace" "$push" - replicate ory/kratos-client-python library "Ory Kratos Python Client" "$workspace" "$push" - replicate ory/hydra-client-dotnet library "Ory Hydra Dotnet Client" "$workspace" "$push" - replicate ory/hydra-client-java library "Ory Hydra Java Client" "$workspace" "$push" - replicate ory/hydra-client-rust library "Ory Hydra Rust Client" "$workspace" "$push" - replicate ory/hydra-client-dart library "Ory Hydra Dart Client" "$workspace" "$push" - replicate ory/hydra-client-js library "Ory Hydra JavaScript Client" "$workspace" "$push" - replicate ory/hydra-client-php library "Ory Hydra PHP Client" "$workspace" "$push" - replicate ory/hydra-client-go library "Ory Hydra Go Client" "$workspace" "$push" - replicate ory/hydra-client-ruby library "Ory Hydra Ruby Client" "$workspace" "$push" - replicate ory/hydra-client-python library "Ory Hydra Python Client" "$workspace" "$push" - replicate ory/oathkeeper-client-dotnet library "Ory Oathkeeper Dotnet Client" "$workspace" "$push" - replicate ory/oathkeeper-client-java library "Ory Oathkeeper Java Client" "$workspace" "$push" - replicate ory/oathkeeper-client-rust library "Ory Oathkeeper Rust Client" "$workspace" "$push" - replicate ory/oathkeeper-client-dart library "Ory Oathkeeper Dart Client" "$workspace" "$push" - replicate ory/oathkeeper-client-js library "Ory Oathkeeper JavaScript Client" "$workspace" "$push" - replicate ory/oathkeeper-client-php library "Ory Oathkeeper PHP Client" "$workspace" "$push" - replicate ory/oathkeeper-client-go library "Ory Oathkeeper Go Client" "$workspace" "$push" - replicate ory/oathkeeper-client-ruby library "Ory Oathkeeper Ruby Client" "$workspace" "$push" - replicate ory/oathkeeper-client-python library "Ory Oathkeeper Python Client" "$workspace" "$push" + replicate ory/hydra server "Hydra" "$workspace" "$persist" + replicate ory/keto server "Keto" "$workspace" "$persist" + replicate ory/oathkeeper server "Oathkeeper" "$workspace" "$persist" + replicate ory/kratos server "Kratos" "$workspace" "$persist" + replicate ory/hydra-login-consent-node library "Hydra Login, Logout And Consent Node Example" "$workspace" "$persist" + replicate ory/docs library "Documentation" "$workspace" "$persist" + replicate ory/cli library "CLI" "$workspace" "$persist" + replicate ory/kratos-selfservice-ui-node library "Kratos SelfService UI Node Example" "$workspace" "$persist" + replicate ory/kratos-selfservice-ui-react-native library "Kratos SelfService UI React Native Example" "$workspace" "$persist" + replicate ory/fosite library "Fosite" "$workspace" "$persist" + replicate ory/dockertest library "Dockertest" "$workspace" "$persist" + replicate ory/herodot library "Herodot" "$workspace" "$persist" + replicate ory/graceful library "Graceful" "$workspace" "$persist" + replicate ory/themes library "Themes" "$workspace" "$persist" + replicate ory/k8s library "Kubernetes Resources" "$workspace" "$persist" + replicate ory/x library "X" "$workspace" "$persist" + replicate ory/web library "Web" "$workspace" "$persist" + replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$persist" + replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$persist" + replicate ory/milestone-action action "Milestone Action" "$workspace" "$persist" + replicate ory/prettier-styles action "Prettier Styles" "$workspace" "$persist" + replicate ory/build-buf-action action "Buildbuf Action" "$workspace" "$persist" + replicate ory/examples library "Examples" "$workspace" "$persist" + replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$persist" + replicate ory/oathkeeper-maester library "Ory Oathkeeper Maester" "$workspace" "$persist" + replicate ory/sdk library "Ory SDK" "$workspace" "$persist" + replicate ory/platform library "Ory Platform" "$workspace" "$persist" + replicate ory/keto-client-dotnet library "Ory Keto Dotnet Client" "$workspace" "$persist" + replicate ory/keto-client-java library "Ory Keto Java Client" "$workspace" "$persist" + replicate ory/keto-client-rust library "Ory Keto Rust Client" "$workspace" "$persist" + replicate ory/keto-client-dart library "Ory Keto Dart Client" "$workspace" "$persist" + replicate ory/keto-client-js library "Ory Keto JavaScript Client" "$workspace" "$persist" + replicate ory/keto-client-php library "Ory Keto PHP Client" "$workspace" "$persist" + replicate ory/keto-client-go library "Ory Keto Go Client" "$workspace" "$persist" + replicate ory/keto-client-ruby library "Ory Keto Ruby Client" "$workspace" "$persist" + replicate ory/keto-client-python library "Ory Keto Python Client" "$workspace" "$persist" + replicate ory/kratos-client-dotnet library "Ory Kratos Dotnet Client" "$workspace" "$persist" + replicate ory/kratos-client-java library "Ory Kratos Java Client" "$workspace" "$persist" + replicate ory/kratos-client-rust library "Ory Kratos Rust Client" "$workspace" "$persist" + replicate ory/kratos-client-dart library "Ory Kratos Dart Client" "$workspace" "$persist" + replicate ory/kratos-client-js library "Ory Kratos JavaScript Client" "$workspace" "$persist" + replicate ory/kratos-client-php library "Ory Kratos PHP Client" "$workspace" "$persist" + replicate ory/kratos-client-go library "Ory Kratos Go Client" "$workspace" "$persist" + replicate ory/kratos-client-ruby library "Ory Kratos Ruby Client" "$workspace" "$persist" + replicate ory/kratos-client-python library "Ory Kratos Python Client" "$workspace" "$persist" + replicate ory/hydra-client-dotnet library "Ory Hydra Dotnet Client" "$workspace" "$persist" + replicate ory/hydra-client-java library "Ory Hydra Java Client" "$workspace" "$persist" + replicate ory/hydra-client-rust library "Ory Hydra Rust Client" "$workspace" "$persist" + replicate ory/hydra-client-dart library "Ory Hydra Dart Client" "$workspace" "$persist" + replicate ory/hydra-client-js library "Ory Hydra JavaScript Client" "$workspace" "$persist" + replicate ory/hydra-client-php library "Ory Hydra PHP Client" "$workspace" "$persist" + replicate ory/hydra-client-go library "Ory Hydra Go Client" "$workspace" "$persist" + replicate ory/hydra-client-ruby library "Ory Hydra Ruby Client" "$workspace" "$persist" + replicate ory/hydra-client-python library "Ory Hydra Python Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-dotnet library "Ory Oathkeeper Dotnet Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-java library "Ory Oathkeeper Java Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-rust library "Ory Oathkeeper Rust Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-dart library "Ory Oathkeeper Dart Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-js library "Ory Oathkeeper JavaScript Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-php library "Ory Oathkeeper PHP Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-go library "Ory Oathkeeper Go Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-ruby library "Ory Oathkeeper Ruby Client" "$workspace" "$persist" + replicate ory/oathkeeper-client-python library "Ory Oathkeeper Python Client" "$workspace" "$persist" } # replicates the info in this repository into the given target repository @@ -112,12 +106,14 @@ function replicate { echo 'ERROR (replicate): argument "workspace" is missing' exit 1 fi - local -r push=$5 - if [ "$push" != "push" ] && [ "$push" != "none" ]; then - echo "ERROR (replicate): Unknown value for \"push\" argument: \"$push\". Please provide either \"push\" or \"none\"." + local -r persist=$5 + if [ "$persist" != "push" ] && [ "$persist" != "commit" ] && [ "$persist" != "keep" ]; then + echo "ERROR (replicate): Unknown value for \"persist\" argument: \"$persist\". Please provide either \"push\", \"commit\", or \"keep\"." exit 1 fi + printf "\n\n\n########################################################################################\n\n%s (%s)\n\n########################################################################################\n\n" "$repo_id" "$repo_type" + # clone if the codebase doesn't exist in the workspace yet local -r repo_name=$(basename "$repo_id") local -r repo_path="$workspace/$repo_name" @@ -138,8 +134,10 @@ function replicate { fi # optionally commit - if [ "$push" == "push" ]; then - commit_changes + if [ "$persist" == "commit" ] || [ "$persist" == "push" ]; then + commit_changes "$repo_path" + fi + if [ "$persist" == "push" ]; then push_changes fi } @@ -167,8 +165,12 @@ function clone { # commits the changes in the current directory to the local Git client function commit_changes { - git add -A - git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" + local -r repo_path=$1 + ( + cd "$repo_path" + git add -A + git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" || true + ) } # configures the Git client on CI @@ -242,7 +244,7 @@ function install_dependencies_on_ci { # pushes the committed changes from the local Git client to GitHub function push_changes { - git push origin HEAD:master + git push } function substitutePlaceholders { From 5ee59ac80512d8a8ae8f1a52556cf33c75cea802 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 12:23:54 +0200 Subject: [PATCH 069/164] chore(deps): bump minimist and text-runner (#165) Bumps [minimist](https://github.com/substack/minimist) and [text-runner](https://github.com/kevgo/text-runner). These dependencies needed to be updated together. Updates `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) Updates `text-runner` from 5.0.1 to 5.0.2 - [Release notes](https://github.com/kevgo/text-runner/releases) - [Changelog](https://github.com/kevgo/text-runner/blob/main/CHANGELOG.md) - [Commits](https://github.com/kevgo/text-runner/compare/text-runner@5.0.1...text-runner@5.0.2) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect - dependency-name: text-runner dependency-type: direct:development ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 342 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 158 insertions(+), 186 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7949ab4..1f7e6c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,37 +11,37 @@ "ory-prettier-styles": "1.3.0", "prettier": "^2.7.1", "prettier-plugin-packagejson": "^2.2.18", - "text-runner": "5.0.1" + "text-runner": "5.0.2" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -189,12 +189,6 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -237,7 +231,7 @@ "node_modules/anchor-markdown-header/node_modules/emoji-regex": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", - "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", + "integrity": "sha512-73/zxHTjP2N2FQf0J5ngNjxP9LqG2krUshxYaowI8HxZQsiL2pYJc3k9/O93fc5/lCSkZv+bQ5Esk6k6msiSvg==", "dev": true }, "node_modules/ansi-regex": { @@ -358,24 +352,27 @@ } }, "node_modules/cli-progress": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", - "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.11.2.tgz", + "integrity": "sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA==", "dev": true, "dependencies": { - "string-width": "^4.2.0" + "string-width": "^4.2.3" }, "engines": { "node": ">=4" } }, "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/color-convert": { @@ -394,24 +391,11 @@ "dev": true }, "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -545,10 +529,13 @@ } }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -556,7 +543,7 @@ "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -621,9 +608,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -786,7 +773,7 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -849,18 +836,18 @@ "dev": true }, "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -942,19 +929,18 @@ } }, "node_modules/keyv": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz", - "integrity": "sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", + "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", "dev": true, "dependencies": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dev": true, "dependencies": { "uc.micro": "^1.0.1" @@ -963,7 +949,7 @@ "node_modules/lodash.deburr": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", "dev": true }, "node_modules/lowercase-keys": { @@ -982,14 +968,14 @@ "dev": true }, "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, "dependencies": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, @@ -1000,7 +986,7 @@ "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, "node_modules/merge2": { @@ -1056,9 +1042,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/ms": { @@ -1266,12 +1252,12 @@ } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -1289,12 +1275,15 @@ "dev": true }, "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "dependencies": { "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/restore-cursor": { @@ -1474,18 +1463,18 @@ } }, "node_modules/text-runner": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.1.tgz", - "integrity": "sha512-LeYX+AiOfosHBFv4IDvqh6rpmtW/YeNiRb3lRB0UJBBhut1B2JXW5mY08Lt3VLl50QtpnEG5/xTdkjRxX6tcqQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.2.tgz", + "integrity": "sha512-SMa1xpAWl/muzxEwcQRXanf0bTV+2OzmXZtEu/8YdC7Kln0aJ3jripFbK3E/U0ibQjm+Tj6zphmdfoHJhTMobg==", "dev": true, "dependencies": { - "@babel/code-frame": "7.16.7", + "@babel/code-frame": "7.18.6", "cli-cursor": "3.1.0", - "cli-progress": "3.10.0", - "colorette": "1.2.2", + "cli-progress": "3.11.2", + "colorette": "2.0.19", "end-child-processes": "1.0.3", - "minimist": "1.2.5", - "text-runner-core": "5.0.1", + "minimist": "1.2.6", + "text-runner-core": "^5.0.2", "yamljs": "0.3.0" }, "bin": { @@ -1493,21 +1482,21 @@ } }, "node_modules/text-runner-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.1.tgz", - "integrity": "sha512-1hVuzElw4R/0iofvDJMfEW+IIlGdTYiDyWPGQYnw4yOgmOfKvj+gM4jrHASnmGmIBZaFnHMgSy2ZrkkwWs0Z+w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.2.tgz", + "integrity": "sha512-EkKVzH4ssoUrAzD1VBSY/xPn1vJxigQ4mJKveXRuXAvEAP2CBTuqwkNIH2y9KbpJ2n2/sR0jXUsvz2ffJzqFFQ==", "dev": true, "dependencies": { "@sindresorhus/slugify": "1.1.0", "anchor-markdown-header": "0.5.7", - "fs-extra": "10.0.0", + "fs-extra": "10.1.0", "glob": "7.2.0", "glob-promise": "4.2.2", "got": "11.8.2", "humanize-string": "2.1.0", - "interpret": "2.2.0", + "interpret": "3.1.1", "is-glob": "4.0.3", - "markdown-it": "12.3.2", + "markdown-it": "13.0.1", "parse5": "6.0.1", "rechoir": "0.8.0", "tmp-promise": "3.0.3" @@ -1605,27 +1594,27 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -1735,12 +1724,6 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, - "@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", - "dev": true - }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -1783,7 +1766,7 @@ "emoji-regex": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", - "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", + "integrity": "sha512-73/zxHTjP2N2FQf0J5ngNjxP9LqG2krUshxYaowI8HxZQsiL2pYJc3k9/O93fc5/lCSkZv+bQ5Esk6k6msiSvg==", "dev": true } } @@ -1882,18 +1865,18 @@ } }, "cli-progress": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", - "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.11.2.tgz", + "integrity": "sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA==", "dev": true, "requires": { - "string-width": "^4.2.0" + "string-width": "^4.2.3" } }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -1915,21 +1898,11 @@ "dev": true }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, - "compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dev": true, - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2030,15 +2003,15 @@ } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "event-stream": { @@ -2094,9 +2067,9 @@ "dev": true }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -2216,7 +2189,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "http-cache-semantics": { @@ -2267,15 +2240,15 @@ "dev": true }, "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -2337,19 +2310,18 @@ } }, "keyv": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz", - "integrity": "sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", + "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", "dev": true, "requires": { - "compress-brotli": "^1.3.8", "json-buffer": "3.0.1" } }, "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", "dev": true, "requires": { "uc.micro": "^1.0.1" @@ -2358,7 +2330,7 @@ "lodash.deburr": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", + "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==", "dev": true }, "lowercase-keys": { @@ -2374,14 +2346,14 @@ "dev": true }, "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", "dev": true, "requires": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" } @@ -2389,7 +2361,7 @@ "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, "merge2": { @@ -2430,9 +2402,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "ms": { @@ -2572,12 +2544,12 @@ } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -2589,9 +2561,9 @@ "dev": true }, "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "requires": { "lowercase-keys": "^2.0.0" @@ -2723,37 +2695,37 @@ "dev": true }, "text-runner": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.1.tgz", - "integrity": "sha512-LeYX+AiOfosHBFv4IDvqh6rpmtW/YeNiRb3lRB0UJBBhut1B2JXW5mY08Lt3VLl50QtpnEG5/xTdkjRxX6tcqQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/text-runner/-/text-runner-5.0.2.tgz", + "integrity": "sha512-SMa1xpAWl/muzxEwcQRXanf0bTV+2OzmXZtEu/8YdC7Kln0aJ3jripFbK3E/U0ibQjm+Tj6zphmdfoHJhTMobg==", "dev": true, "requires": { - "@babel/code-frame": "7.16.7", + "@babel/code-frame": "7.18.6", "cli-cursor": "3.1.0", - "cli-progress": "3.10.0", - "colorette": "1.2.2", + "cli-progress": "3.11.2", + "colorette": "2.0.19", "end-child-processes": "1.0.3", - "minimist": "1.2.5", - "text-runner-core": "5.0.1", + "minimist": "1.2.6", + "text-runner-core": "^5.0.2", "yamljs": "0.3.0" } }, "text-runner-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.1.tgz", - "integrity": "sha512-1hVuzElw4R/0iofvDJMfEW+IIlGdTYiDyWPGQYnw4yOgmOfKvj+gM4jrHASnmGmIBZaFnHMgSy2ZrkkwWs0Z+w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/text-runner-core/-/text-runner-core-5.0.2.tgz", + "integrity": "sha512-EkKVzH4ssoUrAzD1VBSY/xPn1vJxigQ4mJKveXRuXAvEAP2CBTuqwkNIH2y9KbpJ2n2/sR0jXUsvz2ffJzqFFQ==", "dev": true, "requires": { "@sindresorhus/slugify": "1.1.0", "anchor-markdown-header": "0.5.7", - "fs-extra": "10.0.0", + "fs-extra": "10.1.0", "glob": "7.2.0", "glob-promise": "4.2.2", "got": "11.8.2", "humanize-string": "2.1.0", - "interpret": "2.2.0", + "interpret": "3.1.1", "is-glob": "4.0.3", - "markdown-it": "12.3.2", + "markdown-it": "13.0.1", "parse5": "6.0.1", "rechoir": "0.8.0", "tmp-promise": "3.0.3" diff --git a/package.json b/package.json index 4cc6092..c69f356 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,6 @@ "ory-prettier-styles": "1.3.0", "prettier": "^2.7.1", "prettier-plugin-packagejson": "^2.2.18", - "text-runner": "5.0.1" + "text-runner": "5.0.2" } } From 40576e2a1dfa13a3a412b7f9e450e05025e94da4 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 13 Sep 2022 03:02:45 -0500 Subject: [PATCH 070/164] chore: improve debuggability of sync script (#179) --- scripts/sync.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 4ce1e79..5e2d72a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -112,7 +112,7 @@ function replicate { exit 1 fi - printf "\n\n\n########################################################################################\n\n%s (%s)\n\n########################################################################################\n\n" "$repo_id" "$repo_type" + { printf "\n\n\n\n\n\n\n########################################################################################\n\n %s (%s)\n\n########################################################################################\n\n\n" "$repo_id" "$repo_type"; } 2> /dev/null # clone if the codebase doesn't exist in the workspace yet local -r repo_name=$(basename "$repo_id") @@ -146,18 +146,21 @@ function replicate { ### INDIVIDUAL ACTIVITIES function add_adopters_to_readme { + header "ADDING ADOPTERS TO README" local -r workdir=$1 perl -0pe 's#.*\n#`cat templates/repository/common/ADOPTERS.md`#gse' -i "$workdir/README.md" } # adds an overview of all projects to README.md function add_ecosystem_to_readme { + header "ADDING ECOSYSTEM TO README" local -r workdir=$1 perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$workdir/README.md" } # clones the given project onto the local machine function clone { + header "CLONING" local -r repo_id=$1 local -r repo_path=$2 git clone --depth 1 "git@github.com:$repo_id.git" "$repo_path" @@ -165,6 +168,7 @@ function clone { # commits the changes in the current directory to the local Git client function commit_changes { + header "COMMITTING" local -r repo_path=$1 ( cd "$repo_path" @@ -175,6 +179,7 @@ function commit_changes { # configures the Git client on CI function configure_git_on_ci { + header "CONFIGURING GIT" # set git email & username bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/git.sh) # change global url from https://github.com/ to git@github.com: @@ -183,6 +188,7 @@ function configure_git_on_ci { # copy contributing guide to docs if docs exist function copy_contributing_guide_to_docs { + header "COPYING WRITING GUIDE TO DOCS" local -r workdir=$1 local -r file="$workdir/docs/docs/contributing.md" cat <"$file" @@ -198,6 +204,7 @@ EOF # replicates the template files in templates/repository into the given project function copy_templates { + header "COPYING TEMPLATES" local -r repo_path=$1 local -r repo_type=$2 rm -rf "$repo_path/.github/ISSUE_TEMPLATE/" @@ -227,6 +234,7 @@ function create_workspace { } function format { + header "FORMATTING" local -r repo_path=$1 ( cd "$repo_path" @@ -238,16 +246,19 @@ function format { } function install_dependencies_on_ci { + header "INSTALLING DEPENDENCIES" sudo apt-get update -y sudo apt-get install -y moreutils gettext-base } # pushes the committed changes from the local Git client to GitHub function push_changes { + header "PUSHING TO GITHUB" git push } function substitutePlaceholders { + header "SUBSTITUTING PLACEHOLDERS" local -r repo_id=$1 local -r repo_path=$2 local -r repo_discussions=$3 @@ -268,6 +279,7 @@ function substitute_placeholders_in_file { local -r repo_id=$2 local -r repo_discussions=$3 local -r human_name=$4 + header "SUBSTITUTING PLACEHOLDERS IN FILE" case "$repo_id" in "ory/hydra" | "ory/kratos" | "ory/oathkeeper" | "ory/keto") discussions=$repo_discussions @@ -280,3 +292,11 @@ function substitute_placeholders_in_file { env -i DISCUSSIONS="$discussions" REPOSITORY="$repo_id" PROJECT="$human_name" /bin/bash -c "envsubst < \"$file\" | sponge \"$file\"" fi } + +function header { + { set +x; } 2>/dev/null + echo + echo "$1" ... + echo + set -x +} From 0027f207b2f6862fcc64b0b8aa59f412483b4601 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 13 Sep 2022 13:45:50 -0500 Subject: [PATCH 071/164] Document testing a single repo (#181) --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 21dc27e..82083a2 100644 --- a/README.md +++ b/README.md @@ -51,3 +51,12 @@ by the sync script. To test committing, replace the last line with this one: ``` replicate_all "$workspace" commit ``` + +To test syncing problems with a single repo: + +``` +source scripts/sync.sh +workspace=$(create_workspace) +GITHUB_SHA=12345 +replicate ory/hydra server "Hydra" "$workspace" "keep" +``` From 1211f3ad84a0636652e806fc7eb69a934a894dec Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 13 Sep 2022 17:17:02 -0500 Subject: [PATCH 072/164] fix: adding adopters (#180) --- scripts/sync.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 5e2d72a..968a309 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -125,10 +125,10 @@ function replicate { copy_templates "$repo_path" "$repo_type" substitutePlaceholders "$repo_id" "$repo_path" "https://github.com/$repo_id/discussions" "$human_name" if [ -d "$repo_id/docs/docs" ]; then - copy_contributing_guide_to_docs "$repo_id" + copy_contributing_guide_to_docs "$repo_path" fi - add_adopters_to_readme "$repo_id" - add_ecosystem_to_readme "$repo_id" + add_adopters_to_readme "$repo_path" + add_ecosystem_to_readme "$repo_path" if test -f package.json; then format "$repo_path" fi @@ -147,15 +147,15 @@ function replicate { function add_adopters_to_readme { header "ADDING ADOPTERS TO README" - local -r workdir=$1 - perl -0pe 's#.*\n#`cat templates/repository/common/ADOPTERS.md`#gse' -i "$workdir/README.md" + local -r repo_path=$1 + perl -0pe 's#.*\n#`cat templates/repository/common/ADOPTERS.md`#gse' -i "$repo_path/README.md" } # adds an overview of all projects to README.md function add_ecosystem_to_readme { header "ADDING ECOSYSTEM TO README" - local -r workdir=$1 - perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$workdir/README.md" + local -r repo_path=$1 + perl -0pe 's#.*\n#`cat templates/repository/common/PROJECTS.md`#gse' -i "$repo_path/README.md" } # clones the given project onto the local machine @@ -189,8 +189,8 @@ function configure_git_on_ci { # copy contributing guide to docs if docs exist function copy_contributing_guide_to_docs { header "COPYING WRITING GUIDE TO DOCS" - local -r workdir=$1 - local -r file="$workdir/docs/docs/contributing.md" + local -r repo_path=$1 + local -r file="$repo_path/docs/docs/contributing.md" cat <"$file" --- id: contributing @@ -198,7 +198,7 @@ title: Contribution Guidelines --- EOF - cat "$workdir/CONTRIBUTING.md" >>"$file" + cat "$repo_path/CONTRIBUTING.md" >>"$file" sed '/Contributing to/d' "$file" } From ac6bef904ee4d135b9d5ee85418716237cf09df0 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 14 Sep 2022 13:50:22 -0500 Subject: [PATCH 073/164] fix: push from correct directory (#186) --- scripts/sync.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 968a309..8b8e398 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -138,7 +138,7 @@ function replicate { commit_changes "$repo_path" fi if [ "$persist" == "push" ]; then - push_changes + push_changes "$repo_path" fi } @@ -254,7 +254,11 @@ function install_dependencies_on_ci { # pushes the committed changes from the local Git client to GitHub function push_changes { header "PUSHING TO GITHUB" - git push + local -r repo_path=$1 + ( + cd "$repo_path" + git push + ) } function substitutePlaceholders { From 71a0f67439104f2fcaa1b703e7d5f1a3852a0da6 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 15 Sep 2022 17:00:45 -0500 Subject: [PATCH 074/164] chore: improve CI task name (#187) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5f947bd..07d22cb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: push: jobs: - format: + test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From e3bf5d8a5563fc777165f39295a640a78feb95d9 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 15 Sep 2022 18:29:28 -0500 Subject: [PATCH 075/164] chore: format all files (#184) --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8b8e398..8f5c1fd 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -112,7 +112,7 @@ function replicate { exit 1 fi - { printf "\n\n\n\n\n\n\n########################################################################################\n\n %s (%s)\n\n########################################################################################\n\n\n" "$repo_id" "$repo_type"; } 2> /dev/null + { printf "\n\n\n\n\n\n\n########################################################################################\n\n %s (%s)\n\n########################################################################################\n\n\n" "$repo_id" "$repo_type"; } 2>/dev/null # clone if the codebase doesn't exist in the workspace yet local -r repo_name=$(basename "$repo_id") From 35826b0dd724632b9d265126e8ea2fd2bbdb968b Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 15 Sep 2022 18:29:53 -0500 Subject: [PATCH 076/164] chore: improve shebang (#182) --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8f5c1fd..e88bfe2 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -Eexuo pipefail # abort the script on error # replicate shared data from this repo into all repositories at Ory From 232531150bbe884fa146a9c401ec5c1acff33197 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 15 Sep 2022 18:30:23 -0500 Subject: [PATCH 077/164] fix: use single commit message (#185) --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index e88bfe2..8021138 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -173,7 +173,7 @@ function commit_changes { ( cd "$repo_path" git add -A - git commit -a -m "chore: update repository templates" -m "[skip ci] - updated repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" || true + git commit -a -m "chore: update repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" || true ) } From 935cc0443464fd76fbf41dff1081b368080c9353 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 22 Sep 2022 07:36:15 -0500 Subject: [PATCH 078/164] chore: format using Make (#188) --- .github/workflows/format.yml | 13 ++++--------- Makefile | 3 +-- package-lock.json | 2 +- package.json | 4 +--- templates/repository/common/CONTRIBUTING.md | 12 +++--------- 5 files changed, 10 insertions(+), 24 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 8b05a11..a7a720e 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -2,7 +2,6 @@ name: Format on: pull_request: - types: [opened, reopened] push: jobs: @@ -10,13 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - id: cache-node - uses: actions/cache@v3 + - uses: actions/setup-go@v3 with: - path: node_modules - key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} - - run: npm ci --legacy-peer-deps - if: steps.cache-node.outputs.cache-hit != 'true' - - run: npm run format + go-version: 1.19 + - run: make format - name: Indicate formatting issues - run: git diff HEAD --exit-code + run: git diff HEAD --exit-code --color diff --git a/Makefile b/Makefile index 03b4ed7..ed49810 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ format: .bin/shfmt node_modules # formats the source code echo formatting ... .bin/shfmt --write . - npm run format + npm exec -- prettier --write . help: # shows all available Make commands cat Makefile | grep '^[^ ]*:' | grep -v '^\.bin/' | grep -v '^node_modules' | grep -v '.SILENT:' | grep -v help | sed 's/:.*#/#/' | column -s "#" -t @@ -11,7 +11,6 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters find . -name '*.sh' | xargs .bin/shellcheck echo Verifying formatting ... .bin/shfmt --list . - npm run format:check .bin/shellcheck: Makefile echo installing Shellcheck ... diff --git a/package-lock.json b/package-lock.json index 1f7e6c3..73bd3ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "devDependencies": { "ory-prettier-styles": "1.3.0", - "prettier": "^2.7.1", + "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" } diff --git a/package.json b/package.json index c69f356..10ca1ba 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,12 @@ "url": "git+https://github.com/ory/meta.git" }, "scripts": { - "format": "prettier --write .", - "format:check": "prettier --check .", "text-run": "text-run" }, "prettier": "ory-prettier-styles", "devDependencies": { "ory-prettier-styles": "1.3.0", - "prettier": "^2.7.1", + "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" } diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 4a12913..3b11d7d 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -178,11 +178,9 @@ request, go through this checklist: changes against the `master` branch. 1. Run the full project test suite with the `go test -tags sqlite ./...` (or equivalent) command and confirm that it passes. -1. Run `make format` if a `Makefile` is available, `gofmt -s` if the project is - written in Go, `npm run format` if the project is written for NodeJS. +1. Run `make format` 1. Add a descriptive prefix to commits. This ensures a uniform commit history - and helps structure the changelog. - Please refer to this + and helps structure the changelog. Please refer to this [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) for an overview. @@ -234,11 +232,7 @@ Please disclose vulnerabilities exclusively to ## Code style -Please follow these guidelines when formatting source code: - -- Go code should match the output of `gofmt -s` and pass `golangci-lint run`. -- NodeJS and JavaScript code should be prettified using `npm run format` where - appropriate. +Please run `make format` to format all source code following the Ory standard. ### Working with forks From 4ef13422e91f15b9f70014a0d67b92498ab728d1 Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Fri, 23 Sep 2022 14:40:53 +0200 Subject: [PATCH 079/164] fix: typos and grammar (#190) --- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 18 +++++----- .../common/.github/workflows/stale.yml | 8 ++--- templates/repository/common/CONTRIBUTING.md | 33 ++++++++++--------- templates/repository/common/PROJECTS.md | 4 +-- templates/repository/common/SECURITY.md | 4 +-- .../library/.github/pull_request_template.md | 8 ++--- .../server/.github/pull_request_template.md | 8 ++--- 7 files changed, 42 insertions(+), 41 deletions(-) diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index e657ee7..1314ff2 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -13,8 +13,8 @@ body: Ory is leaning heavily on [Google's design docs process](https://www.industrialempathy.com/posts/design-docs-at-google/) and [Golang Proposals](https://github.com/golang/proposal). - Writing a design doc prior to contributing your change ensures that your ideas are checked with - the community and maintainers. It will save you a lot of time developing things which might need changed + Writing a design doc before contributing your change ensures that your ideas are checked with + the community and maintainers. It will save you a lot of time developing things that might need to be changed after code reviews, and your pull requests will be merged faster. type: markdown - attributes: @@ -64,7 +64,7 @@ body: This section should start with an overview and then go into details. The design doc is the place to write down the trade-offs you made in designing your software. Focus on those trade-offs to produce a useful document with long-term value. That is, given the context (facts), goals and non-goals (requirements), the design doc is the place to suggest solutions and show why a particular solution best satisfies those goals. - The point of writing a document over a more formal medium is to provide the flexibility to express the problem set at hand in an appropriate manner. Because of this, there is no explicit guidance for how to actually describe the design. + The point of writing a document over a more formal medium is to provide the flexibility to express the problem at hand in an appropriate manner. Because of this, there is no explicit guidance on how to actually describe the design. label: "The design" id: design type: textarea @@ -73,21 +73,21 @@ body: - attributes: description: | - If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead focus on the parts that are relevant to the design and its trade-offs. + If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead, focus on the parts that are relevant to the design and its trade-offs. label: "APIs" id: apis type: textarea - attributes: description: | - Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead focus on the parts that are relevant to the design and its trade-offs. + Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead, focus on the parts that are relevant to the design and its trade-offs. label: "Data storage" id: persistence type: textarea - attributes: description: | - Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the implementability of the design. + Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the feasibility of the design. label: "Code and pseudo-code" id: pseudocode type: textarea @@ -98,9 +98,9 @@ body: On one end of the extreme is the “greenfield software project”, where all we know are the goals, and the solution can be whatever makes the most sense. Such a document may be wide-ranging, but it also needs to quickly define a set of rules that allow zooming in on a manageable set of solutions. - On the other end are systems where the possible solutions are very well defined, but it isn’t at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn’t designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. + On the other end are systems where the possible solutions are very well defined, but it isn't at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn't designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. - In this situation you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are really great, and hence such a document should focus on selecting the best way given all identified trade-offs. + In this situation, you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are great, and hence such a document should focus on selecting the best way given all identified trade-offs. label: "Degree of constraint" id: constrait type: textarea @@ -109,7 +109,7 @@ body: description: | This section lists alternative designs that would have reasonably achieved similar outcomes. The focus should be on the trade-offs that each respective design makes and how those trade-offs led to the decision to select the design that is the primary topic of the document. - While it is fine to be succinct about solution that ended up not being selected, this section is one of the most important ones as it shows very explicitly why the selected solution is the best given the project goals and how other solutions, that the reader may be wondering about, introduce trade-offs that are less desirable given the goals. + While it is fine to be succinct about a solution that ended up not being selected, this section is one of the most important ones as it shows very explicitly why the selected solution is the best given the project goals and how other solutions, that the reader may be wondering about, introduce trade-offs that are less desirable given the goals. label: Alternatives considered id: alternatives diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index eb36db1..666299c 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -15,12 +15,12 @@ jobs: stale-issue-message: | Hello contributors! - I am marking this issue as stale as it has not received any engagement from the community or maintainers a year. That does not imply that the issue has no merit! If you feel strongly about this issue + I am marking this issue as stale as it has not received any engagement from the community or maintainers for a year. That does not imply that the issue has no merit! If you feel strongly about this issue - open a PR referencing and resolving the issue; - - leave a comment on it and discuss ideas how you could contribute towards resolving it; + - leave a comment on it and discuss ideas on how you could contribute towards resolving it; - leave a comment and describe in detail why this issue is critical for your use case; - - open a new issue with updated details and a plan on resolving the issue. + - open a new issue with updated details and a plan for resolving the issue. Throughout its lifetime, Ory has received over 10.000 issues and PRs. To sustain that growth, we need to prioritize and focus on issues that are important to the community. A good indication of importance, and thus priority, is activity on a topic. @@ -30,7 +30,7 @@ jobs: The motivation for this automation is to help prioritize issues in the backlog and not ignore, reject, or belittle anyone. - If this issue was marked as stale erroneous you can exempt it by adding the `backlog` label, assigning someone, or setting a milestone for it. + If this issue was marked as stale erroneously you can exempt it by adding the `backlog` label, assigning someone, or setting a milestone for it. Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you! diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 3b11d7d..cb0e03f 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -31,19 +31,19 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING _Please note_: We take Ory $PROJECT's security and our users' trust very seriously. If you believe you have found a security issue in Ory $PROJECT, -please disclose by contacting us at security@ory.sh. +please disclose it by contacting us at security@ory.sh. There are many ways in which you can contribute. The goal of this document is to provide a high-level overview of how you can get involved in Ory. As a potential contributor, your changes and ideas are welcome at any hour of -the day or night, weekdays, weekends, and holidays. Please do not ever hesitate -to ask a question or send a pull request. +the day or night, on weekdays, weekends, and holidays. Please do not ever +hesitate to ask a question or send a pull request. If you are unsure, just ask or submit the issue or pull request anyways. You won't be yelled at for giving it your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of -contributions, and don't want a wall of rules to get in the way of that. +contributions and don't want a wall of rules to get in the way of that. That said, if you want to ensure that a pull request is likely to be merged, talk to us! You can find out our thoughts and ensure that your contribution @@ -93,8 +93,8 @@ to help out: look at discussions in the forum and take part in community events. More info on this in [Communication](#communication). -- **Answer discussions.** There are at all times a number of unanswered - discussions on GitHub, you can see an +- **Answer discussions.** At all times, there are several unanswered discussions + on GitHub. You can see an [overview here](https://github.com/discussions?discussions_q=is%3Aunanswered+org%3Aory+sort%3Aupdated-desc). If you think you know an answer or can provide some information that might help, please share it! Bonus: You get GitHub achievements for answered @@ -103,13 +103,13 @@ to help out: - **Help with open issues.** We have a lot of open issues for Ory $PROJECT and some of them may lack necessary information, some are duplicates of older issues. You can help out by guiding people through the process of filling out - the issue template, asking for clarifying information, or pointing them to + the issue template, asking for clarifying information or pointing them to existing issues that match their description of the problem. - **Review documentation changes.** Most documentation just needs a review for proper spelling and grammar. If you think a document can be improved in any way, feel free to hit the `edit` button at the top of the page. More info on - contributing to documentation [here](#contribute-documentation). + contributing to the documentation [here](#contribute-documentation). - **Help with tests.** Pull requests may lack proper tests or test plans. These are needed for the change to be implemented safely. @@ -122,7 +122,7 @@ questions, discuss bugs and feature requests, talk to other users of Ory, etc. Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for in-depth discussions and lots of code examples, logs and similar data. -You can also join our community calls, if you want to speak to the Ory team +You can also join our community calls if you want to speak to the Ory team directly or ask some questions. You can find more info and participate in [Slack](https://www.ory.sh/chat) in the #community-call channel. @@ -130,12 +130,12 @@ If you want to receive regular notifications about updates to Ory $PROJECT, consider joining the mailing list. We will _only_ send you vital information on the projects that you are interested in. -Also [follow us on twitter](https://twitter.com/orycorp). +Also, [follow us on Twitter](https://twitter.com/orycorp). ## Contribute examples -One of the most impactful ways to make a contribution is adding examples. You -can find an overview of examples using Ory services in the +One of the most impactful ways to contribute is by adding examples. You can find +an overview of examples using Ory services on the [documentation examples page](https://www.ory.sh/docs/examples). Source code for examples can be found in most cases in the [ory/examples](https://github.com/ory/examples) repository. @@ -147,7 +147,7 @@ describe your example before you start working on it. We would love to provide guidance to make for a pleasant contribution experience. Go through this checklist to contribute an example: -1. Create a github issue proposing a new example and make sure it's different +1. Create a GitHub issue proposing a new example and make sure it's different from an existing one. 1. Fork the repo and create a feature branch off of `master` so that changes do not get mixed up. @@ -196,13 +196,14 @@ us the rights to use your contribution. You can see the Apache 2.0 license under which our projects are published [here](https://github.com/ory/meta/blob/master/LICENSE). -When pull requests fail testing, authors are expected to update their pull -requests to address the failures until the tests pass. +When pull requests fail the automated testing stages (for example unit or E2E +tests), authors are expected to update their pull requests to address the +failures until the tests pass. Pull requests eligible for review 1. follow the repository's code formatting conventions; -2. include tests which prove that the change works as intended and does not add +2. include tests that prove that the change works as intended and does not add regressions; 3. document the changes in the code and/or the project's documentation; 4. pass the CI pipeline; diff --git a/templates/repository/common/PROJECTS.md b/templates/repository/common/PROJECTS.md index 4c9c9b1..3e1fb04 100644 --- a/templates/repository/common/PROJECTS.md +++ b/templates/repository/common/PROJECTS.md @@ -27,8 +27,8 @@ deal with: Self-service Login and Registration, Multi-Factor Authentication [Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and OpenID Connect Provider which easily connects to any existing identity system by -writing a tiny "bridge" application. Gives absolute control over user interface -and user experience flows. +writing a tiny "bridge" application. It gives absolute control over the user +interface and user experience flows. ### Ory Oathkeeper: Identity & Access Proxy diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 70f1ef4..52387a3 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -21,8 +21,8 @@ https://github.com/ory/meta/blob/master/templates/repository/SECURITY.md ## Supported Versions -We release patches for security vulnerabilities. Which versions are eligible -receiving such patches depend on the CVSS v3.0 Rating: +We release patches for security vulnerabilities. Which versions are eligible for +receiving such patches depends on the CVSS v3.0 Rating: | CVSS v3.0 | Supported Versions | | --------- | ----------------------------------------- | diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index e77af32..0796297 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -2,7 +2,7 @@ Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. This text will be included in the changelog. If applicable, include links to documentation or pieces of code. -If your change includes breaking changes please add a codeblock documenting the breaking change: +If your change includes breaking changes please add a code block documenting the breaking change: ``` BREAKING CHANGES: This patch changes the behavior of configuration item `foo` to do bar. To keep the existing @@ -23,7 +23,7 @@ If this pull request Pull requests introducing new features, which do not have a design document linked are more likely to be rejected and take on average 2-8 weeks longer to get merged. -You can discuss changes with maintainers either in the Github Discusssions in this repository or +You can discuss changes with maintainers either in the Github Discussions in this repository or join the [Ory Chat](https://www.ory.sh/chat). --> @@ -39,9 +39,9 @@ them, don't hesitate to ask. We're here to help! This is simply a reminder of wh - [ ] I have read the [security policy](../security/policy). - [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security vulnerability, - I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. + I confirm that I got approval (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. -- [ ] I have added necessary documentation within the code base (if appropriate). +- [ ] I have added the necessary documentation within the code base (if appropriate). ## Further comments diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index 3d85438..3bd4b80 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -2,7 +2,7 @@ Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. This text will be included in the changelog. If applicable, include links to documentation or pieces of code. -If your change includes breaking changes please add a codeblock documenting the breaking change: +If your change includes breaking changes please add a code block documenting the breaking change: ``` BREAKING CHANGES: This patch changes the behavior of configuration item `foo` to do bar. To keep the existing @@ -23,7 +23,7 @@ If this pull request Pull requests introducing new features, which do not have a design document linked are more likely to be rejected and take on average 2-8 weeks longer to get merged. -You can discuss changes with maintainers either in the Github Discusssions in this repository or +You can discuss changes with maintainers either in the Github Discussions in this repository or join the [Ory Chat](https://www.ory.sh/chat). --> @@ -42,8 +42,8 @@ If you're unsure about any of them, don't hesitate to ask. We're here to help! - [ ] I am following the [contributing code guidelines](../blob/master/CONTRIBUTING.md#contributing-code). - [ ] I have read the [security policy](../security/policy). - [ ] I confirm that this pull request does not address a security vulnerability. - If this pull request addresses a security. vulnerability, - I confirm that I got green light (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. + If this pull request addresses a security vulnerability, + I confirm that I got the approval (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added or changed [the documentation](https://github.com/ory/docs). From 19eed817e5d5b64509887ef5f1e3eff3e3ce03a1 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 26 Sep 2022 21:45:36 +0200 Subject: [PATCH 080/164] docs: serlo adopter (#193) --- static/adopters/dark/serlo.svg | 13 +++++++++++++ static/adopters/light/serlo.svg | 13 +++++++++++++ templates/repository/common/ADOPTERS.md | 11 +++++++++++ 3 files changed, 37 insertions(+) create mode 100644 static/adopters/dark/serlo.svg create mode 100644 static/adopters/light/serlo.svg diff --git a/static/adopters/dark/serlo.svg b/static/adopters/dark/serlo.svg new file mode 100644 index 0000000..8c08309 --- /dev/null +++ b/static/adopters/dark/serlo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/adopters/light/serlo.svg b/static/adopters/light/serlo.svg new file mode 100644 index 0000000..5e9ac67 --- /dev/null +++ b/static/adopters/light/serlo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 945cfa0..398dd41 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -344,6 +344,17 @@ that your company deserves a spot here, reach out to lunasec.io + + + Adopter * + Serlo + + + + Serlo + + + serlo.org From 50c6554d0d5e0dbfe276b45fb1bb32ad5e863a57 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 6 Oct 2022 20:21:29 +0200 Subject: [PATCH 081/164] fix: switch light/dark adopter svg (#194) --- static/adopters/dark/serlo.svg | 22 +++++++++++----------- static/adopters/light/serlo.svg | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/static/adopters/dark/serlo.svg b/static/adopters/dark/serlo.svg index 8c08309..5e9ac67 100644 --- a/static/adopters/dark/serlo.svg +++ b/static/adopters/dark/serlo.svg @@ -1,13 +1,13 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/static/adopters/light/serlo.svg b/static/adopters/light/serlo.svg index 5e9ac67..8c08309 100644 --- a/static/adopters/light/serlo.svg +++ b/static/adopters/light/serlo.svg @@ -1,13 +1,13 @@ - - - - - - - - - - - + + + + + + + + + + + From 23d918a32533554c30d720dc44e821de3cda18f8 Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Thu, 6 Oct 2022 20:28:44 +0200 Subject: [PATCH 082/164] chore: ignore top-level heading in toc in CONTRIBUTING.md (#192) --- templates/repository/common/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index cb0e03f..69fc926 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -8,7 +8,7 @@ https://github.com/ory/meta/blob/master/templates/repository/common/CONTRIBUTING --> -# Contribute to Ory $PROJECT +# Contribute to Ory $PROJECT From 6ab5ce6da0cc57d4492e932602bbfd4a76547795 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:27:03 +0200 Subject: [PATCH 083/164] docs: rename --- .../repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 6 +++--- .../repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 2 +- .../common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index a3458f2..cf7be43 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -22,7 +22,7 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "This issue affects my [Ory Cloud](https://www.ory.sh/) project." + "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: @@ -86,7 +86,7 @@ body: - attributes: label: "On which operating system are you observing this issue?" options: - - Ory Cloud + - Ory Network - macOS - Linux - Windows @@ -97,7 +97,7 @@ body: - attributes: label: "In which environment are you deploying?" options: - - Ory Cloud + - Ory Network - Docker - "Docker Compose" - "Kubernetes with Helm" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 1314ff2..70bccd0 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -33,7 +33,7 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "This issue affects my [Ory Cloud](https://www.ory.sh/) project." + "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index 0e48be3..cf68171 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -26,7 +26,7 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "This issue affects my [Ory Cloud](https://www.ory.sh/) project." + "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: From 4a68ca0e3b70305c4a49a65777cb7f83a5eb9d89 Mon Sep 17 00:00:00 2001 From: Levente Orban Date: Wed, 26 Oct 2022 16:35:05 +0200 Subject: [PATCH 084/164] chore(doc): add dyrector.io to adopters (#196) --- static/adopters/dark/dyrector_io.svg | 43 ++++++++++++++++++++++ static/adopters/light/dyrector_io.svg | 47 +++++++++++++++++++++++++ templates/repository/common/ADOPTERS.md | 24 +++++++++---- 3 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 static/adopters/dark/dyrector_io.svg create mode 100644 static/adopters/light/dyrector_io.svg diff --git a/static/adopters/dark/dyrector_io.svg b/static/adopters/dark/dyrector_io.svg new file mode 100644 index 0000000..cbf1657 --- /dev/null +++ b/static/adopters/dark/dyrector_io.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/dyrector_io.svg b/static/adopters/light/dyrector_io.svg new file mode 100644 index 0000000..305169d --- /dev/null +++ b/static/adopters/light/dyrector_io.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 398dd41..238c7ae 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -113,7 +113,7 @@ that your company deserves a spot here, reach out to unifiedglobalarchiving.com/data-detect/ - + Adopter * Sainsbury's @@ -146,7 +146,7 @@ that your company deserves a spot here, reach out to reyah.eu - + Adopter * Zero @@ -157,7 +157,7 @@ that your company deserves a spot here, reach out to getzero.dev - + Adopter * Padis @@ -190,7 +190,7 @@ that your company deserves a spot here, reach out to securityonionsolutions.com - + Adopter * Factly @@ -234,7 +234,7 @@ that your company deserves a spot here, reach out to spiri.bo - + Sponsor Strivacity @@ -345,7 +345,7 @@ that your company deserves a spot here, reach out to lunasec.io - + Adopter * Serlo @@ -356,6 +356,18 @@ that your company deserves a spot here, reach out to serlo.org + + + Adopter * + dyrector.io + + + + dyrector.io + + + dyrector.io + From 852a1aece5fefac0a03f928672538c5d8c536ad8 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 1 Nov 2022 16:06:35 -0400 Subject: [PATCH 085/164] docs: add link to original to header of files (#171) --- scripts/sync.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8021138..80afa7f 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -208,13 +208,13 @@ function copy_templates { local -r repo_path=$1 local -r repo_type=$2 rm -rf "$repo_path/.github/ISSUE_TEMPLATE/" - cp "templates/repository/common/CONTRIBUTING.md" "$repo_path/CONTRIBUTING.md" - cp "templates/repository/common/SECURITY.md" "$repo_path/SECURITY.md" - cp "templates/repository/common/LICENSE" "$repo_path/LICENSE" - cp "templates/repository/common/CODE_OF_CONDUCT.md" "$repo_path/CODE_OF_CONDUCT.md" - cp -n "templates/repository/common/.reference-ignore" "$repo_path/.reference-ignore" || true # copy only if it does not exist, as it is meant to help getting started - cp -r "templates/repository/common/.github" "$repo_path/" - cp -r "templates/repository/$repo_type/.github" "$repo_path/" + .bin/ory dev headers cp "templates/repository/common/CONTRIBUTING.md" "$repo_path/CONTRIBUTING.md" + .bin/ory dev headers cp "templates/repository/common/SECURITY.md" "$repo_path/SECURITY.md" + .bin/ory dev headers cp "templates/repository/common/LICENSE" "$repo_path/LICENSE" + .bin/ory dev headers cp "templates/repository/common/CODE_OF_CONDUCT.md" "$repo_path/CODE_OF_CONDUCT.md" + .bin/ory dev headers cp -n "templates/repository/common/.reference-ignore" "$repo_path/.reference-ignore" || true # copy only if it does not exist, as it is meant to help getting started + .bin/ory dev headers cp -r "templates/repository/common/.github" "$repo_path/" + .bin/ory dev headers cp -r "templates/repository/$repo_type/.github" "$repo_path/" } # creates a pull request with the changes on GitHub @@ -249,6 +249,7 @@ function install_dependencies_on_ci { header "INSTALLING DEPENDENCIES" sudo apt-get update -y sudo apt-get install -y moreutils gettext-base + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.45 } # pushes the committed changes from the local Git client to GitHub From b41b1ee5ed62f47bac563014929c64bff0c14163 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 1 Nov 2022 20:38:01 -0400 Subject: [PATCH 086/164] chore: finetune sync headers (#200) --- scripts/sync.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 80afa7f..efc8012 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -215,6 +215,10 @@ function copy_templates { .bin/ory dev headers cp -n "templates/repository/common/.reference-ignore" "$repo_path/.reference-ignore" || true # copy only if it does not exist, as it is meant to help getting started .bin/ory dev headers cp -r "templates/repository/common/.github" "$repo_path/" .bin/ory dev headers cp -r "templates/repository/$repo_type/.github" "$repo_path/" + # copy pull-request templates as-is because they are displayed verbatim and shouldn't contain the comment header + if [ -f "templates/repository/$repo_type/.github/pull_request_template.md" ]; then + cp "templates/repository/$repo_type/.github/pull_request_template.md" "$repo_path/.github" + fi } # creates a pull request with the changes on GitHub From a2fba7e968572391ac4a55ce362dca0c4800c97d Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Tue, 1 Nov 2022 20:56:03 -0400 Subject: [PATCH 087/164] chore: remove old headers (#198) --- CONTRIBUTING.md | 10 ---------- SECURITY.md | 10 ---------- templates/repository/common/CONTRIBUTING.md | 10 ---------- templates/repository/common/SECURITY.md | 10 ---------- 4 files changed, 40 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1d7fae9..6ccb115 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,3 @@ - - # Contributing to ORY {{Project}} diff --git a/SECURITY.md b/SECURITY.md index 70f1ef4..4268bcf 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,13 +1,3 @@ - - diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 69fc926..b33e33c 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -1,13 +1,3 @@ - - # Contribute to Ory $PROJECT diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 52387a3..7aa8d22 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -1,13 +1,3 @@ - - From ea8690634a8839c699e0e7b469f0347af3426153 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 2 Nov 2022 07:06:44 -0400 Subject: [PATCH 088/164] chore: license checker (#197) --- .github/workflows/licenses.yml | 21 ++ Makefile | 8 +- package-lock.json | 565 +++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 594 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/licenses.yml diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml new file mode 100644 index 0000000..a4592c6 --- /dev/null +++ b/.github/workflows/licenses.yml @@ -0,0 +1,21 @@ +name: Licenses + +on: + pull_request: + push: + branches: + - main + - master + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: "1.18" + - uses: actions/setup-node@v2 + with: + node-version: "18" + - run: make licenses diff --git a/Makefile b/Makefile index ed49810..6cb8397 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,12 @@ format: .bin/shfmt node_modules # formats the source code help: # shows all available Make commands cat Makefile | grep '^[^ ]*:' | grep -v '^\.bin/' | grep -v '^node_modules' | grep -v '.SILENT:' | grep -v help | sed 's/:.*#/#/' | column -s "#" -t +licenses: .bin/licenses node_modules # checks open-source licenses + .bin/licenses + +.bin/licenses: Makefile + curl https://raw.githubusercontent.com/ory/ci/master/licenses/install | sh + test: .bin/shellcheck .bin/shfmt node_modules # runs all linters echo running tests ... find . -name '*.sh' | xargs .bin/shellcheck @@ -27,7 +33,7 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters chmod +x .bin/shfmt node_modules: package.json package-lock.json - echo installing Prettier ... + echo installing Node dependencies ... npm ci touch node_modules # update timestamp so that Make doesn't reinstall it over and over diff --git a/package-lock.json b/package-lock.json index 73bd3ba..e0a871d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "meta", "version": "1.0.0", "devDependencies": { + "license-checker": "^25.0.1", "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", @@ -219,6 +220,12 @@ "@types/node": "*" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", @@ -261,6 +268,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -270,6 +286,12 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -419,6 +441,15 @@ } } }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/decamelize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", @@ -485,6 +516,16 @@ "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -779,6 +820,12 @@ "node": ">=4" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -916,6 +963,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -937,6 +990,36 @@ "json-buffer": "3.0.1" } }, + "node_modules/license-checker": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.0" + }, + "bin": { + "license-checker": "bin/license-checker" + } + }, + "node_modules/license-checker/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/linkify-it": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", @@ -1047,12 +1130,49 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -1065,6 +1185,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1095,6 +1221,34 @@ "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", "dev": true }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -1239,6 +1393,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -1347,6 +1542,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -1362,6 +1566,15 @@ "node": ">=8" } }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/sort-object-keys": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", @@ -1385,6 +1598,66 @@ "sort-package-json": "cli.js" } }, + "node_modules/spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", + "dev": true + }, + "node_modules/spdx-satisfies": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", + "dev": true, + "dependencies": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -1541,6 +1814,15 @@ "node": ">=8.0" } }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -1556,6 +1838,22 @@ "node": ">= 10.0.0" } }, + "node_modules/util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1754,6 +2052,12 @@ "@types/node": "*" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", @@ -1792,12 +2096,24 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1918,6 +2234,12 @@ "ms": "2.1.2" } }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true + }, "decamelize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", @@ -1962,6 +2284,16 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2192,6 +2524,12 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -2299,6 +2637,12 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2318,6 +2662,35 @@ "json-buffer": "3.0.1" } }, + "license-checker": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "linkify-it": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", @@ -2407,18 +2780,55 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2443,6 +2853,28 @@ "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", "dev": true }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -2534,6 +2966,45 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, + "read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -2603,6 +3074,12 @@ "queue-microtask": "^1.2.2" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -2615,6 +3092,12 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "dev": true + }, "sort-object-keys": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", @@ -2635,6 +3118,66 @@ "sort-object-keys": "^1.1.3" } }, + "spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "dev": true, + "requires": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "spdx-ranges": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz", + "integrity": "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==", + "dev": true + }, + "spdx-satisfies": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", + "dev": true, + "requires": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -2764,6 +3307,12 @@ "is-number": "^7.0.0" } }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -2776,6 +3325,22 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 10ca1ba..f9408c2 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "prettier": "ory-prettier-styles", "devDependencies": { + "license-checker": "^25.0.1", "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", From d3f8710e356fb833d4bd71b4ba19d062df2ea89e Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 2 Nov 2022 07:33:23 -0400 Subject: [PATCH 089/164] chore: unified formatting for all repos (#199) --- .../common/.github/workflows/format.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 templates/repository/common/.github/workflows/format.yml diff --git a/templates/repository/common/.github/workflows/format.yml b/templates/repository/common/.github/workflows/format.yml new file mode 100644 index 0000000..a7a720e --- /dev/null +++ b/templates/repository/common/.github/workflows/format.yml @@ -0,0 +1,17 @@ +name: Format + +on: + pull_request: + push: + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v3 + with: + go-version: 1.19 + - run: make format + - name: Indicate formatting issues + run: git diff HEAD --exit-code --color From 9f57fecccae6e37a4b7ff5863a683d27e583cd0f Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Wed, 2 Nov 2022 08:39:35 -0400 Subject: [PATCH 090/164] Revert "chore: unified formatting for all repos (#199)" (#201) This reverts commit d3f8710e356fb833d4bd71b4ba19d062df2ea89e. --- .../common/.github/workflows/format.yml | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 templates/repository/common/.github/workflows/format.yml diff --git a/templates/repository/common/.github/workflows/format.yml b/templates/repository/common/.github/workflows/format.yml deleted file mode 100644 index a7a720e..0000000 --- a/templates/repository/common/.github/workflows/format.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Format - -on: - pull_request: - push: - -jobs: - format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 - with: - go-version: 1.19 - - run: make format - - name: Indicate formatting issues - run: git diff HEAD --exit-code --color From edac2f76f5821b3580f8da979d54b67566a5a493 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 2 Nov 2022 18:32:59 +0200 Subject: [PATCH 091/164] feat: add node --- .github/workflows/format.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index a7a720e..bab587f 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -9,6 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: actions/setup-node@v2 + with: + node-version: "18" - uses: actions/setup-go@v3 with: go-version: 1.19 From d6fc88a4e26a439ccd933efd663b14e437ff5952 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 2 Nov 2022 18:42:51 +0200 Subject: [PATCH 092/164] feat: update node --- .github/workflows/format.yml | 2 +- .github/workflows/licenses.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index bab587f..b1182a5 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "18.10" - uses: actions/setup-go@v3 with: go-version: 1.19 diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index a4592c6..9ef147d 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -17,5 +17,5 @@ jobs: go-version: "1.18" - uses: actions/setup-node@v2 with: - node-version: "18" + node-version: "18.10" - run: make licenses From 6be34ae4210a18c95e583fd0804178e05f6b4509 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 3 Nov 2022 10:33:21 -0400 Subject: [PATCH 093/164] docs: standardize license headers (#195) --- Makefile | 8 +++++++- scripts/sync.sh | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6cb8397..c22fafa 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ -format: .bin/shfmt node_modules # formats the source code +format: .bin/ory .bin/shfmt node_modules # formats the source code echo formatting ... + .bin/ory dev headers license .bin/shfmt --write . npm exec -- prettier --write . @@ -18,6 +19,11 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters echo Verifying formatting ... .bin/shfmt --list . +.bin/ory: Makefile + echo installing Ory CLI ... + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.47 + touch .bin/ory + .bin/shellcheck: Makefile echo installing Shellcheck ... curl -sSL https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz | tar xJ diff --git a/scripts/sync.sh b/scripts/sync.sh index efc8012..d217151 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -253,7 +253,7 @@ function install_dependencies_on_ci { header "INSTALLING DEPENDENCIES" sudo apt-get update -y sudo apt-get install -y moreutils gettext-base - curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.45 + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.47 } # pushes the committed changes from the local Git client to GitHub From 816e68c7a7eb326bfe5cbe1f24523da073fe0df0 Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Thu, 3 Nov 2022 11:09:52 -0400 Subject: [PATCH 094/164] fix: do not commit package-lock.json (#203) --- scripts/sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index d217151..9361670 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -173,6 +173,7 @@ function commit_changes { ( cd "$repo_path" git add -A + git restore --staged package-lock.json || true git commit -a -m "chore: update repository templates to https://github.com/ory/meta/commit/$GITHUB_SHA" || true ) } From 47569d9893f0bae29676417807de790338fec9be Mon Sep 17 00:00:00 2001 From: Kevin Goslar Date: Mon, 7 Nov 2022 19:45:24 -0600 Subject: [PATCH 095/164] chore: update Ory CLI with breaking changes to the format task (#204) --- Makefile | 4 ++-- scripts/sync.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index c22fafa..08f38d5 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ format: .bin/ory .bin/shfmt node_modules # formats the source code echo formatting ... - .bin/ory dev headers license + .bin/ory dev headers copyright --type=open-source .bin/shfmt --write . npm exec -- prettier --write . @@ -21,7 +21,7 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters .bin/ory: Makefile echo installing Ory CLI ... - curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.47 + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.48 touch .bin/ory .bin/shellcheck: Makefile diff --git a/scripts/sync.sh b/scripts/sync.sh index 9361670..5c5515c 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -254,7 +254,7 @@ function install_dependencies_on_ci { header "INSTALLING DEPENDENCIES" sudo apt-get update -y sudo apt-get install -y moreutils gettext-base - curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.47 + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.48 } # pushes the committed changes from the local Git client to GitHub From a1264fa887f73bb5ac92ceabe5b9b568d17d850d Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 23 Dec 2022 09:16:11 +0100 Subject: [PATCH 096/164] docs: add new adopters (#205) --- static/adopters/dark/amplitude.svg | 13 ++++++++++ static/adopters/dark/stackspin.svg | 32 +++++++++++++++++++++++++ static/adopters/light/amplitude.svg | 13 ++++++++++ static/adopters/light/stackspin.svg | 32 +++++++++++++++++++++++++ templates/repository/common/ADOPTERS.md | 24 +++++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 static/adopters/dark/amplitude.svg create mode 100644 static/adopters/dark/stackspin.svg create mode 100644 static/adopters/light/amplitude.svg create mode 100644 static/adopters/light/stackspin.svg diff --git a/static/adopters/dark/amplitude.svg b/static/adopters/dark/amplitude.svg new file mode 100644 index 0000000..9ffbe81 --- /dev/null +++ b/static/adopters/dark/amplitude.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/adopters/dark/stackspin.svg b/static/adopters/dark/stackspin.svg new file mode 100644 index 0000000..0f9d777 --- /dev/null +++ b/static/adopters/dark/stackspin.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/amplitude.svg b/static/adopters/light/amplitude.svg new file mode 100644 index 0000000..07d912a --- /dev/null +++ b/static/adopters/light/amplitude.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/adopters/light/stackspin.svg b/static/adopters/light/stackspin.svg new file mode 100644 index 0000000..2ca6bd8 --- /dev/null +++ b/static/adopters/light/stackspin.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 238c7ae..6ef7ae4 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -368,6 +368,30 @@ that your company deserves a spot here, reach out to dyrector.io + + + Adopter * + Stackspin + + + + stackspin.net + + + stackspin.net + + + + Adopter * + Amplitude + + + + amplitude.com + + + amplitude.com + From a79e31748ca041b95e82608b59024bc3b0eeced5 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Thu, 29 Dec 2022 11:07:07 +0200 Subject: [PATCH 097/164] fix: remove web from sync --- scripts/sync.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 5c5515c..9b2748a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -34,7 +34,6 @@ function replicate_all { replicate ory/themes library "Themes" "$workspace" "$persist" replicate ory/k8s library "Kubernetes Resources" "$workspace" "$persist" replicate ory/x library "X" "$workspace" "$persist" - replicate ory/web library "Web" "$workspace" "$persist" replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$persist" replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$persist" replicate ory/milestone-action action "Milestone Action" "$workspace" "$persist" From 504b9393d954ccf836fee2f111bf82721f728671 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Sun, 1 Jan 2023 11:52:20 +0200 Subject: [PATCH 098/164] fix: do not run npm install on repositories for formatting --- scripts/sync.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 9b2748a..5fdc88a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -242,10 +242,7 @@ function format { local -r repo_path=$1 ( cd "$repo_path" - if [ -f 'package.json' ] && [ -f 'package-lock.json' ]; then - npm i --legacy-peer-deps - npm exec -- prettier --write "*.md" .github - fi + npx prettier --write "*.md" .github ) } From fbd0d3009f5cc03c95585717a8b7a6eb70a454c5 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Sun, 1 Jan 2023 11:52:28 +0200 Subject: [PATCH 099/164] fix: spellcheck issues --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 26a4fba..d3b12cf 100755 --- a/install.sh +++ b/install.sh @@ -181,6 +181,7 @@ echoerr() { echo "$@" 1>&2 } log_prefix() { + # shellcheck disable=SC2317 echo "$0" } _logp=6 @@ -244,7 +245,7 @@ uname_arch() { armv6*) arch="armv6" ;; armv7*) arch="armv7" ;; esac - echo ${arch} + echo "${arch}" } uname_os_check() { os=$(uname_os) From f1ac396ab6636c9240d72cedff4d31e196a60ca9 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 30 Jan 2023 11:09:18 +0100 Subject: [PATCH 100/164] docs: pinniped adopter (#207) --- static/adopters/dark/pinniped.svg | 19 +++++++++++++++++++ static/adopters/light/pinniped.svg | 19 +++++++++++++++++++ templates/repository/common/ADOPTERS.md | 11 +++++++++++ 3 files changed, 49 insertions(+) create mode 100644 static/adopters/dark/pinniped.svg create mode 100644 static/adopters/light/pinniped.svg diff --git a/static/adopters/dark/pinniped.svg b/static/adopters/dark/pinniped.svg new file mode 100644 index 0000000..f0d2aa4 --- /dev/null +++ b/static/adopters/dark/pinniped.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/pinniped.svg b/static/adopters/light/pinniped.svg new file mode 100644 index 0000000..118da02 --- /dev/null +++ b/static/adopters/light/pinniped.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 6ef7ae4..c891b81 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -392,6 +392,17 @@ that your company deserves a spot here, reach out to amplitude.com + + Adopter * + Pinniped + + + + pinniped.dev + + + pinniped.dev + From 3421e61a94751ec09357b9468487c28e0078942b Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 17 Apr 2023 13:55:41 +0200 Subject: [PATCH 101/164] docs: add pvotal adopter (#211) --- static/adopters/dark/pvotal.svg | 5 +++++ static/adopters/light/pvotal.svg | 5 +++++ templates/repository/common/ADOPTERS.md | 11 +++++++++++ 3 files changed, 21 insertions(+) create mode 100644 static/adopters/dark/pvotal.svg create mode 100644 static/adopters/light/pvotal.svg diff --git a/static/adopters/dark/pvotal.svg b/static/adopters/dark/pvotal.svg new file mode 100644 index 0000000..62403d6 --- /dev/null +++ b/static/adopters/dark/pvotal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/adopters/light/pvotal.svg b/static/adopters/light/pvotal.svg new file mode 100644 index 0000000..55ff5ee --- /dev/null +++ b/static/adopters/light/pvotal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index c891b81..f96cc35 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -402,6 +402,17 @@ that your company deserves a spot here, reach out to pinniped.dev + + + Adopter * + Pvotal + + + + pvotal.tech + + + pvotal.tech From a8672f3b0e9976f3305c567e8193df77f9f4b538 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 26 Jun 2023 09:48:53 +0200 Subject: [PATCH 102/164] fix: revamp adopters.md (#212) * fix: revamp adopters.md * fix: format prettier --- package-lock.json | 13 ------ package.json | 2 - .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 21 ++++------ .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 21 ++++------ .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 27 ++++-------- .../common/.github/ISSUE_TEMPLATE/config.yml | 6 +-- templates/repository/common/ADOPTERS.md | 42 +++++++------------ 7 files changed, 39 insertions(+), 93 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0a871d..f8671a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "version": "1.0.0", "devDependencies": { "license-checker": "^25.0.1", - "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" @@ -1215,12 +1214,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ory-prettier-styles": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", - "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", - "dev": true - }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -2847,12 +2840,6 @@ "mimic-fn": "^2.1.0" } }, - "ory-prettier-styles": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", - "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", - "dev": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", diff --git a/package.json b/package.json index f9408c2..4a0af03 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,8 @@ "scripts": { "text-run": "text-run" }, - "prettier": "ory-prettier-styles", "devDependencies": { "license-checker": "^25.0.1", - "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index cf7be43..9cff39d 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -9,24 +9,18 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - "This issue affects my [Ory Network](https://www.ory.sh/) project." - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes @@ -53,8 +47,7 @@ body: validations: required: true - attributes: - description: - "Please copy and paste any relevant log output. This will be + description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please redact any sensitive information" label: "Relevant log output" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 70bccd0..be02346 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,5 +1,4 @@ -description: - "A design document is needed for non-trivial changes to the code base." +description: "A design document is needed for non-trivial changes to the code base." labels: - rfc name: "Design Document" @@ -20,24 +19,18 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - "This issue affects my [Ory Network](https://www.ory.sh/) project." - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index cf68171..e0daf73 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,5 +1,4 @@ -description: - "Suggest an idea for this project without a plan for implementation" +description: "Suggest an idea for this project without a plan for implementation" labels: - feat name: "Feature Request" @@ -13,30 +12,23 @@ body: - attributes: label: "Preflight checklist" options: - - label: - "I could not find a solution in the existing issues, docs, nor + - label: "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - "This issue affects my [Ory Network](https://www.ory.sh/) project." - - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: - "I am signed up to the [Ory Security Patch + - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes - attributes: - description: - "Is your feature request related to a problem? Please describe." + description: "Is your feature request related to a problem? Please describe." label: "Describe your problem" placeholder: "A clear and concise description of what the problem is. Ex. I'm always @@ -70,8 +62,7 @@ body: validations: required: true - attributes: - description: - "Add any other context or screenshots about the feature request here." + description: "Add any other context or screenshots about the feature request here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 02d86b3..49a589a 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -2,10 +2,8 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum url: $DISCUSSIONS - about: - Please ask and answer questions here, show your implementations and + about: Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: - Hang out with other Ory community members to ask and answer questions. + about: Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index f96cc35..ad71950 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -1,20 +1,15 @@ The Ory community stands on the shoulders of individuals, companies, and -maintainers. We thank everyone involved - from submitting bug reports and -feature requests, to contributing patches, to sponsoring our work. Our community -is 1000+ strong and growing rapidly. The Ory stack protects 16.000.000.000+ API -requests every month with over 250.000+ active service nodes. We would have -never been able to achieve this without each and everyone of you! +maintainers. The Ory team thanks everyone involved - from submitting bug reports and +feature requests, to contributing patches and documentation. The Ory community +counts more than 33.000 members and is growing rapidly. The Ory stack protects 60.000.000.000+ API +requests every month with over 400.000+ active service nodes. None of this would have been possible without each and everyone of you! The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our ecosystem. _If you think that your company deserves a spot here, reach out to -office-muc@ory.sh now_! - -**Please consider giving back by becoming a sponsor of our open source work on -Patreon or -Open Collective.** +office@ory.sh now_! @@ -27,7 +22,7 @@ that your company deserves a spot here, reach out to - + - + - + - + - + - + - + - +
SponsorAdopter * Raspberry PI Foundation @@ -38,7 +33,7 @@ that your company deserves a spot here, reach out to raspberrypi.org
ContributorAdopter * Kyma Project @@ -49,7 +44,7 @@ that your company deserves a spot here, reach out to kyma-project.io
SponsorAdopter * Tulip @@ -60,7 +55,7 @@ that your company deserves a spot here, reach out to tulip.com
SponsorAdopter * Cashdeck / All My Funds @@ -71,7 +66,7 @@ that your company deserves a spot here, reach out to cashdeck.com.au
ContributorAdopter * Hootsuite @@ -214,7 +209,7 @@ that your company deserves a spot here, reach out to nortal.com
SponsorAdopter * OrderMyGear @@ -225,7 +220,7 @@ that your company deserves a spot here, reach out to ordermygear.com
SponsorAdopter * Spiri.bo @@ -236,7 +231,7 @@ that your company deserves a spot here, reach out to spiri.bo
SponsorAdopter * Strivacity @@ -417,19 +412,10 @@ that your company deserves a spot here, reach out to
-We also want to thank all individual contributors +Many thanks to all individual contributors -as well as all of our backers - - - -and past & current supporters (in alphabetical order) on -[Patreon](https://www.patreon.com/_ory): Alexander Alimovs, Billy, Chancy -Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, -TheCrealm. - \* Uses one of Ory's major projects in production. From 46ec362afb5f85eba89e9286ce11fefb56365abc Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 31 Jul 2023 16:25:46 +0200 Subject: [PATCH 103/164] fix: update coc (#213) --- templates/repository/common/CODE_OF_CONDUCT.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index da4b276..10ffce8 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -36,6 +36,11 @@ Examples of unacceptable behavior include: - Other conduct which could reasonably be considered inappropriate in a professional setting +## Open Source Community Support + +Ory Open source software is collaborative and based on contributions by developers in the Ory community. There is no obligation from Ory to help with individual problems. +If Ory open source software is used in production in a for-profit company or enterprise environment, we mandate a paid support contract where Ory is obligated under their service level agreements (SLAs) to offer a defined level of availability and responsibility. For more information about paid support please contact us at sales@ory.sh. + ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of From af28aff50b62a9eeb69de4842e0e164f82c9e066 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:34:40 +0200 Subject: [PATCH 104/164] fix: run npm ci to install dependencies --- scripts/sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 5fdc88a..be208bc 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -242,6 +242,7 @@ function format { local -r repo_path=$1 ( cd "$repo_path" + npm ci --legacy-peer-deps npx prettier --write "*.md" .github ) } From 0ba3d6ef71867912fe97f105120deee85f5c0e1b Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:47:55 +0200 Subject: [PATCH 105/164] fix: remove prettier-styles --- scripts/sync.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index be208bc..6c10610 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -37,7 +37,6 @@ function replicate_all { replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$persist" replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$persist" replicate ory/milestone-action action "Milestone Action" "$workspace" "$persist" - replicate ory/prettier-styles action "Prettier Styles" "$workspace" "$persist" replicate ory/build-buf-action action "Buildbuf Action" "$workspace" "$persist" replicate ory/examples library "Examples" "$workspace" "$persist" replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$persist" From 12c655cc280db6d8b9bd1d29fc8fd55e0ee03239 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 3 Aug 2023 17:49:43 +0200 Subject: [PATCH 106/164] fix: update more repositories --- scripts/sync.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 6c10610..7266c16 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -42,7 +42,8 @@ function replicate_all { replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$persist" replicate ory/oathkeeper-maester library "Ory Oathkeeper Maester" "$workspace" "$persist" replicate ory/sdk library "Ory SDK" "$workspace" "$persist" - replicate ory/platform library "Ory Platform" "$workspace" "$persist" + replicate ory/network library "Ory Network" "$workspace" "$persist" + replicate ory/elements library "Ory Elements" "$workspace" "$persist" replicate ory/keto-client-dotnet library "Ory Keto Dotnet Client" "$workspace" "$persist" replicate ory/keto-client-java library "Ory Keto Java Client" "$workspace" "$persist" replicate ory/keto-client-rust library "Ory Keto Rust Client" "$workspace" "$persist" From 2c1b6f16b29bcc9dc967e1ae5eab63cb38ee0697 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:00:06 +0200 Subject: [PATCH 107/164] fix: remove more archived repos --- scripts/sync.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 7266c16..7c26d2e 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -31,7 +31,6 @@ function replicate_all { replicate ory/dockertest library "Dockertest" "$workspace" "$persist" replicate ory/herodot library "Herodot" "$workspace" "$persist" replicate ory/graceful library "Graceful" "$workspace" "$persist" - replicate ory/themes library "Themes" "$workspace" "$persist" replicate ory/k8s library "Kubernetes Resources" "$workspace" "$persist" replicate ory/x library "X" "$workspace" "$persist" replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$persist" From 697d3d36903517c5745b01794aa057bcaa96a4c9 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:14:56 +0200 Subject: [PATCH 108/164] fix: test for package-lock not package --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 7c26d2e..b063314 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -127,7 +127,7 @@ function replicate { fi add_adopters_to_readme "$repo_path" add_ecosystem_to_readme "$repo_path" - if test -f package.json; then + if test -f package-lock.json; then format "$repo_path" fi From ac80097fa427e7ae39820c59cac62dc6e11b9aff Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 7 Aug 2023 16:25:22 +0200 Subject: [PATCH 109/164] fix: ory network slug in issue template (#216) --- .../common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 7 ++++++- .../common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 7 ++++++- .../common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 9cff39d..4002d1d 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -18,12 +18,17 @@ body: - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes + - attributes: + description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" + id: ory-network-project + type: input - attributes: description: "A clear and concise description of what the bug is." label: "Describe the bug" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index be02346..078e401 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -28,12 +28,17 @@ body: - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes + - attributes: + description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" + id: ory-network-project + type: input - attributes: description: | This section gives the reader a very rough overview of the landscape in which the new system is being built and what is actually being built. This isn’t a requirements doc. Keep it succinct! The goal is that readers are brought up to speed but some previous knowledge can be assumed and detailed info can be linked to. This section should be entirely focused on objective background facts. diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index e0daf73..cc8586b 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -21,12 +21,17 @@ body: - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "This issue affects my [Ory Network](https://www.ory.sh/) project." - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." id: checklist type: checkboxes + - attributes: + description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" + id: ory-network-project + type: input - attributes: description: "Is your feature request related to a problem? Please describe." label: "Describe your problem" From c78ed2330ca2a3fa1722a9552761d633468bb3b8 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:41:40 +0200 Subject: [PATCH 110/164] fix: detection f package-lock --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index b063314..578c886 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -127,7 +127,7 @@ function replicate { fi add_adopters_to_readme "$repo_path" add_ecosystem_to_readme "$repo_path" - if test -f package-lock.json; then + if test -f "$repo_path/package-lock.json"; then format "$repo_path" fi From 357a400f420d44d39c90ede19ca7c4a4bc4af551 Mon Sep 17 00:00:00 2001 From: Alano Terblanche <18033717+Benehiko@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:29:09 +0200 Subject: [PATCH 111/164] feat: elements banner (#217) --- static/banners/elements.png | Bin 0 -> 40480 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/banners/elements.png diff --git a/static/banners/elements.png b/static/banners/elements.png new file mode 100644 index 0000000000000000000000000000000000000000..0229babc9d778cf81d5e2e8c58bd365a608d1437 GIT binary patch literal 40480 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 Date: Wed, 22 May 2024 00:30:00 -0700 Subject: [PATCH 112/164] docs: update broken links in CONTRIBUTING.md (#219) --- templates/repository/common/CONTRIBUTING.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index b33e33c..892c9a0 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -143,10 +143,10 @@ checklist to contribute an example: not get mixed up. 1. Add a descriptive prefix to commits. This ensures a uniform commit history and helps structure the changelog. Please refer to this - [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) - for an overview. + [Convential Commits configuration](https://github.com/$REPOSITORY/blob/master/.github/workflows/conventional_commits.yml) + for the list of accepted prefixes. You can read more about the Conventional Commit specification [at their site](https://www.conventionalcommits.org/en/v1.0.0/). 1. Create a `README.md` that explains how to use the example. (Use - [the README template](https://github.com/ory/examples/blob/master/_common/README)). + [the README template](https://github.com/ory/examples/blob/master/_common/README.md)). 1. Open a pull request and maintainers will review and merge your example. ## Contribute code @@ -171,8 +171,8 @@ request, go through this checklist: 1. Run `make format` 1. Add a descriptive prefix to commits. This ensures a uniform commit history and helps structure the changelog. Please refer to this - [list of prefixes for $PROJECT](https://github.com/$REPOSITORY/blob/master/.github/semantic.yml) - for an overview. + [Convential Commits configuration](https://github.com/$REPOSITORY/blob/master/.github/workflows/conventional_commits.yml) + for the list of accepted prefixes. You can read more about the Conventional Commit specification [at their site](https://www.conventionalcommits.org/en/v1.0.0/). If a pull request is not ready to be reviewed yet [it should be marked as a "Draft"](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). From 0861d05fbd23899ce9f989a58339ca88d6922a73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:09:44 +0200 Subject: [PATCH 113/164] chore(deps-dev): bump braces from 3.0.2 to 3.0.3 (#220) Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index f8671a8..5daabf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -308,12 +308,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -630,9 +630,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -2124,12 +2124,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "cacheable-lookup": { @@ -2377,9 +2377,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" From 95e82c6db80b6928cfb4a27f165e1ed70d52dee4 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Thu, 22 Aug 2024 09:21:40 +0200 Subject: [PATCH 114/164] chore: update security policy (#222) --- Makefile | 14 ++++- SECURITY.md | 52 ++++++++++++------- .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 4 +- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 4 +- .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 4 +- templates/repository/common/ADOPTERS.md | 10 ++-- .../repository/common/CODE_OF_CONDUCT.md | 9 +++- templates/repository/common/CONTRIBUTING.md | 8 ++- 8 files changed, 74 insertions(+), 31 deletions(-) diff --git a/Makefile b/Makefile index 08f38d5..0626931 100644 --- a/Makefile +++ b/Makefile @@ -33,10 +33,20 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters touch .bin/shellcheck # update the timestamp so that Make doesn't re-install the file over and over again .bin/shfmt: Makefile - echo installing Shellfmt ... + echo "Installing Shellfmt ..." mkdir -p .bin - curl -sSL https://github.com/mvdan/sh/releases/download/v3.5.1/shfmt_v3.5.1_linux_amd64 -o .bin/shfmt + if [ "$$(uname -s)" = "Darwin" ] && [ "$$(uname -m)" = "arm64" ]; then \ + echo " - detected macOS ARM64"; \ + curl -sSL https://github.com/mvdan/sh/releases/download/v3.9.0/shfmt_v3.9.0_darwin_arm64 -o .bin/shfmt; \ + elif [ "$$(uname -s)" = "Linux" ] && [ "$$(uname -m)" = "x86_64" ]; then \ + echo " - detected Linux AMD64"; \ + curl -sSL https://github.com/mvdan/sh/releases/download/v3.9.0/shfmt_v3.9.0_linux_amd64 -o .bin/shfmt; \ + else \ + echo " - unsupported architecture: $$(uname -s) $$(uname -m)"; \ + exit 1; \ + fi chmod +x .bin/shfmt + touch .bin/shfmt node_modules: package.json package-lock.json echo installing Node dependencies ... diff --git a/SECURITY.md b/SECURITY.md index 4268bcf..c4bf7fa 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,27 +1,43 @@ - - +# Ory Security Policy -- [Security Policy](#security-policy) - - [Supported Versions](#supported-versions) - - [Reporting a Vulnerability](#reporting-a-vulnerability) +## Overview - +This security policy outlines the security support commitments for different +types of Ory users. -# Security Policy +## Apache 2.0 License Users -## Supported Versions +- **Security SLA:** No security Service Level Agreement (SLA) is provided. +- **Release Schedule:** Releases are planned every 3 to 6 months. These releases will contain all security fixes implemented up to that point. +- **Version Support:** Security patches are only provided for the current release version. -We release patches for security vulnerabilities. Which versions are eligible -receiving such patches depend on the CVSS v3.0 Rating: +## Ory Enterprise License Customers -| CVSS v3.0 | Supported Versions | -| --------- | ----------------------------------------- | -| 9.0-10.0 | Releases within the previous three months | -| 4.0-8.9 | Most recent release | +- **Security SLA:** The following timelines apply for security vulnerabilities based on their severity: + - Critical: Resolved within 14 days. + - High: Resolved within 30 days. + - Medium: Resolved within 90 days. + - Low: Resolved within 180 days. + - Informational: Addressed as needed. +- **Release Schedule:** Updates are provided as soon as vulnerabilities are resolved, adhering to the above SLA. +- **Version Support:** Depending on the Ory Enterprise License agreement multiple versions can be supported. + +## Ory Network Users + +- **Security SLA:** The following timelines apply for security vulnerabilities based on their severity: + - Critical: Resolved within 14 days. + - High: Resolved within 30 days. + - Medium: Resolved within 90 days. + - Low: Resolved within 180 days. + - Informational: Addressed as needed. +- **Release Schedule:** Updates are automatically deployed to Ory Network as soon as vulnerabilities are resolved, adhering to the above SLA. +- **Version Support:** Ory Network always runs the most current version. + +[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security SLAs and process. ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to -**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from -us within 48 hours. If the issue is confirmed, we will release a patch as soon -as possible depending on complexity but historically within a few days. +If you suspect a security vulnerability, please report it to +**[security@ory.sh](mailto:security@ory.sh)**. We will respond within 48 hours. +If confirmed, we will work to release a patch as soon as possible, typically +within a few days depending on the issue's complexity. diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 4002d1d..2ba8f4d 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -24,7 +24,9 @@ body: id: checklist type: checkboxes - attributes: - description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + description: + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." label: "Ory Network Project" placeholder: "https://.projects.oryapis.com" id: ory-network-project diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 078e401..96793c6 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -34,7 +34,9 @@ body: id: checklist type: checkboxes - attributes: - description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + description: + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." label: "Ory Network Project" placeholder: "https://.projects.oryapis.com" id: ory-network-project diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index cc8586b..a09d6d3 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -27,7 +27,9 @@ body: id: checklist type: checkboxes - attributes: - description: "Enter the slug or API URL of the affected Ory Network project. Leave empty when you are self-hosting." + description: + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." label: "Ory Network Project" placeholder: "https://.projects.oryapis.com" id: ory-network-project diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index ad71950..ff598b8 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -1,10 +1,12 @@ The Ory community stands on the shoulders of individuals, companies, and -maintainers. The Ory team thanks everyone involved - from submitting bug reports and -feature requests, to contributing patches and documentation. The Ory community -counts more than 33.000 members and is growing rapidly. The Ory stack protects 60.000.000.000+ API -requests every month with over 400.000+ active service nodes. None of this would have been possible without each and everyone of you! +maintainers. The Ory team thanks everyone involved - from submitting bug reports +and feature requests, to contributing patches and documentation. The Ory +community counts more than 33.000 members and is growing rapidly. The Ory stack +protects 60.000.000.000+ API requests every month with over 400.000+ active +service nodes. None of this would have been possible without each and everyone +of you! The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our ecosystem. _If you think diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index 10ffce8..e4c1ea5 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -38,8 +38,13 @@ Examples of unacceptable behavior include: ## Open Source Community Support -Ory Open source software is collaborative and based on contributions by developers in the Ory community. There is no obligation from Ory to help with individual problems. -If Ory open source software is used in production in a for-profit company or enterprise environment, we mandate a paid support contract where Ory is obligated under their service level agreements (SLAs) to offer a defined level of availability and responsibility. For more information about paid support please contact us at sales@ory.sh. +Ory Open source software is collaborative and based on contributions by +developers in the Ory community. There is no obligation from Ory to help with +individual problems. If Ory open source software is used in production in a +for-profit company or enterprise environment, we mandate a paid support contract +where Ory is obligated under their service level agreements (SLAs) to offer a +defined level of availability and responsibility. For more information about +paid support please contact us at sales@ory.sh. ## Enforcement Responsibilities diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 892c9a0..5079abd 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -144,7 +144,9 @@ checklist to contribute an example: 1. Add a descriptive prefix to commits. This ensures a uniform commit history and helps structure the changelog. Please refer to this [Convential Commits configuration](https://github.com/$REPOSITORY/blob/master/.github/workflows/conventional_commits.yml) - for the list of accepted prefixes. You can read more about the Conventional Commit specification [at their site](https://www.conventionalcommits.org/en/v1.0.0/). + for the list of accepted prefixes. You can read more about the Conventional + Commit specification + [at their site](https://www.conventionalcommits.org/en/v1.0.0/). 1. Create a `README.md` that explains how to use the example. (Use [the README template](https://github.com/ory/examples/blob/master/_common/README.md)). 1. Open a pull request and maintainers will review and merge your example. @@ -172,7 +174,9 @@ request, go through this checklist: 1. Add a descriptive prefix to commits. This ensures a uniform commit history and helps structure the changelog. Please refer to this [Convential Commits configuration](https://github.com/$REPOSITORY/blob/master/.github/workflows/conventional_commits.yml) - for the list of accepted prefixes. You can read more about the Conventional Commit specification [at their site](https://www.conventionalcommits.org/en/v1.0.0/). + for the list of accepted prefixes. You can read more about the Conventional + Commit specification + [at their site](https://www.conventionalcommits.org/en/v1.0.0/). If a pull request is not ready to be reviewed yet [it should be marked as a "Draft"](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request). From 297c8a5a3563dacb5fb28b60436623ee5608726e Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 22 Aug 2024 14:56:37 +0200 Subject: [PATCH 115/164] chore: update newsletter link (#223) --- CONTRIBUTING.md | 2 +- .../repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 2 +- .../repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 2 +- .../common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 2 +- templates/repository/common/CONTRIBUTING.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6ccb115..6892146 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,7 +62,7 @@ do this is via the [ORY Community](https://community.ory.sh/) or join the [a Contributors License Agreement?](https://cla-assistant.io/ory/) - I would like updates about new versions of ORY {{Project}}. - [How are new releases announced?](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53) + [How are new releases announced?](https://www.ory.sh/l/sign-up-newsletter) ## How can I contribute? diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 2ba8f4d..13cdb34 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -20,7 +20,7 @@ body: required: true - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 96793c6..e4b70b2 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -30,7 +30,7 @@ body: required: true - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index a09d6d3..321e3e7 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -23,7 +23,7 @@ body: required: true - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53)." + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 5079abd..010685e 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -64,7 +64,7 @@ or the [Ory Chat](https://www.ory.sh/chat). [a Contributors License Agreement?](https://cla-assistant.io/$REPOSITORY) - I would like updates about new versions of Ory $PROJECT. - [How are new releases announced?](https://ory.us10.list-manage.com/subscribe?u=ffb1a878e4ec6c0ed312a3480&id=f605a41b53) + [How are new releases announced?](https://www.ory.sh/l/sign-up-newsletter) ## How can I contribute? From 43af51860c83cb75cb3e9c42dfc3154db3bff8e4 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:11:09 +0200 Subject: [PATCH 116/164] chore: trigger ci From 388dbc3164cb824d4f06b56d00c690306a5abb5b Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:31:25 +0200 Subject: [PATCH 117/164] docs: update security policy template --- templates/repository/common/SECURITY.md | 63 +++++++++++++++++++------ 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 7aa8d22..db2fd15 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -7,21 +7,54 @@ -# Security Policy - -## Supported Versions - -We release patches for security vulnerabilities. Which versions are eligible for -receiving such patches depends on the CVSS v3.0 Rating: - -| CVSS v3.0 | Supported Versions | -| --------- | ----------------------------------------- | -| 9.0-10.0 | Releases within the previous three months | -| 4.0-8.9 | Most recent release | +# Ory Security Policy + +## Overview + +This security policy outlines the security support commitments for different +types of Ory users. + +## Apache 2.0 License Users + +- **Security SLA:** No security Service Level Agreement (SLA) is provided. +- **Release Schedule:** Releases are planned every 3 to 6 months. These releases + will contain all security fixes implemented up to that point. +- **Version Support:** Security patches are only provided for the current + release version. + +## Ory Enterprise License Customers + +- **Security SLA:** The following timelines apply for security vulnerabilities + based on their severity: + - Critical: Resolved within 14 days. + - High: Resolved within 30 days. + - Medium: Resolved within 90 days. + - Low: Resolved within 180 days. + - Informational: Addressed as needed. +- **Release Schedule:** Updates are provided as soon as vulnerabilities are + resolved, adhering to the above SLA. +- **Version Support:** Depending on the Ory Enterprise License agreement + multiple versions can be supported. + +## Ory Network Users + +- **Security SLA:** The following timelines apply for security vulnerabilities + based on their severity: + - Critical: Resolved within 14 days. + - High: Resolved within 30 days. + - Medium: Resolved within 90 days. + - Low: Resolved within 180 days. + - Informational: Addressed as needed. +- **Release Schedule:** Updates are automatically deployed to Ory Network as + soon as vulnerabilities are resolved, adhering to the above SLA. +- **Version Support:** Ory Network always runs the most current version. + +[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security +SLAs and process. ## Reporting a Vulnerability -Please report (suspected) security vulnerabilities to -**[security@ory.sh](mailto:security@ory.sh)**. You will receive a response from -us within 48 hours. If the issue is confirmed, we will release a patch as soon -as possible depending on complexity but historically within a few days. +If you suspect a security vulnerability, please report it to +**[security@ory.sh](mailto:security@ory.sh)**. We will respond within 48 hours. +If confirmed, we will work to release a patch as soon as possible, typically +within a few days depending on the issue's complexity. From 939b80fbfd795b1e137654c60deac78b752e7196 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:31:39 +0200 Subject: [PATCH 118/164] chore: format everything --- .github/workflows/format.yml | 2 +- .github/workflows/licenses.yml | 4 +- .github/workflows/stale.yml | 10 +-- .github/workflows/sync.yml | 8 +-- .github/workflows/text-run.yml | 2 +- SECURITY.md | 24 ++++--- .../.github/workflows/release_tagger.yml | 2 +- .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 66 ++++++++++--------- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 48 ++++++++------ .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 48 ++++++++------ .../common/.github/ISSUE_TEMPLATE/config.yml | 6 +- .../repository/common/.github/config.yml | 2 +- .../.github/workflows/closed_references.yml | 6 +- .../common/.github/workflows/stale.yml | 10 +-- 14 files changed, 134 insertions(+), 104 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index b1182a5..c18d880 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v2 with: - node-version: "18.10" + node-version: '18.10' - uses: actions/setup-go@v3 with: go-version: 1.19 diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 9ef147d..7dcf1b2 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -14,8 +14,8 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: "1.18" + go-version: '1.18' - uses: actions/setup-node@v2 with: - node-version: "18.10" + node-version: '18.10' - run: make licenses diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 702e037..f8657ac 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: "Close Stale Issues" +name: 'Close Stale Issues' on: workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: stale: @@ -17,8 +17,8 @@ jobs: stale-pr-message: | Thank you for opening this pull request. It appears that a request for e.g. information has not yet been completed. Therefore this issue will be automatically closed in 7 days, assuming that the proposed change is no longer required or has otherwise been resolved. - stale-issue-label: "stale" - stale-pr-label: "stale" - only-labels: "needs more info" + stale-issue-label: 'stale' + stale-pr-label: 'stale' + only-labels: 'needs more info' days-before-stale: 7 days-before-close: 7 diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index a8393cf..084d70a 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -6,10 +6,10 @@ on: # action is triggered on push to the following paths push: paths: - - "templates/**" - - "scripts/sync*" - - "package.json" - - ".github/workflows/sync.yml" + - 'templates/**' + - 'scripts/sync*' + - 'package.json' + - '.github/workflows/sync.yml' branches: - master diff --git a/.github/workflows/text-run.yml b/.github/workflows/text-run.yml index 26fe38b..858217d 100644 --- a/.github/workflows/text-run.yml +++ b/.github/workflows/text-run.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: "15" + node-version: '15' - run: npm ci - run: npm run text-run diff --git a/SECURITY.md b/SECURITY.md index c4bf7fa..1754d9f 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,32 +8,40 @@ types of Ory users. ## Apache 2.0 License Users - **Security SLA:** No security Service Level Agreement (SLA) is provided. -- **Release Schedule:** Releases are planned every 3 to 6 months. These releases will contain all security fixes implemented up to that point. -- **Version Support:** Security patches are only provided for the current release version. +- **Release Schedule:** Releases are planned every 3 to 6 months. These releases + will contain all security fixes implemented up to that point. +- **Version Support:** Security patches are only provided for the current + release version. ## Ory Enterprise License Customers -- **Security SLA:** The following timelines apply for security vulnerabilities based on their severity: +- **Security SLA:** The following timelines apply for security vulnerabilities + based on their severity: - Critical: Resolved within 14 days. - High: Resolved within 30 days. - Medium: Resolved within 90 days. - Low: Resolved within 180 days. - Informational: Addressed as needed. -- **Release Schedule:** Updates are provided as soon as vulnerabilities are resolved, adhering to the above SLA. -- **Version Support:** Depending on the Ory Enterprise License agreement multiple versions can be supported. +- **Release Schedule:** Updates are provided as soon as vulnerabilities are + resolved, adhering to the above SLA. +- **Version Support:** Depending on the Ory Enterprise License agreement + multiple versions can be supported. ## Ory Network Users -- **Security SLA:** The following timelines apply for security vulnerabilities based on their severity: +- **Security SLA:** The following timelines apply for security vulnerabilities + based on their severity: - Critical: Resolved within 14 days. - High: Resolved within 30 days. - Medium: Resolved within 90 days. - Low: Resolved within 180 days. - Informational: Addressed as needed. -- **Release Schedule:** Updates are automatically deployed to Ory Network as soon as vulnerabilities are resolved, adhering to the above SLA. +- **Release Schedule:** Updates are automatically deployed to Ory Network as + soon as vulnerabilities are resolved, adhering to the above SLA. - **Version Support:** Ory Network always runs the most current version. -[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security SLAs and process. +[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security +SLAs and process. ## Reporting a Vulnerability diff --git a/templates/repository/action/.github/workflows/release_tagger.yml b/templates/repository/action/.github/workflows/release_tagger.yml index 11eb443..f37d4ad 100644 --- a/templates/repository/action/.github/workflows/release_tagger.yml +++ b/templates/repository/action/.github/workflows/release_tagger.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: Actions-R-Us/actions-tagger@latest env: - GITHUB_TOKEN: "${{ github.token }}" + GITHUB_TOKEN: '${{ github.token }}' with: publish_latest_tag: true diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 13cdb34..7e7f3b4 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -1,40 +1,45 @@ -description: "Create a bug report" +description: 'Create a bug report' labels: - bug -name: "Bug Report" +name: 'Bug Report' body: - attributes: value: "Thank you for taking the time to fill out this bug report!\n" type: markdown - attributes: - label: "Preflight checklist" + label: 'Preflight checklist' options: - - label: "I could not find a solution in the existing issues, docs, nor - discussions." + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter).' id: checklist type: checkboxes - attributes: description: - "Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting." - label: "Ory Network Project" - placeholder: "https://.projects.oryapis.com" + 'Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting.' + label: 'Ory Network Project' + placeholder: 'https://.projects.oryapis.com' id: ory-network-project type: input - attributes: - description: "A clear and concise description of what the bug is." - label: "Describe the bug" - placeholder: "Tell us what you see!" + description: 'A clear and concise description of what the bug is.' + label: 'Describe the bug' + placeholder: 'Tell us what you see!' id: describe-bug type: textarea validations: @@ -48,16 +53,17 @@ body: 1. Run `docker run ....` 2. Make API Request to with `curl ...` 3. Request fails with response: `{"some": "error"}` - label: "Reproducing the bug" + label: 'Reproducing the bug' id: reproduce-bug type: textarea validations: required: true - attributes: - description: "Please copy and paste any relevant log output. This will be + description: + 'Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information" - label: "Relevant log output" + redact any sensitive information' + label: 'Relevant log output' render: shell placeholder: | log=error .... @@ -65,10 +71,10 @@ body: type: textarea - attributes: description: - "Please copy and paste any relevant configuration. This will be + 'Please copy and paste any relevant configuration. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information!" - label: "Relevant configuration" + redact any sensitive information!' + label: 'Relevant configuration' render: yml placeholder: | server: @@ -77,14 +83,14 @@ body: id: config type: textarea - attributes: - description: "What version of our software are you running?" + description: 'What version of our software are you running?' label: Version id: version type: input validations: required: true - attributes: - label: "On which operating system are you observing this issue?" + label: 'On which operating system are you observing this issue?' options: - Ory Network - macOS @@ -95,19 +101,19 @@ body: id: operating-system type: dropdown - attributes: - label: "In which environment are you deploying?" + label: 'In which environment are you deploying?' options: - Ory Network - Docker - - "Docker Compose" - - "Kubernetes with Helm" + - 'Docker Compose' + - 'Kubernetes with Helm' - Kubernetes - Binary - Other id: deployment type: dropdown - attributes: - description: "Add any other context about the problem here." + description: 'Add any other context about the problem here.' label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index e4b70b2..635ba7e 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,7 +1,8 @@ -description: "A design document is needed for non-trivial changes to the code base." +description: + 'A design document is needed for non-trivial changes to the code base.' labels: - rfc -name: "Design Document" +name: 'Design Document' body: - attributes: value: | @@ -17,34 +18,39 @@ body: after code reviews, and your pull requests will be merged faster. type: markdown - attributes: - label: "Preflight checklist" + label: 'Preflight checklist' options: - - label: "I could not find a solution in the existing issues, docs, nor - discussions." + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter).' id: checklist type: checkboxes - attributes: description: - "Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting." - label: "Ory Network Project" - placeholder: "https://.projects.oryapis.com" + 'Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting.' + label: 'Ory Network Project' + placeholder: 'https://.projects.oryapis.com' id: ory-network-project type: input - attributes: description: | This section gives the reader a very rough overview of the landscape in which the new system is being built and what is actually being built. This isn’t a requirements doc. Keep it succinct! The goal is that readers are brought up to speed but some previous knowledge can be assumed and detailed info can be linked to. This section should be entirely focused on objective background facts. - label: "Context and scope" + label: 'Context and scope' id: scope type: textarea validations: @@ -53,7 +59,7 @@ body: - attributes: description: | A short list of bullet points of what the goals of the system are, and, sometimes more importantly, what non-goals are. Note, that non-goals aren’t negated goals like “The system shouldn’t crash”, but rather things that could reasonably be goals, but are explicitly chosen not to be goals. A good example would be “ACID compliance”; when designing a database, you’d certainly want to know whether that is a goal or non-goal. And if it is a non-goal you might still select a solution that provides it, if it doesn’t introduce trade-offs that prevent achieving the goals. - label: "Goals and non-goals" + label: 'Goals and non-goals' id: goals type: textarea validations: @@ -65,7 +71,7 @@ body: The design doc is the place to write down the trade-offs you made in designing your software. Focus on those trade-offs to produce a useful document with long-term value. That is, given the context (facts), goals and non-goals (requirements), the design doc is the place to suggest solutions and show why a particular solution best satisfies those goals. The point of writing a document over a more formal medium is to provide the flexibility to express the problem at hand in an appropriate manner. Because of this, there is no explicit guidance on how to actually describe the design. - label: "The design" + label: 'The design' id: design type: textarea validations: @@ -74,21 +80,21 @@ body: - attributes: description: | If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead, focus on the parts that are relevant to the design and its trade-offs. - label: "APIs" + label: 'APIs' id: apis type: textarea - attributes: description: | Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead, focus on the parts that are relevant to the design and its trade-offs. - label: "Data storage" + label: 'Data storage' id: persistence type: textarea - attributes: description: | Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the feasibility of the design. - label: "Code and pseudo-code" + label: 'Code and pseudo-code' id: pseudocode type: textarea @@ -101,7 +107,7 @@ body: On the other end are systems where the possible solutions are very well defined, but it isn't at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn't designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. In this situation, you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are great, and hence such a document should focus on selecting the best way given all identified trade-offs. - label: "Degree of constraint" + label: 'Degree of constraint' id: constrait type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index 321e3e7..43ce5db 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,7 +1,8 @@ -description: "Suggest an idea for this project without a plan for implementation" +description: + 'Suggest an idea for this project without a plan for implementation' labels: - feat -name: "Feature Request" +name: 'Feature Request' body: - attributes: value: | @@ -10,33 +11,39 @@ body: If you already have a plan to implement a feature or a change, please create a [design document](https://github.com/aeneasr/gh-template-test/issues/new?assignees=&labels=rfc&template=DESIGN-DOC.yml) instead if the change is non-trivial! type: markdown - attributes: - label: "Preflight checklist" + label: 'Preflight checklist' options: - - label: "I could not find a solution in the existing issues, docs, nor - discussions." + - label: + 'I could not find a solution in the existing issues, docs, nor + discussions.' required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + - label: + 'I have joined the [Ory Community Slack](https://slack.ory.sh).' + - label: + 'I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter).' id: checklist type: checkboxes - attributes: description: - "Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting." - label: "Ory Network Project" - placeholder: "https://.projects.oryapis.com" + 'Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting.' + label: 'Ory Network Project' + placeholder: 'https://.projects.oryapis.com' id: ory-network-project type: input - attributes: - description: "Is your feature request related to a problem? Please describe." - label: "Describe your problem" + description: + 'Is your feature request related to a problem? Please describe.' + label: 'Describe your problem' placeholder: "A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]" @@ -49,27 +56,28 @@ body: Describe the solution you'd like placeholder: | A clear and concise description of what you want to happen. - label: "Describe your ideal solution" + label: 'Describe your ideal solution' id: solution type: textarea validations: required: true - attributes: description: "Describe alternatives you've considered" - label: "Workarounds or alternatives" + label: 'Workarounds or alternatives' id: alternatives type: textarea validations: required: true - attributes: - description: "What version of our software are you running?" + description: 'What version of our software are you running?' label: Version id: version type: input validations: required: true - attributes: - description: "Add any other context or screenshots about the feature request here." + description: + 'Add any other context or screenshots about the feature request here.' label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 49a589a..02d86b3 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -2,8 +2,10 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum url: $DISCUSSIONS - about: Please ask and answer questions here, show your implementations and + about: + Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: Hang out with other Ory community members to ask and answer questions. + about: + Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml index ea33569..0d121fe 100644 --- a/templates/repository/common/.github/config.yml +++ b/templates/repository/common/.github/config.yml @@ -1,3 +1,3 @@ todo: - keyword: "@todo" + keyword: '@todo' label: todo diff --git a/templates/repository/common/.github/workflows/closed_references.yml b/templates/repository/common/.github/workflows/closed_references.yml index 2789ac4..ebafc8a 100644 --- a/templates/repository/common/.github/workflows/closed_references.yml +++ b/templates/repository/common/.github/workflows/closed_references.yml @@ -2,13 +2,13 @@ name: Closed Reference Notifier on: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' workflow_dispatch: inputs: issueLimit: description: Max. number of issues to create required: true - default: "5" + default: '5' jobs: find_closed_references: @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: - node-version: "14" + node-version: '14' - uses: ory/closed-reference-notifier@v1 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index 666299c..b168ce9 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: "Close Stale Issues" +name: 'Close Stale Issues' on: workflow_dispatch: schedule: - - cron: "0 0 * * *" + - cron: '0 0 * * *' jobs: stale: @@ -35,10 +35,10 @@ jobs: Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you! Thank you 🙏✌️ - stale-issue-label: "stale" - exempt-issue-labels: "bug,blocking,docs,backlog" + stale-issue-label: 'stale' + exempt-issue-labels: 'bug,blocking,docs,backlog' days-before-stale: 365 days-before-close: 30 exempt-milestones: true exempt-assignees: true - only-pr-labels: "stale" + only-pr-labels: 'stale' From 3cf0f005564ff7e18f13640dd3dab677f610049f Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:34:29 +0200 Subject: [PATCH 119/164] fix: remove toc --- templates/repository/common/SECURITY.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index db2fd15..1754d9f 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -1,12 +1,3 @@ - - - -- [Security Policy](#security-policy) - - [Supported Versions](#supported-versions) - - [Reporting a Vulnerability](#reporting-a-vulnerability) - - - # Ory Security Policy ## Overview From 4132def510aefccb5bdb55519823bff9b7be5bc7 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:11:11 +0200 Subject: [PATCH 120/164] docs: update report section --- templates/repository/common/SECURITY.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 1754d9f..3d93e8e 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -45,7 +45,6 @@ SLAs and process. ## Reporting a Vulnerability -If you suspect a security vulnerability, please report it to -**[security@ory.sh](mailto:security@ory.sh)**. We will respond within 48 hours. -If confirmed, we will work to release a patch as soon as possible, typically -within a few days depending on the issue's complexity. +Please head over to our +[security policy](https://www.ory.sh/docs/ecosystem/security) to learn more +about reporting security vulnerabilities. From fe4ffe081358634ef4d59fdc2ffe2741c63981c8 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:11:50 +0200 Subject: [PATCH 121/164] docs: move contact section --- templates/repository/common/SECURITY.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 3d93e8e..bc41e5f 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -5,6 +5,9 @@ This security policy outlines the security support commitments for different types of Ory users. +[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security +SLAs and process. + ## Apache 2.0 License Users - **Security SLA:** No security Service Level Agreement (SLA) is provided. @@ -40,9 +43,6 @@ types of Ory users. soon as vulnerabilities are resolved, adhering to the above SLA. - **Version Support:** Ory Network always runs the most current version. -[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security -SLAs and process. - ## Reporting a Vulnerability Please head over to our From 153ada5c759ea168f47b33ff59fc0275cc8b577d Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Fri, 8 Nov 2024 12:24:59 +0100 Subject: [PATCH 122/164] chore: add ory logo (#221) --- .gitignore | 1 + static/logos/logo-ory.svg | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 static/logos/logo-ory.svg diff --git a/.gitignore b/.gitignore index c496caf..0918c0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .bin .idea node_modules +.DS_store diff --git a/static/logos/logo-ory.svg b/static/logos/logo-ory.svg new file mode 100644 index 0000000..80817dd --- /dev/null +++ b/static/logos/logo-ory.svg @@ -0,0 +1,5 @@ + + + + + From 1af2225678e6ed0f1947b17a07626774bff38667 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:35:08 +0100 Subject: [PATCH 123/164] docs: clarify release expectations (#225) --- templates/repository/common/SECURITY.md | 77 +++++++++++++------------ 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index bc41e5f..8359d9b 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -1,50 +1,53 @@ # Ory Security Policy -## Overview +This policy outlines Ory's security commitments and practices for users across +different licensing and deployment models. -This security policy outlines the security support commitments for different -types of Ory users. +To learn more about Ory's security service level agreements (SLAs) and +processes, please [contact us](https://www.ory.sh/contact/). -[Get in touch](https://www.ory.sh/contact/) to learn more about Ory's security -SLAs and process. - -## Apache 2.0 License Users +## Ory Network Users -- **Security SLA:** No security Service Level Agreement (SLA) is provided. -- **Release Schedule:** Releases are planned every 3 to 6 months. These releases - will contain all security fixes implemented up to that point. -- **Version Support:** Security patches are only provided for the current - release version. +- **Security SLA:** Ory addresses vulnerabilities in the Ory Network according + to the following guidelines: + - Critical: Typically addressed within 14 days. + - High: Typically addressed within 30 days. + - Medium: Typically addressed within 90 days. + - Low: Typically addressed within 180 days. + - Informational: Addressed as necessary. + These timelines are targets and may vary based on specific circumstances. +- **Release Schedule:** Updates are deployed to the Ory Network as + vulnerabilities are resolved. +- **Version Support:** The Ory Network always runs the latest version, ensuring + up-to-date security fixes. ## Ory Enterprise License Customers -- **Security SLA:** The following timelines apply for security vulnerabilities - based on their severity: - - Critical: Resolved within 14 days. - - High: Resolved within 30 days. - - Medium: Resolved within 90 days. - - Low: Resolved within 180 days. - - Informational: Addressed as needed. -- **Release Schedule:** Updates are provided as soon as vulnerabilities are - resolved, adhering to the above SLA. -- **Version Support:** Depending on the Ory Enterprise License agreement - multiple versions can be supported. +- **Security SLA:** Ory addresses vulnerabilities based on their severity: + - Critical: Typically addressed within 14 days. + - High: Typically addressed within 30 days. + - Medium: Typically addressed within 90 days. + - Low: Typically addressed within 180 days. + - Informational: Addressed as necessary. + These timelines are targets and may vary based on specific circumstances. +- **Release Schedule:** Updates are made available as vulnerabilities are + resolved. Ory works closely with enterprise customers to ensure timely updates + that align with their operational needs. +- **Version Support:** Ory may provide security support for multiple versions, + depending on the terms of the enterprise agreement. -## Ory Network Users +## Apache 2.0 License Users -- **Security SLA:** The following timelines apply for security vulnerabilities - based on their severity: - - Critical: Resolved within 14 days. - - High: Resolved within 30 days. - - Medium: Resolved within 90 days. - - Low: Resolved within 180 days. - - Informational: Addressed as needed. -- **Release Schedule:** Updates are automatically deployed to Ory Network as - soon as vulnerabilities are resolved, adhering to the above SLA. -- **Version Support:** Ory Network always runs the most current version. +- **Security SLA:** Ory does not provide a formal SLA for security issues under + the Apache 2.0 License. +- **Release Schedule:** Releases prioritize new functionality and include fixes + for known security vulnerabilities at the time of release. While major + releases typically occur one to two times per year, Ory does not guarantee a + fixed release schedule. +- **Version Support:** Security patches are only provided for the latest release + version. ## Reporting a Vulnerability -Please head over to our -[security policy](https://www.ory.sh/docs/ecosystem/security) to learn more -about reporting security vulnerabilities. +For details on how to report security vulnerabilities, visit our +[security policy documentation](https://www.ory.sh/docs/ecosystem/security). From 000f213efcd4e98ac3462086c47de58005c4b697 Mon Sep 17 00:00:00 2001 From: Andreas Bucksteeg Date: Fri, 27 Dec 2024 14:00:57 +0100 Subject: [PATCH 124/164] chore: add cve-scan.yaml to server template, download of shellcheck for macos/ARM (#224) --- .github/workflows/format.yml | 2 +- .github/workflows/licenses.yml | 4 +- .github/workflows/stale.yml | 10 +- .github/workflows/sync.yml | 8 +- .github/workflows/text-run.yml | 2 +- Makefile | 17 ++- .../.github/workflows/release_tagger.yml | 2 +- .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 66 ++++----- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 48 +++--- .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 48 +++--- .../common/.github/ISSUE_TEMPLATE/config.yml | 6 +- .../repository/common/.github/config.yml | 2 +- .../.github/workflows/closed_references.yml | 6 +- .../common/.github/workflows/stale.yml | 10 +- .../server/.github/workflows/cve-scan.yaml | 138 ++++++++++++++++++ 15 files changed, 247 insertions(+), 122 deletions(-) create mode 100644 templates/repository/server/.github/workflows/cve-scan.yaml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index c18d880..b1182a5 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v2 with: - node-version: '18.10' + node-version: "18.10" - uses: actions/setup-go@v3 with: go-version: 1.19 diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 7dcf1b2..9ef147d 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -14,8 +14,8 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '1.18' + go-version: "1.18" - uses: actions/setup-node@v2 with: - node-version: '18.10' + node-version: "18.10" - run: make licenses diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index f8657ac..702e037 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: 'Close Stale Issues' +name: "Close Stale Issues" on: workflow_dispatch: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: stale: @@ -17,8 +17,8 @@ jobs: stale-pr-message: | Thank you for opening this pull request. It appears that a request for e.g. information has not yet been completed. Therefore this issue will be automatically closed in 7 days, assuming that the proposed change is no longer required or has otherwise been resolved. - stale-issue-label: 'stale' - stale-pr-label: 'stale' - only-labels: 'needs more info' + stale-issue-label: "stale" + stale-pr-label: "stale" + only-labels: "needs more info" days-before-stale: 7 days-before-close: 7 diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 084d70a..a8393cf 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -6,10 +6,10 @@ on: # action is triggered on push to the following paths push: paths: - - 'templates/**' - - 'scripts/sync*' - - 'package.json' - - '.github/workflows/sync.yml' + - "templates/**" + - "scripts/sync*" + - "package.json" + - ".github/workflows/sync.yml" branches: - master diff --git a/.github/workflows/text-run.yml b/.github/workflows/text-run.yml index 858217d..26fe38b 100644 --- a/.github/workflows/text-run.yml +++ b/.github/workflows/text-run.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '15' + node-version: "15" - run: npm ci - run: npm run text-run diff --git a/Makefile b/Makefile index 0626931..5ca3135 100644 --- a/Makefile +++ b/Makefile @@ -26,11 +26,20 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters .bin/shellcheck: Makefile echo installing Shellcheck ... - curl -sSL https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz | tar xJ mkdir -p .bin - mv shellcheck-stable/shellcheck .bin - rm -rf shellcheck-stable - touch .bin/shellcheck # update the timestamp so that Make doesn't re-install the file over and over again + if [ "$$(uname -s)" = "Darwin" ] && [ "$$(uname -m)" = "arm64" ]; then \ + echo " - detected macOS ARM64" && \ + curl -sSL https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.darwin.aarch64.tar.xz | tar xJ; \ + elif [ "$$(uname -s)" = "Linux" ] && [ "$$(uname -m)" = "x86_64" ]; then \ + echo " - detected Linux AMD64" && \ + curl -sSL https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz | tar xJ; \ + else \ + echo " - unsupported architecture: $$(uname -s) $$(uname -m)" && \ + exit 1; \ + fi + mv shellcheck-v0.10.0/shellcheck .bin + rm -rf shellcheck-v0.10.0 + touch .bin/shellcheck .bin/shfmt: Makefile echo "Installing Shellfmt ..." diff --git a/templates/repository/action/.github/workflows/release_tagger.yml b/templates/repository/action/.github/workflows/release_tagger.yml index f37d4ad..11eb443 100644 --- a/templates/repository/action/.github/workflows/release_tagger.yml +++ b/templates/repository/action/.github/workflows/release_tagger.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: Actions-R-Us/actions-tagger@latest env: - GITHUB_TOKEN: '${{ github.token }}' + GITHUB_TOKEN: "${{ github.token }}" with: publish_latest_tag: true diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 7e7f3b4..13cdb34 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -1,45 +1,40 @@ -description: 'Create a bug report' +description: "Create a bug report" labels: - bug -name: 'Bug Report' +name: "Bug Report" body: - attributes: value: "Thank you for taking the time to fill out this bug report!\n" type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + - label: "I could not find a solution in the existing issues, docs, nor + discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' - - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter).' + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: description: - 'Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting.' - label: 'Ory Network Project' - placeholder: 'https://.projects.oryapis.com' + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" id: ory-network-project type: input - attributes: - description: 'A clear and concise description of what the bug is.' - label: 'Describe the bug' - placeholder: 'Tell us what you see!' + description: "A clear and concise description of what the bug is." + label: "Describe the bug" + placeholder: "Tell us what you see!" id: describe-bug type: textarea validations: @@ -53,17 +48,16 @@ body: 1. Run `docker run ....` 2. Make API Request to with `curl ...` 3. Request fails with response: `{"some": "error"}` - label: 'Reproducing the bug' + label: "Reproducing the bug" id: reproduce-bug type: textarea validations: required: true - attributes: - description: - 'Please copy and paste any relevant log output. This will be + description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information' - label: 'Relevant log output' + redact any sensitive information" + label: "Relevant log output" render: shell placeholder: | log=error .... @@ -71,10 +65,10 @@ body: type: textarea - attributes: description: - 'Please copy and paste any relevant configuration. This will be + "Please copy and paste any relevant configuration. This will be automatically formatted into code, so no need for backticks. Please - redact any sensitive information!' - label: 'Relevant configuration' + redact any sensitive information!" + label: "Relevant configuration" render: yml placeholder: | server: @@ -83,14 +77,14 @@ body: id: config type: textarea - attributes: - description: 'What version of our software are you running?' + description: "What version of our software are you running?" label: Version id: version type: input validations: required: true - attributes: - label: 'On which operating system are you observing this issue?' + label: "On which operating system are you observing this issue?" options: - Ory Network - macOS @@ -101,19 +95,19 @@ body: id: operating-system type: dropdown - attributes: - label: 'In which environment are you deploying?' + label: "In which environment are you deploying?" options: - Ory Network - Docker - - 'Docker Compose' - - 'Kubernetes with Helm' + - "Docker Compose" + - "Kubernetes with Helm" - Kubernetes - Binary - Other id: deployment type: dropdown - attributes: - description: 'Add any other context about the problem here.' + description: "Add any other context about the problem here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index 635ba7e..e4b70b2 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,8 +1,7 @@ -description: - 'A design document is needed for non-trivial changes to the code base.' +description: "A design document is needed for non-trivial changes to the code base." labels: - rfc -name: 'Design Document' +name: "Design Document" body: - attributes: value: | @@ -18,39 +17,34 @@ body: after code reviews, and your pull requests will be merged faster. type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + - label: "I could not find a solution in the existing issues, docs, nor + discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' - - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter).' + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: description: - 'Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting.' - label: 'Ory Network Project' - placeholder: 'https://.projects.oryapis.com' + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" id: ory-network-project type: input - attributes: description: | This section gives the reader a very rough overview of the landscape in which the new system is being built and what is actually being built. This isn’t a requirements doc. Keep it succinct! The goal is that readers are brought up to speed but some previous knowledge can be assumed and detailed info can be linked to. This section should be entirely focused on objective background facts. - label: 'Context and scope' + label: "Context and scope" id: scope type: textarea validations: @@ -59,7 +53,7 @@ body: - attributes: description: | A short list of bullet points of what the goals of the system are, and, sometimes more importantly, what non-goals are. Note, that non-goals aren’t negated goals like “The system shouldn’t crash”, but rather things that could reasonably be goals, but are explicitly chosen not to be goals. A good example would be “ACID compliance”; when designing a database, you’d certainly want to know whether that is a goal or non-goal. And if it is a non-goal you might still select a solution that provides it, if it doesn’t introduce trade-offs that prevent achieving the goals. - label: 'Goals and non-goals' + label: "Goals and non-goals" id: goals type: textarea validations: @@ -71,7 +65,7 @@ body: The design doc is the place to write down the trade-offs you made in designing your software. Focus on those trade-offs to produce a useful document with long-term value. That is, given the context (facts), goals and non-goals (requirements), the design doc is the place to suggest solutions and show why a particular solution best satisfies those goals. The point of writing a document over a more formal medium is to provide the flexibility to express the problem at hand in an appropriate manner. Because of this, there is no explicit guidance on how to actually describe the design. - label: 'The design' + label: "The design" id: design type: textarea validations: @@ -80,21 +74,21 @@ body: - attributes: description: | If the system under design exposes an API, then sketching out that API is usually a good idea. In most cases, however, one should withstand the temptation to copy-paste formal interface or data definitions into the doc as these are often verbose, contain unnecessary detail and quickly get out of date. Instead, focus on the parts that are relevant to the design and its trade-offs. - label: 'APIs' + label: "APIs" id: apis type: textarea - attributes: description: | Systems that store data should likely discuss how and in what rough form this happens. Similar to the advice on APIs, and for the same reasons, copy-pasting complete schema definitions should be avoided. Instead, focus on the parts that are relevant to the design and its trade-offs. - label: 'Data storage' + label: "Data storage" id: persistence type: textarea - attributes: description: | Design docs should rarely contain code, or pseudo-code except in situations where novel algorithms are described. As appropriate, link to prototypes that show the feasibility of the design. - label: 'Code and pseudo-code' + label: "Code and pseudo-code" id: pseudocode type: textarea @@ -107,7 +101,7 @@ body: On the other end are systems where the possible solutions are very well defined, but it isn't at all obvious how they could even be combined to achieve the goals. This may be a legacy system that is difficult to change and wasn't designed to do what you want it to do or a library design that needs to operate within the constraints of the host programming language. In this situation, you may be able to enumerate all the things you can do relatively easily, but you need to creatively put those things together to achieve the goals. There may be multiple solutions, and none of them are great, and hence such a document should focus on selecting the best way given all identified trade-offs. - label: 'Degree of constraint' + label: "Degree of constraint" id: constrait type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index 43ce5db..321e3e7 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,8 +1,7 @@ -description: - 'Suggest an idea for this project without a plan for implementation' +description: "Suggest an idea for this project without a plan for implementation" labels: - feat -name: 'Feature Request' +name: "Feature Request" body: - attributes: value: | @@ -11,39 +10,33 @@ body: If you already have a plan to implement a feature or a change, please create a [design document](https://github.com/aeneasr/gh-template-test/issues/new?assignees=&labels=rfc&template=DESIGN-DOC.yml) instead if the change is non-trivial! type: markdown - attributes: - label: 'Preflight checklist' + label: "Preflight checklist" options: - - label: - 'I could not find a solution in the existing issues, docs, nor - discussions.' + - label: "I could not find a solution in the existing issues, docs, nor + discussions." required: true - - label: - "I agree to follow this project's [Code of + - label: "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: - "I have read and am following this repository's [Contribution + - label: "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: - 'I have joined the [Ory Community Slack](https://slack.ory.sh).' - - label: - 'I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter).' + - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: "I am signed up to the [Ory Security Patch + Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: description: - 'Enter the slug or API URL of the affected Ory Network project. Leave - empty when you are self-hosting.' - label: 'Ory Network Project' - placeholder: 'https://.projects.oryapis.com' + "Enter the slug or API URL of the affected Ory Network project. Leave + empty when you are self-hosting." + label: "Ory Network Project" + placeholder: "https://.projects.oryapis.com" id: ory-network-project type: input - attributes: - description: - 'Is your feature request related to a problem? Please describe.' - label: 'Describe your problem' + description: "Is your feature request related to a problem? Please describe." + label: "Describe your problem" placeholder: "A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]" @@ -56,28 +49,27 @@ body: Describe the solution you'd like placeholder: | A clear and concise description of what you want to happen. - label: 'Describe your ideal solution' + label: "Describe your ideal solution" id: solution type: textarea validations: required: true - attributes: description: "Describe alternatives you've considered" - label: 'Workarounds or alternatives' + label: "Workarounds or alternatives" id: alternatives type: textarea validations: required: true - attributes: - description: 'What version of our software are you running?' + description: "What version of our software are you running?" label: Version id: version type: input validations: required: true - attributes: - description: - 'Add any other context or screenshots about the feature request here.' + description: "Add any other context or screenshots about the feature request here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 02d86b3..49a589a 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -2,10 +2,8 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum url: $DISCUSSIONS - about: - Please ask and answer questions here, show your implementations and + about: Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: - Hang out with other Ory community members to ask and answer questions. + about: Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/common/.github/config.yml b/templates/repository/common/.github/config.yml index 0d121fe..ea33569 100644 --- a/templates/repository/common/.github/config.yml +++ b/templates/repository/common/.github/config.yml @@ -1,3 +1,3 @@ todo: - keyword: '@todo' + keyword: "@todo" label: todo diff --git a/templates/repository/common/.github/workflows/closed_references.yml b/templates/repository/common/.github/workflows/closed_references.yml index ebafc8a..2789ac4 100644 --- a/templates/repository/common/.github/workflows/closed_references.yml +++ b/templates/repository/common/.github/workflows/closed_references.yml @@ -2,13 +2,13 @@ name: Closed Reference Notifier on: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" workflow_dispatch: inputs: issueLimit: description: Max. number of issues to create required: true - default: '5' + default: "5" jobs: find_closed_references: @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: - node-version: '14' + node-version: "14" - uses: ory/closed-reference-notifier@v1 with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/templates/repository/common/.github/workflows/stale.yml b/templates/repository/common/.github/workflows/stale.yml index b168ce9..666299c 100644 --- a/templates/repository/common/.github/workflows/stale.yml +++ b/templates/repository/common/.github/workflows/stale.yml @@ -1,8 +1,8 @@ -name: 'Close Stale Issues' +name: "Close Stale Issues" on: workflow_dispatch: schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" jobs: stale: @@ -35,10 +35,10 @@ jobs: Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you! Thank you 🙏✌️ - stale-issue-label: 'stale' - exempt-issue-labels: 'bug,blocking,docs,backlog' + stale-issue-label: "stale" + exempt-issue-labels: "bug,blocking,docs,backlog" days-before-stale: 365 days-before-close: 30 exempt-milestones: true exempt-assignees: true - only-pr-labels: 'stale' + only-pr-labels: "stale" diff --git a/templates/repository/server/.github/workflows/cve-scan.yaml b/templates/repository/server/.github/workflows/cve-scan.yaml new file mode 100644 index 0000000..b1335ce --- /dev/null +++ b/templates/repository/server/.github/workflows/cve-scan.yaml @@ -0,0 +1,138 @@ +name: Docker Image Scanners +on: + workflow_dispatch: + push: + branches: + - "master" + tags: + - "v*.*.*" + pull_request: + branches: + - "master" + +permissions: + contents: read + security-events: write + +jobs: + scanners: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Env + id: vars + shell: bash + run: | + # Store values in local variables + SHA_SHORT=$(git rev-parse --short HEAD) + REPO_NAME=${{ github.event.repository.name }} + + # Append -sqlite to SHA_SHORT if repo is hydra + if [ "${REPO_NAME}" = "hydra" ]; then + echo "Repo is hydra, appending -sqlite to SHA_SHORT" + IMAGE_NAME="oryd/${REPO_NAME}:${SHA_SHORT}-sqlite" + else + echo "Repo is not hydra, using default IMAGE_NAME" + IMAGE_NAME="oryd/${REPO_NAME}:${SHA_SHORT}" + fi + + # Output values for debugging + echo "Values to be set:" + echo "SHA_SHORT: ${SHA_SHORT}" + echo "REPO_NAME: ${REPO_NAME}" + echo "IMAGE_NAME: ${IMAGE_NAME}" + + # Set GitHub Environment variables + echo "SHA_SHORT=${SHA_SHORT}" >> "${GITHUB_ENV}" + echo "IMAGE_NAME=${IMAGE_NAME}" >> "${GITHUB_ENV}" + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build images + shell: bash + run: | + IMAGE_TAG="${{ env.SHA_SHORT }}" make docker + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure Trivy + run: | + mkdir -p $HOME/.cache/trivy + echo "TRIVY_USERNAME=${{ github.actor }}" >> $GITHUB_ENV + echo "TRIVY_PASSWORD=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV + + - name: Anchore Scanner + uses: anchore/scan-action@v5 + id: grype-scan + with: + image: ${{ env.IMAGE_NAME }} + fail-build: true + severity-cutoff: high + add-cpes-if-none: true + - name: Inspect action SARIF report + shell: bash + if: ${{ always() }} + run: | + echo "::group::Anchore Scan Details" + jq '.runs[0].results' ${{ steps.grype-scan.outputs.sarif }} + echo "::endgroup::" + - name: Anchore upload scan SARIF report + if: always() + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: ${{ steps.grype-scan.outputs.sarif }} + - name: Kubescape scanner + uses: kubescape/github-action@main + id: kubescape + with: + image: ${{ env.IMAGE_NAME }} + verbose: true + format: pretty-printer + # can't whitelist CVE yet: https://github.com/kubescape/kubescape/pull/1568 + severityThreshold: critical + - name: Trivy Scanner + uses: aquasecurity/trivy-action@master + if: ${{ always() }} + with: + image-ref: ${{ env.IMAGE_NAME }} + format: "table" + exit-code: "42" + ignore-unfixed: true + vuln-type: "os,library" + severity: "CRITICAL,HIGH" + scanners: "vuln,secret,misconfig" + env: + TRIVY_SKIP_JAVA_DB_UPDATE: "true" + TRIVY_DISABLE_VEX_NOTICE: "true" + TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db + + - name: Dockle Linter + uses: erzz/dockle-action@v1 + if: ${{ always() }} + with: + image: ${{ env.IMAGE_NAME }} + exit-code: 42 + failure-threshold: high + - name: Hadolint + uses: hadolint/hadolint-action@v3.1.0 + id: hadolint + if: ${{ always() }} + with: + dockerfile: .docker/Dockerfile-build + verbose: true + format: "json" + failure-threshold: "error" + - name: View Hadolint results + if: ${{ always() }} + shell: bash + run: | + echo "::group::Hadolint Scan Details" + echo "${HADOLINT_RESULTS}" | jq '.' + echo "::endgroup::" From 7ba40649aea8bbadc478c01f97ff6231fb492fb8 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 12:17:52 +0100 Subject: [PATCH 125/164] feat: add license checker to all repositories (#226) --- .../common/.github/workflows/licenses.yml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 templates/repository/common/.github/workflows/licenses.yml diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml new file mode 100644 index 0000000..d28ace5 --- /dev/null +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -0,0 +1,22 @@ +name: Licenses + +on: + pull_request: + push: + branches: + - main + - master + +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Install script + uses: ory/ci/licenses/setup@master + with: + token: ${{ secrets.ORY_BOT_PAT || secrets.GITHUB_TOKEN }} + - name: Check licenses + uses: ory/ci/licenses/check@master + - name: Write licenses + uses: ory/ci/licenses/write@master + if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }} From cbb120bd7c046b6af46b2148f5cfc1b3d03a1dd2 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:50:22 +0100 Subject: [PATCH 126/164] fix: update license script (#227) --- templates/repository/common/.github/workflows/licenses.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index d28ace5..dcf3fb9 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -8,7 +8,8 @@ on: - master jobs: - check: + licenses: + name: License compliance runs-on: ubuntu-latest steps: - name: Install script From a331cc043361184afe7f9547ad5283fb56110e09 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:06:35 +0100 Subject: [PATCH 127/164] feat: push to all repos --- scripts/sync.sh | 148 ++++++++++++++++++++++++++++-------------------- 1 file changed, 87 insertions(+), 61 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 578c886..7f5ccb8 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -18,67 +18,93 @@ function replicate_all { echo "ERROR (sync_all): unknown value for \"persist\" argument: \"$persist\". Please provide either \"push\", \"commit\", or \"keep\"." exit 1 fi - replicate ory/hydra server "Hydra" "$workspace" "$persist" - replicate ory/keto server "Keto" "$workspace" "$persist" - replicate ory/oathkeeper server "Oathkeeper" "$workspace" "$persist" - replicate ory/kratos server "Kratos" "$workspace" "$persist" - replicate ory/hydra-login-consent-node library "Hydra Login, Logout And Consent Node Example" "$workspace" "$persist" - replicate ory/docs library "Documentation" "$workspace" "$persist" - replicate ory/cli library "CLI" "$workspace" "$persist" - replicate ory/kratos-selfservice-ui-node library "Kratos SelfService UI Node Example" "$workspace" "$persist" - replicate ory/kratos-selfservice-ui-react-native library "Kratos SelfService UI React Native Example" "$workspace" "$persist" - replicate ory/fosite library "Fosite" "$workspace" "$persist" - replicate ory/dockertest library "Dockertest" "$workspace" "$persist" - replicate ory/herodot library "Herodot" "$workspace" "$persist" - replicate ory/graceful library "Graceful" "$workspace" "$persist" - replicate ory/k8s library "Kubernetes Resources" "$workspace" "$persist" - replicate ory/x library "X" "$workspace" "$persist" - replicate ory/closed-reference-notifier action "Closed Reference Notifier" "$workspace" "$persist" - replicate ory/label-sync-action action "Label Sync Action" "$workspace" "$persist" - replicate ory/milestone-action action "Milestone Action" "$workspace" "$persist" - replicate ory/build-buf-action action "Buildbuf Action" "$workspace" "$persist" - replicate ory/examples library "Examples" "$workspace" "$persist" - replicate ory/hydra-maester library "Ory Hydra Maester" "$workspace" "$persist" - replicate ory/oathkeeper-maester library "Ory Oathkeeper Maester" "$workspace" "$persist" - replicate ory/sdk library "Ory SDK" "$workspace" "$persist" - replicate ory/network library "Ory Network" "$workspace" "$persist" - replicate ory/elements library "Ory Elements" "$workspace" "$persist" - replicate ory/keto-client-dotnet library "Ory Keto Dotnet Client" "$workspace" "$persist" - replicate ory/keto-client-java library "Ory Keto Java Client" "$workspace" "$persist" - replicate ory/keto-client-rust library "Ory Keto Rust Client" "$workspace" "$persist" - replicate ory/keto-client-dart library "Ory Keto Dart Client" "$workspace" "$persist" - replicate ory/keto-client-js library "Ory Keto JavaScript Client" "$workspace" "$persist" - replicate ory/keto-client-php library "Ory Keto PHP Client" "$workspace" "$persist" - replicate ory/keto-client-go library "Ory Keto Go Client" "$workspace" "$persist" - replicate ory/keto-client-ruby library "Ory Keto Ruby Client" "$workspace" "$persist" - replicate ory/keto-client-python library "Ory Keto Python Client" "$workspace" "$persist" - replicate ory/kratos-client-dotnet library "Ory Kratos Dotnet Client" "$workspace" "$persist" - replicate ory/kratos-client-java library "Ory Kratos Java Client" "$workspace" "$persist" - replicate ory/kratos-client-rust library "Ory Kratos Rust Client" "$workspace" "$persist" - replicate ory/kratos-client-dart library "Ory Kratos Dart Client" "$workspace" "$persist" - replicate ory/kratos-client-js library "Ory Kratos JavaScript Client" "$workspace" "$persist" - replicate ory/kratos-client-php library "Ory Kratos PHP Client" "$workspace" "$persist" - replicate ory/kratos-client-go library "Ory Kratos Go Client" "$workspace" "$persist" - replicate ory/kratos-client-ruby library "Ory Kratos Ruby Client" "$workspace" "$persist" - replicate ory/kratos-client-python library "Ory Kratos Python Client" "$workspace" "$persist" - replicate ory/hydra-client-dotnet library "Ory Hydra Dotnet Client" "$workspace" "$persist" - replicate ory/hydra-client-java library "Ory Hydra Java Client" "$workspace" "$persist" - replicate ory/hydra-client-rust library "Ory Hydra Rust Client" "$workspace" "$persist" - replicate ory/hydra-client-dart library "Ory Hydra Dart Client" "$workspace" "$persist" - replicate ory/hydra-client-js library "Ory Hydra JavaScript Client" "$workspace" "$persist" - replicate ory/hydra-client-php library "Ory Hydra PHP Client" "$workspace" "$persist" - replicate ory/hydra-client-go library "Ory Hydra Go Client" "$workspace" "$persist" - replicate ory/hydra-client-ruby library "Ory Hydra Ruby Client" "$workspace" "$persist" - replicate ory/hydra-client-python library "Ory Hydra Python Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-dotnet library "Ory Oathkeeper Dotnet Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-java library "Ory Oathkeeper Java Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-rust library "Ory Oathkeeper Rust Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-dart library "Ory Oathkeeper Dart Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-js library "Ory Oathkeeper JavaScript Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-php library "Ory Oathkeeper PHP Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-go library "Ory Oathkeeper Go Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-ruby library "Ory Oathkeeper Ruby Client" "$workspace" "$persist" - replicate ory/oathkeeper-client-python library "Ory Oathkeeper Python Client" "$workspace" "$persist" + + declare -A name_map=( + ["hydra"]="Hydra" + ["keto"]="Keto" + ["oathkeeper"]="Oathkeeper" + ["kratos"]="Kratos" + ["hydra-login-consent-node"]="Hydra Login, Logout And Consent Node Example" + ["docs"]="Documentation" + ["cli"]="CLI" + ["kratos-selfservice-ui-node"]="Kratos SelfService UI Node Example" + ["kratos-selfservice-ui-react-native"]="Kratos SelfService UI React Native Example" + ["fosite"]="Fosite" + ["dockertest"]="Dockertest" + ["herodot"]="Herodot" + ["graceful"]="Graceful" + ["k8s"]="Kubernetes Resources" + ["x"]="X" + ["closed-reference-notifier"]="Closed Reference Notifier" + ["label-sync-action"]="Label Sync Action" + ["milestone-action"]="Milestone Action" + ["build-buf-action"]="Buildbuf Action" + ["examples"]="Examples" + ["hydra-maester"]="Ory Hydra Maester" + ["oathkeeper-maester"]="Ory Oathkeeper Maester" + ["sdk"]="Ory SDK" + ["network"]="Ory Network" + ["elements"]="Ory Elements" + ["keto-client-dotnet"]="Ory Keto Dotnet Client" + ["keto-client-java"]="Ory Keto Java Client" + ["keto-client-rust"]="Ory Keto Rust Client" + ["keto-client-dart"]="Ory Keto Dart Client" + ["keto-client-js"]="Ory Keto JavaScript Client" + ["keto-client-php"]="Ory Keto PHP Client" + ["keto-client-go"]="Ory Keto Go Client" + ["keto-client-ruby"]="Ory Keto Ruby Client" + ["keto-client-python"]="Ory Keto Python Client" + ["kratos-client-dotnet"]="Ory Kratos Dotnet Client" + ["kratos-client-java"]="Ory Kratos Java Client" + ["kratos-client-rust"]="Ory Kratos Rust Client" + ["kratos-client-dart"]="Ory Kratos Dart Client" + ["kratos-client-js"]="Ory Kratos JavaScript Client" + ["kratos-client-php"]="Ory Kratos PHP Client" + ["kratos-client-go"]="Ory Kratos Go Client" + ["kratos-client-ruby"]="Ory Kratos Ruby Client" + ["kratos-client-python"]="Ory Kratos Python Client" + ["hydra-client-dotnet"]="Ory Hydra Dotnet Client" + ["hydra-client-java"]="Ory Hydra Java Client" + ["hydra-client-rust"]="Ory Hydra Rust Client" + ["hydra-client-dart"]="Ory Hydra Dart Client" + ["hydra-client-js"]="Ory Hydra JavaScript Client" + ["hydra-client-php"]="Ory Hydra PHP Client" + ["hydra-client-go"]="Ory Hydra Go Client" + ["hydra-client-ruby"]="Ory Hydra Ruby Client" + ["hydra-client-python"]="Ory Hydra Python Client" + ["oathkeeper-client-dotnet"]="Ory Oathkeeper Dotnet Client" + ["oathkeeper-client-java"]="Ory Oathkeeper Java Client" + ["oathkeeper-client-rust"]="Ory Oathkeeper Rust Client" + ["oathkeeper-client-dart"]="Ory Oathkeeper Dart Client" + ["oathkeeper-client-js"]="Ory Oathkeeper JavaScript Client" + ["oathkeeper-client-php"]="Ory Oathkeeper PHP Client" + ["oathkeeper-client-go"]="Ory Oathkeeper Go Client" + ["oathkeeper-client-ruby"]="Ory Oathkeeper Ruby Client" + ["oathkeeper-client-python"]="Ory Oathkeeper Python Client" + ) + + declare -A type_map=( + ["hydra"]="server" + ["keto"]="server" + ["oathkeeper"]="server" + ["kratos"]="server" + ["closed-reference-notifier"]="action" + ["label-sync-action"]="action" + ["milestone-action"]="action" + ["build-buf-action"]="action" + ["ci"]="action" + ) + + declare -a exclusion_list=( + "meta" + ".github" + ) + + gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name' | while read -r repo_name; do + human_name=${name_map[$repo_name]:-$repo_name} + repo_type=${type_map[$repo_name]:-library} + replicate "ory/$repo_name" "$repo_type" "$human_name" "$workspace" "$persist" + done } # replicates the info in this repository into the given target repository From 82777ca8c7b5287431c21d5e3a76c5eb37168866 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:06:41 +0100 Subject: [PATCH 128/164] fix: formatting --- Makefile | 32 +++++---- package-lock.json | 65 +++++++++++-------- package.json | 2 + .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 18 +++-- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 18 +++-- .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 24 ++++--- .../common/.github/ISSUE_TEMPLATE/config.yml | 6 +- .../common/.github/workflows/licenses.yml | 6 +- 8 files changed, 109 insertions(+), 62 deletions(-) diff --git a/Makefile b/Makefile index 5ca3135..c8fcd30 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,22 @@ +OS=$(shell uname -s | tr '[:upper:]' '[:lower:]') +ARCH=$(shell uname -m) +ifeq ($(ARCH),x86_64) + ARCH=amd64 + ARCH_SHCK=x86_64 +else ifeq ($(ARCH),arm64) + ARCH=arm64 + ARCH_SHCK=arm64 +else ifeq ($(ARCH),aarch64) + ARCH=arm64 + ARCH_SHCK=arm64 +else ifeq ($(ARCH),i386) + ARCH=386 + ARCH_SHCK=386 +else ifeq ($(ARCH),i686) + ARCH=386 + ARCH_SHCK=386 +endif + format: .bin/ory .bin/shfmt node_modules # formats the source code echo formatting ... .bin/ory dev headers copyright --type=open-source @@ -42,20 +61,9 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters touch .bin/shellcheck .bin/shfmt: Makefile - echo "Installing Shellfmt ..." mkdir -p .bin - if [ "$$(uname -s)" = "Darwin" ] && [ "$$(uname -m)" = "arm64" ]; then \ - echo " - detected macOS ARM64"; \ - curl -sSL https://github.com/mvdan/sh/releases/download/v3.9.0/shfmt_v3.9.0_darwin_arm64 -o .bin/shfmt; \ - elif [ "$$(uname -s)" = "Linux" ] && [ "$$(uname -m)" = "x86_64" ]; then \ - echo " - detected Linux AMD64"; \ - curl -sSL https://github.com/mvdan/sh/releases/download/v3.9.0/shfmt_v3.9.0_linux_amd64 -o .bin/shfmt; \ - else \ - echo " - unsupported architecture: $$(uname -s) $$(uname -m)"; \ - exit 1; \ - fi + curl -sSL https://github.com/mvdan/sh/releases/download/v3.10.0/shfmt_v3.10.0_$(OS)_$(ARCH) -o .bin/shfmt chmod +x .bin/shfmt - touch .bin/shfmt node_modules: package.json package-lock.json echo installing Node dependencies ... diff --git a/package-lock.json b/package-lock.json index 5daabf8..cde5c62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "devDependencies": { "license-checker": "^25.0.1", + "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" @@ -826,9 +827,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http2-wrapper": { @@ -1081,12 +1082,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -1112,9 +1113,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -1214,6 +1215,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ory-prettier-styles": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", + "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", + "dev": true + }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -1536,9 +1543,9 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -2524,9 +2531,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http2-wrapper": { @@ -2737,12 +2744,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -2759,9 +2766,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -2840,6 +2847,12 @@ "mimic-fn": "^2.1.0" } }, + "ory-prettier-styles": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ory-prettier-styles/-/ory-prettier-styles-1.3.0.tgz", + "integrity": "sha512-Vfn0G6CyLaadwcCamwe1SQCf37ZQfBDgMrhRI70dE/2fbE3Q43/xu7K5c32I5FGt/EliroWty5yBjmdkj0eWug==", + "dev": true + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3062,9 +3075,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "signal-exit": { diff --git a/package.json b/package.json index 4a0af03..f9408c2 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,10 @@ "scripts": { "text-run": "text-run" }, + "prettier": "ory-prettier-styles", "devDependencies": { "license-checker": "^25.0.1", + "ory-prettier-styles": "1.3.0", "prettier": "2.7.1", "prettier-plugin-packagejson": "^2.2.18", "text-runner": "5.0.2" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index 13cdb34..b9c36a9 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -9,17 +9,22 @@ body: - attributes: label: "Preflight checklist" options: - - label: "I could not find a solution in the existing issues, docs, nor + - label: + "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch + - label: + "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: + "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes @@ -54,7 +59,8 @@ body: validations: required: true - attributes: - description: "Please copy and paste any relevant log output. This will be + description: + "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. Please redact any sensitive information" label: "Relevant log output" diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index e4b70b2..d6f29c7 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -1,4 +1,5 @@ -description: "A design document is needed for non-trivial changes to the code base." +description: + "A design document is needed for non-trivial changes to the code base." labels: - rfc name: "Design Document" @@ -19,17 +20,22 @@ body: - attributes: label: "Preflight checklist" options: - - label: "I could not find a solution in the existing issues, docs, nor + - label: + "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch + - label: + "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: + "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index 321e3e7..e2bc92e 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -1,4 +1,5 @@ -description: "Suggest an idea for this project without a plan for implementation" +description: + "Suggest an idea for this project without a plan for implementation" labels: - feat name: "Feature Request" @@ -12,17 +13,22 @@ body: - attributes: label: "Preflight checklist" options: - - label: "I could not find a solution in the existing issues, docs, nor + - label: + "I could not find a solution in the existing issues, docs, nor discussions." required: true - - label: "I agree to follow this project's [Code of + - label: + "I agree to follow this project's [Code of Conduct](https://github.com/$REPOSITORY/blob/master/CODE_OF_CONDUCT.md)." required: true - - label: "I have read and am following this repository's [Contribution + - label: + "I have read and am following this repository's [Contribution Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - - label: "I have joined the [Ory Community Slack](https://slack.ory.sh)." - - label: "I am signed up to the [Ory Security Patch + - label: + "I have joined the [Ory Community Slack](https://slack.ory.sh)." + - label: + "I am signed up to the [Ory Security Patch Newsletter](https://www.ory.sh/l/sign-up-newsletter)." id: checklist type: checkboxes @@ -35,7 +41,8 @@ body: id: ory-network-project type: input - attributes: - description: "Is your feature request related to a problem? Please describe." + description: + "Is your feature request related to a problem? Please describe." label: "Describe your problem" placeholder: "A clear and concise description of what the problem is. Ex. I'm always @@ -69,7 +76,8 @@ body: validations: required: true - attributes: - description: "Add any other context or screenshots about the feature request here." + description: + "Add any other context or screenshots about the feature request here." label: Additional Context id: additional type: textarea diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 49a589a..02d86b3 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -2,8 +2,10 @@ blank_issues_enabled: false contact_links: - name: Ory $PROJECT Forum url: $DISCUSSIONS - about: Please ask and answer questions here, show your implementations and + about: + Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat url: https://www.ory.sh/chat - about: Hang out with other Ory community members to ask and answer questions. + about: + Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index dcf3fb9..8bb143b 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -18,6 +18,8 @@ jobs: token: ${{ secrets.ORY_BOT_PAT || secrets.GITHUB_TOKEN }} - name: Check licenses uses: ory/ci/licenses/check@master - - name: Write licenses + - name: Write, commit, push licenses uses: ory/ci/licenses/write@master - if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }} + if: + ${{ github.ref == 'refs/heads/main' || github.ref == + 'refs/heads/master' }} From e3de57ef2aa29f1603f1dcddde9112f0e7887346 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:08:14 +0100 Subject: [PATCH 129/164] fix: missing exclusion check --- scripts/sync.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 7f5ccb8..1aa7d1a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -101,6 +101,14 @@ function replicate_all { ) gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name' | while read -r repo_name; do + # Check if the repository is in the exclusion list + for excluded_repo in "${exclusion_list[@]}"; do + if [[ "$repo_name" == "$excluded_repo" ]]; then + echo "Skipping ${repo_name} as it is in the exclusion list." + continue 2 + fi + done + human_name=${name_map[$repo_name]:-$repo_name} repo_type=${type_map[$repo_name]:-library} replicate "ory/$repo_name" "$repo_type" "$human_name" "$workspace" "$persist" From d81347e141ed3cc3a34d55b82ba3f9452221b323 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:14:24 +0100 Subject: [PATCH 130/164] fix: secrets --- .github/workflows/sync.yml | 6 ++---- .github/workflows/test.yml | 5 +---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index a8393cf..ab3febd 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -19,9 +19,6 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: webfactory/ssh-agent@v0.4.1 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - run: | source ./scripts/sync.sh install_dependencies_on_ci @@ -29,4 +26,5 @@ jobs: workspace=$(create_workspace) replicate_all "$workspace" "push" env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + GITHUB_TOKEN: ${{ secrets.ORY_BOT_PAT }} + diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 07d22cb..99c4d9a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,9 +11,6 @@ jobs: steps: - uses: actions/checkout@v3 - run: make test - - uses: webfactory/ssh-agent@v0.4.1 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Dry-run the sync run: | source ./scripts/sync.sh @@ -22,4 +19,4 @@ jobs: workspace=$(create_workspace) replicate_all "$workspace" "commit" env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN_AENEASR }} + GITHUB_TOKEN: ${{ secrets.ORY_BOT_PAT }} From 37312e5012103de50138e2edea71b61f5fbfc479 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:16:32 +0100 Subject: [PATCH 131/164] chore: update ory cli --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c8fcd30..a35b7c7 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ test: .bin/shellcheck .bin/shfmt node_modules # runs all linters .bin/ory: Makefile echo installing Ory CLI ... - curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.48 + curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v1.1.0 touch .bin/ory .bin/shellcheck: Makefile From 57aa44c634e06e1b4ddc65eb5728afdf731936df Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:18:00 +0100 Subject: [PATCH 132/164] chore: format --- .github/workflows/sync.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index ab3febd..568fca8 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -27,4 +27,3 @@ jobs: replicate_all "$workspace" "push" env: GITHUB_TOKEN: ${{ secrets.ORY_BOT_PAT }} - From a96e9383aae1b353640ef6e18a9a737f003d7f9b Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:22:56 +0100 Subject: [PATCH 133/164] fix: use https instead of ssh --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 1aa7d1a..0d89067 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -195,7 +195,7 @@ function clone { header "CLONING" local -r repo_id=$1 local -r repo_path=$2 - git clone --depth 1 "git@github.com:$repo_id.git" "$repo_path" + git clone --depth 1 "https://github.com/$repo_id.git" "$repo_path" } # commits the changes in the current directory to the local Git client From b2edecf1b78d68b6a3d35f56abcb4c3664021322 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:26:45 +0100 Subject: [PATCH 134/164] fix: do not use ssh but https --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 0d89067..aee2054 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -216,7 +216,7 @@ function configure_git_on_ci { # set git email & username bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/git.sh) # change global url from https://github.com/ to git@github.com: - git config --global url."git@github.com:".insteadOf https://github.com/ + # git config --global url."git@github.com:".insteadOf https://github.com/ } # copy contributing guide to docs if docs exist From 1ed40efb08fb025407120a2a4f469c74c9e56790 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:42:56 +0100 Subject: [PATCH 135/164] feat: only format when package.json exists --- scripts/sync.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index aee2054..1aaf71a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -271,13 +271,17 @@ function create_workspace { } function format { - header "FORMATTING" - local -r repo_path=$1 - ( - cd "$repo_path" - npm ci --legacy-peer-deps - npx prettier --write "*.md" .github - ) + header "FORMATTING" + local -r repo_path=$1 + if [ ! -f "$repo_path/package.json" ]; then + echo "Skipping formatting as package.json does not exist in $repo_path" + return + fi + ( + cd "$repo_path" + npm ci --legacy-peer-deps + npx prettier --write "*.md" .github + ) } function install_dependencies_on_ci { From 6371c7b05fbea4140dc84d1bc745375bc57d0958 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 17:48:59 +0100 Subject: [PATCH 136/164] fix: set username --- scripts/sync.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 1aaf71a..e95fc7e 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -289,6 +289,8 @@ function install_dependencies_on_ci { sudo apt-get update -y sudo apt-get install -y moreutils gettext-base curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.48 + git config --global user.email "60093411+ory-bot@users.noreply.github.com" + git config --global user.name "ory-bot" } # pushes the committed changes from the local Git client to GitHub From 466c762a888c85c8571cfe753fea4ae64502bf7e Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 18:01:17 +0100 Subject: [PATCH 137/164] chore: format --- scripts/sync.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index e95fc7e..8d6cdc8 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -271,17 +271,17 @@ function create_workspace { } function format { - header "FORMATTING" - local -r repo_path=$1 - if [ ! -f "$repo_path/package.json" ]; then - echo "Skipping formatting as package.json does not exist in $repo_path" - return - fi - ( - cd "$repo_path" - npm ci --legacy-peer-deps - npx prettier --write "*.md" .github - ) + header "FORMATTING" + local -r repo_path=$1 + if [ ! -f "$repo_path/package.json" ]; then + echo "Skipping formatting as package.json does not exist in $repo_path" + return + fi + ( + cd "$repo_path" + npm ci --legacy-peer-deps + npx prettier --write "*.md" .github + ) } function install_dependencies_on_ci { From 1ac3e5f605744066eaa6bdb1df25fe39cdb139df Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 23:39:26 +0100 Subject: [PATCH 138/164] fix: git setup --- scripts/sync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 8d6cdc8..84ea787 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -217,6 +217,8 @@ function configure_git_on_ci { bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/git.sh) # change global url from https://github.com/ to git@github.com: # git config --global url."git@github.com:".insteadOf https://github.com/ + git config --global user.email "60093411+ory-bot@users.noreply.github.com" + git config --global user.name "ory-bot" } # copy contributing guide to docs if docs exist @@ -289,8 +291,6 @@ function install_dependencies_on_ci { sudo apt-get update -y sudo apt-get install -y moreutils gettext-base curl https://raw.githubusercontent.com/ory/meta/master/install.sh | bash -s -- -b .bin ory v0.1.48 - git config --global user.email "60093411+ory-bot@users.noreply.github.com" - git config --global user.name "ory-bot" } # pushes the committed changes from the local Git client to GitHub From b1eed8856cd301603956084d58f021707ace940a Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Mon, 30 Dec 2024 23:48:27 +0100 Subject: [PATCH 139/164] fix: use ssh key again --- .github/workflows/sync.yml | 3 +++ scripts/sync.sh | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 568fca8..78d5aab 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -19,6 +19,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: webfactory/ssh-agent@v0.4.1 + with: + ssh-private-key: ${{ secrets.ORY_BOT_SSH_KEY }} - run: | source ./scripts/sync.sh install_dependencies_on_ci diff --git a/scripts/sync.sh b/scripts/sync.sh index 84ea787..87a499d 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -195,7 +195,7 @@ function clone { header "CLONING" local -r repo_id=$1 local -r repo_path=$2 - git clone --depth 1 "https://github.com/$repo_id.git" "$repo_path" + git clone --depth 1 "git@github.com:$repo_id.git" "$repo_path" } # commits the changes in the current directory to the local Git client @@ -215,8 +215,7 @@ function configure_git_on_ci { header "CONFIGURING GIT" # set git email & username bash <(curl -s https://raw.githubusercontent.com/ory/ci/master/src/scripts/install/git.sh) - # change global url from https://github.com/ to git@github.com: - # git config --global url."git@github.com:".insteadOf https://github.com/ + git config --global url."git@github.com:".insteadOf https://github.com/ git config --global user.email "60093411+ory-bot@users.noreply.github.com" git config --global user.name "ory-bot" } From 3d090462dcece0b8f49950569b54a8ad4f816de0 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:03:46 +0100 Subject: [PATCH 140/164] fix: add ci to ignore --- scripts/sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 87a499d..5a8e2ab 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -97,6 +97,7 @@ function replicate_all { declare -a exclusion_list=( "meta" + "ci" ".github" ) From 290eaf2a4e8d2ba2df42517f034e79ff8c2f250e Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:07:00 +0100 Subject: [PATCH 141/164] ci: set up ssh on test --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99c4d9a..1a7a024 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,6 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.4.1 + with: + ssh-private-key: ${{ secrets.ORY_BOT_SSH_KEY }} - run: make test - name: Dry-run the sync run: | From ac431a5595fbcbcfc33de29e2cd5d7ae8560ab05 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:32:39 +0100 Subject: [PATCH 142/164] fix: print repos --- scripts/sync.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 5a8e2ab..262e671 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -101,7 +101,12 @@ function replicate_all { ".github" ) - gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name' | while read -r repo_name; do + repos=$(gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name') + echo "Found repositories:" + echo $repos + echo "---" + + $repos | while read -r repo_name; do # Check if the repository is in the exclusion list for excluded_repo in "${exclusion_list[@]}"; do if [[ "$repo_name" == "$excluded_repo" ]]; then From a0bf0b3c2d0155e9925c25dccfcc65cc594fbebd Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:33:10 +0100 Subject: [PATCH 143/164] feat: add sdk to ignore --- scripts/sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 262e671..23a92e8 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -98,6 +98,7 @@ function replicate_all { declare -a exclusion_list=( "meta" "ci" + "sdk" ".github" ) From 6325e1674c70d9f6d705f49c215a8db8bc86ce90 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:33:27 +0100 Subject: [PATCH 144/164] feat: remove sdk from ignore --- scripts/sync.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 23a92e8..262e671 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -98,7 +98,6 @@ function replicate_all { declare -a exclusion_list=( "meta" "ci" - "sdk" ".github" ) From 06be3c51b50c5e6d1658b45e6a6223898444071f Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:36:26 +0100 Subject: [PATCH 145/164] fix: add missing echo --- scripts/sync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 262e671..f9c1f54 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -102,11 +102,11 @@ function replicate_all { ) repos=$(gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name') + echo "Found repositories:" echo $repos - echo "---" - $repos | while read -r repo_name; do + echo $repos | while read -r repo_name; do # Check if the repository is in the exclusion list for excluded_repo in "${exclusion_list[@]}"; do if [[ "$repo_name" == "$excluded_repo" ]]; then From b3e139adc5e0583f7688ea344e2d44e80ab09564 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:38:52 +0100 Subject: [PATCH 146/164] fix: don't fail immediately on push error --- scripts/sync.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index f9c1f54..71d1418 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash set -Eexuo pipefail # abort the script on error +# Array to collect errors +declare -a errors + # replicate shared data from this repo into all repositories at Ory function replicate_all { # verify arguments @@ -119,6 +122,15 @@ function replicate_all { repo_type=${type_map[$repo_name]:-library} replicate "ory/$repo_name" "$repo_type" "$human_name" "$workspace" "$persist" done + + # Check for errors and exit with a non-zero status if any errors were collected + if [ ${#errors[@]} -ne 0 ]; then + echo "Errors occurred during git push:" + for error in "${errors[@]}"; do + echo "$error" + done + exit 1 + fi } # replicates the info in this repository into the given target repository @@ -304,7 +316,9 @@ function push_changes { local -r repo_path=$1 ( cd "$repo_path" - git push + if ! git push; then + errors+=("Failed to push changes for $repo_path") + fi ) } From 763e4c1c28fc176232e3efe827a0b622313f7dea Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:40:39 +0100 Subject: [PATCH 147/164] fix: remove gh repo list print out --- scripts/sync.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 71d1418..6f38aeb 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -104,12 +104,7 @@ function replicate_all { ".github" ) - repos=$(gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name') - - echo "Found repositories:" - echo $repos - - echo $repos | while read -r repo_name; do + gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name' | while read -r repo_name; do # Check if the repository is in the exclusion list for excluded_repo in "${exclusion_list[@]}"; do if [[ "$repo_name" == "$excluded_repo" ]]; then From a5e8b9ab819fac595e44e18edefcfb1363f9a021 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:53:28 +0100 Subject: [PATCH 148/164] fix: unbound variable --- scripts/sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index 6f38aeb..f332433 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -2,7 +2,7 @@ set -Eexuo pipefail # abort the script on error # Array to collect errors -declare -a errors +declare -a errors=() # replicate shared data from this repo into all repositories at Ory function replicate_all { From 6dd58197127fcc22f1602fe2481e65e3fb356441 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 11:28:48 +0100 Subject: [PATCH 149/164] fix: set git actor --- templates/repository/common/.github/workflows/licenses.yml | 6 ++++++ templates/repository/server/.github/workflows/milestone.yml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index 8bb143b..bc9ea02 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -23,3 +23,9 @@ jobs: if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }} + with: + author-email: + ${{ secrets.ORY_BOT_PAT && + '60093411+ory-bot@users.noreply.github.com' || github.actor + + '@users.noreply.github.com' }} + author-name: ${{ secrets.ORY_BOT_PAT && 'ory-bot' || github.actor }} diff --git a/templates/repository/server/.github/workflows/milestone.yml b/templates/repository/server/.github/workflows/milestone.yml index fb47e4a..6a5201e 100644 --- a/templates/repository/server/.github/workflows/milestone.yml +++ b/templates/repository/server/.github/workflows/milestone.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: token: ${{ secrets.TOKEN_PRIVILEGED }} - name: Milestone Documentation Generator From cb2a20fceb295da97a8988e4947a3555b3f026a8 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Tue, 31 Dec 2024 11:39:20 +0100 Subject: [PATCH 150/164] fix: license script --- templates/repository/common/.github/workflows/licenses.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index bc9ea02..9431aee 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -26,6 +26,6 @@ jobs: with: author-email: ${{ secrets.ORY_BOT_PAT && - '60093411+ory-bot@users.noreply.github.com' || github.actor + - '@users.noreply.github.com' }} + '60093411+ory-bot@users.noreply.github.com' || + format('{0}@users.noreply.github.com', github.actor) }} author-name: ${{ secrets.ORY_BOT_PAT && 'ory-bot' || github.actor }} From c091d7964885eaf0458fca234bf3521ffc4bc43b Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:09:06 +0100 Subject: [PATCH 151/164] fix: add dockertest v3 path --- templates/repository/common/.github/workflows/licenses.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index 9431aee..2285fda 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -22,7 +22,7 @@ jobs: uses: ory/ci/licenses/write@master if: ${{ github.ref == 'refs/heads/main' || github.ref == - 'refs/heads/master' }} + 'refs/heads/master' || github.ref == 'refs/heads/v3' }} with: author-email: ${{ secrets.ORY_BOT_PAT && From 44efd83ab7aab755d07b60db9049091bd8ad2533 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:11:28 +0100 Subject: [PATCH 152/164] fix: add missing v3 branch --- templates/repository/common/.github/workflows/licenses.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index 2285fda..1c5ec9e 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -6,6 +6,7 @@ on: branches: - main - master + - v3 jobs: licenses: From 83e71e6e97a5eab38bede33eceef40d550d1fe6e Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 2 Jan 2025 14:54:21 +0100 Subject: [PATCH 153/164] ci: trigger --- templates/repository/common/.github/workflows/licenses.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/common/.github/workflows/licenses.yml b/templates/repository/common/.github/workflows/licenses.yml index 1c5ec9e..d6fd4ba 100644 --- a/templates/repository/common/.github/workflows/licenses.yml +++ b/templates/repository/common/.github/workflows/licenses.yml @@ -5,8 +5,8 @@ on: push: branches: - main - - master - v3 + - master jobs: licenses: From 013cf4a7e38a06b063f2ab485a3c8f73c856963e Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Thu, 2 Jan 2025 16:31:55 +0100 Subject: [PATCH 154/164] fix: add licenses --- .github/workflows/licenses.yml | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index 9ef147d..d6fd4ba 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -5,17 +5,28 @@ on: push: branches: - main + - v3 - master jobs: - check: + licenses: + name: License compliance runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + - name: Install script + uses: ory/ci/licenses/setup@master with: - go-version: "1.18" - - uses: actions/setup-node@v2 + token: ${{ secrets.ORY_BOT_PAT || secrets.GITHUB_TOKEN }} + - name: Check licenses + uses: ory/ci/licenses/check@master + - name: Write, commit, push licenses + uses: ory/ci/licenses/write@master + if: + ${{ github.ref == 'refs/heads/main' || github.ref == + 'refs/heads/master' || github.ref == 'refs/heads/v3' }} with: - node-version: "18.10" - - run: make licenses + author-email: + ${{ secrets.ORY_BOT_PAT && + '60093411+ory-bot@users.noreply.github.com' || + format('{0}@users.noreply.github.com', github.actor) }} + author-name: ${{ secrets.ORY_BOT_PAT && 'ory-bot' || github.actor }} From e54ac5d59869341cc3ffb2e58fd8b0cba28ec7f7 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:00:43 +0100 Subject: [PATCH 155/164] fix: remove hydra workaround --- .../repository/server/.github/workflows/cve-scan.yaml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/templates/repository/server/.github/workflows/cve-scan.yaml b/templates/repository/server/.github/workflows/cve-scan.yaml index b1335ce..47e6692 100644 --- a/templates/repository/server/.github/workflows/cve-scan.yaml +++ b/templates/repository/server/.github/workflows/cve-scan.yaml @@ -28,14 +28,7 @@ jobs: SHA_SHORT=$(git rev-parse --short HEAD) REPO_NAME=${{ github.event.repository.name }} - # Append -sqlite to SHA_SHORT if repo is hydra - if [ "${REPO_NAME}" = "hydra" ]; then - echo "Repo is hydra, appending -sqlite to SHA_SHORT" - IMAGE_NAME="oryd/${REPO_NAME}:${SHA_SHORT}-sqlite" - else - echo "Repo is not hydra, using default IMAGE_NAME" - IMAGE_NAME="oryd/${REPO_NAME}:${SHA_SHORT}" - fi + IMAGE_NAME="oryd/${REPO_NAME}:${SHA_SHORT}" # Output values for debugging echo "Values to be set:" From bc603a639a8b300ffed3cf80197d3839969d7ef9 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 12 Mar 2025 13:08:12 -0300 Subject: [PATCH 156/164] chore: update CONTRIBUTING.md (#229) * chore: update CONTRIBUTING.md * chore: format * chore: fix toc * chore: update sync.sh --- scripts/sync.sh | 2 +- templates/repository/common/CONTRIBUTING.md | 32 +++++---------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/scripts/sync.sh b/scripts/sync.sh index f332433..9889459 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -42,7 +42,7 @@ function replicate_all { ["label-sync-action"]="Label Sync Action" ["milestone-action"]="Milestone Action" ["build-buf-action"]="Buildbuf Action" - ["examples"]="Examples" + ["awesome-ory"]="Awesome Ory" ["hydra-maester"]="Ory Hydra Maester" ["oathkeeper-maester"]="Ory Oathkeeper Maester" ["sdk"]="Ory SDK" diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index 010685e..ab473da 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -7,7 +7,7 @@ - [FAQ](#faq) - [How can I contribute?](#how-can-i-contribute) - [Communication](#communication) -- [Contribute examples](#contribute-examples) +- [Contribute examples or community projects](#contribute-examples-or-community-projects) - [Contribute code](#contribute-code) - [Contribute documentation](#contribute-documentation) - [Disclosing vulnerabilities](#disclosing-vulnerabilities) @@ -122,34 +122,16 @@ the projects that you are interested in. Also, [follow us on Twitter](https://twitter.com/orycorp). -## Contribute examples +## Contribute examples or community projects -One of the most impactful ways to contribute is by adding examples. You can find -an overview of examples using Ory services on the -[documentation examples page](https://www.ory.sh/docs/examples). Source code for -examples can be found in most cases in the -[ory/examples](https://github.com/ory/examples) repository. +One of the most impactful ways to contribute is by adding code examples or other +Ory-related code. You can find an overview of community code in the +[awesome-ory](https://github.com/ory/awesome-ory) repository. _If you would like to contribute a new example, we would love to hear from you!_ -Please [open an issue](https://github.com/ory/examples/issues/new/choose) to -describe your example before you start working on it. We would love to provide -guidance to make for a pleasant contribution experience. Go through this -checklist to contribute an example: - -1. Create a GitHub issue proposing a new example and make sure it's different - from an existing one. -1. Fork the repo and create a feature branch off of `master` so that changes do - not get mixed up. -1. Add a descriptive prefix to commits. This ensures a uniform commit history - and helps structure the changelog. Please refer to this - [Convential Commits configuration](https://github.com/$REPOSITORY/blob/master/.github/workflows/conventional_commits.yml) - for the list of accepted prefixes. You can read more about the Conventional - Commit specification - [at their site](https://www.conventionalcommits.org/en/v1.0.0/). -1. Create a `README.md` that explains how to use the example. (Use - [the README template](https://github.com/ory/examples/blob/master/_common/README.md)). -1. Open a pull request and maintainers will review and merge your example. +Please [open a pull request at awesome-ory](https://github.com/ory/awesome-ory/) +to add your example or Ory-related project to the awesome-ory README. ## Contribute code From d919e6f6e8c850524513abd42478dea7987b99c0 Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 17 Mar 2025 06:58:30 -0300 Subject: [PATCH 157/164] fix: update ADOPTERS.md (#230) --- static/adopters/dark/axelspringer.svg | 16 + static/adopters/dark/booster.svg | 3 + static/adopters/dark/cisco.svg | 18 + static/adopters/dark/commitzero.svg | 3 - static/adopters/dark/connctd.svg | 86 ---- static/adopters/dark/fandom.svg | 8 + static/adopters/dark/hanko.svg | 18 - static/adopters/dark/hemnet.svg | 5 + static/adopters/dark/hgv.svg | 4 + static/adopters/dark/klarna.svg | 12 + static/adopters/dark/lunasec.svg | 8 - static/adopters/dark/maxroll.svg | 11 + static/adopters/dark/mistral.svg | 44 +++ static/adopters/dark/moonpig.svg | 3 + static/adopters/dark/openai.svg | 9 + static/adopters/dark/osint.svg | 7 + static/adopters/dark/republica-dominicana.svg | 57 +++ static/adopters/dark/reyah.svg | 5 - static/adopters/dark/sencrop.svg | 4 + static/adopters/dark/spiribo.svg | 82 ---- static/adopters/dark/stackspin.svg | 32 -- static/adopters/dark/strivacity.svg | 3 - static/adopters/dark/troweprice.svg | 5 + static/adopters/dark/zaptec.svg | 4 + static/adopters/dark/zezam.svg | 3 + static/adopters/light/axelspringer.svg | 16 + static/adopters/light/booster.svg | 3 + static/adopters/light/cisco.svg | 18 + static/adopters/light/commitzero.svg | 10 - static/adopters/light/connctd.svg | 9 - static/adopters/light/fandom.svg | 8 + static/adopters/light/hanko.svg | 18 - static/adopters/light/hemnet.svg | 5 + static/adopters/light/hgv.svg | 4 + static/adopters/light/klarna.svg | 12 + static/adopters/light/lumin.svg | 14 + static/adopters/light/lunasec.svg | 8 - static/adopters/light/maxroll.svg | 11 + static/adopters/light/mistral.svg | 44 +++ static/adopters/light/moonpig.svg | 3 + static/adopters/light/openai.svg | 9 + static/adopters/light/osint.svg | 7 + .../adopters/light/republica-dominicana.svg | 57 +++ static/adopters/light/reyah.svg | 5 - static/adopters/light/sencrop.svg | 4 + static/adopters/light/spiribo.svg | 34 -- static/adopters/light/stackspin.svg | 32 -- static/adopters/light/strivacity.svg | 10 - static/adopters/light/troweprice.svg | 8 + static/adopters/light/zaptec.svg | 4 + static/adopters/light/zezam.svg | 3 + templates/repository/common/ADOPTERS.md | 366 +++++++----------- 52 files changed, 587 insertions(+), 585 deletions(-) create mode 100644 static/adopters/dark/axelspringer.svg create mode 100644 static/adopters/dark/booster.svg create mode 100644 static/adopters/dark/cisco.svg delete mode 100644 static/adopters/dark/commitzero.svg delete mode 100644 static/adopters/dark/connctd.svg create mode 100644 static/adopters/dark/fandom.svg delete mode 100644 static/adopters/dark/hanko.svg create mode 100644 static/adopters/dark/hemnet.svg create mode 100644 static/adopters/dark/hgv.svg create mode 100644 static/adopters/dark/klarna.svg delete mode 100644 static/adopters/dark/lunasec.svg create mode 100644 static/adopters/dark/maxroll.svg create mode 100644 static/adopters/dark/mistral.svg create mode 100644 static/adopters/dark/moonpig.svg create mode 100644 static/adopters/dark/openai.svg create mode 100644 static/adopters/dark/osint.svg create mode 100644 static/adopters/dark/republica-dominicana.svg delete mode 100644 static/adopters/dark/reyah.svg create mode 100644 static/adopters/dark/sencrop.svg delete mode 100644 static/adopters/dark/spiribo.svg delete mode 100644 static/adopters/dark/stackspin.svg delete mode 100644 static/adopters/dark/strivacity.svg create mode 100644 static/adopters/dark/troweprice.svg create mode 100644 static/adopters/dark/zaptec.svg create mode 100644 static/adopters/dark/zezam.svg create mode 100644 static/adopters/light/axelspringer.svg create mode 100644 static/adopters/light/booster.svg create mode 100644 static/adopters/light/cisco.svg delete mode 100755 static/adopters/light/commitzero.svg delete mode 100755 static/adopters/light/connctd.svg create mode 100644 static/adopters/light/fandom.svg delete mode 100755 static/adopters/light/hanko.svg create mode 100644 static/adopters/light/hemnet.svg create mode 100644 static/adopters/light/hgv.svg create mode 100644 static/adopters/light/klarna.svg create mode 100644 static/adopters/light/lumin.svg delete mode 100644 static/adopters/light/lunasec.svg create mode 100644 static/adopters/light/maxroll.svg create mode 100644 static/adopters/light/mistral.svg create mode 100644 static/adopters/light/moonpig.svg create mode 100644 static/adopters/light/openai.svg create mode 100644 static/adopters/light/osint.svg create mode 100644 static/adopters/light/republica-dominicana.svg delete mode 100755 static/adopters/light/reyah.svg create mode 100644 static/adopters/light/sencrop.svg delete mode 100755 static/adopters/light/spiribo.svg delete mode 100644 static/adopters/light/stackspin.svg delete mode 100755 static/adopters/light/strivacity.svg create mode 100644 static/adopters/light/troweprice.svg create mode 100644 static/adopters/light/zaptec.svg create mode 100644 static/adopters/light/zezam.svg diff --git a/static/adopters/dark/axelspringer.svg b/static/adopters/dark/axelspringer.svg new file mode 100644 index 0000000..8dd7205 --- /dev/null +++ b/static/adopters/dark/axelspringer.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/adopters/dark/booster.svg b/static/adopters/dark/booster.svg new file mode 100644 index 0000000..6340b3d --- /dev/null +++ b/static/adopters/dark/booster.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/dark/cisco.svg b/static/adopters/dark/cisco.svg new file mode 100644 index 0000000..f0b4e1b --- /dev/null +++ b/static/adopters/dark/cisco.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/dark/commitzero.svg b/static/adopters/dark/commitzero.svg deleted file mode 100644 index abf6530..0000000 --- a/static/adopters/dark/commitzero.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/adopters/dark/connctd.svg b/static/adopters/dark/connctd.svg deleted file mode 100644 index 8ca9b48..0000000 --- a/static/adopters/dark/connctd.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - diff --git a/static/adopters/dark/fandom.svg b/static/adopters/dark/fandom.svg new file mode 100644 index 0000000..f24192d --- /dev/null +++ b/static/adopters/dark/fandom.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/adopters/dark/hanko.svg b/static/adopters/dark/hanko.svg deleted file mode 100644 index 26133db..0000000 --- a/static/adopters/dark/hanko.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/dark/hemnet.svg b/static/adopters/dark/hemnet.svg new file mode 100644 index 0000000..95cc6c5 --- /dev/null +++ b/static/adopters/dark/hemnet.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/adopters/dark/hgv.svg b/static/adopters/dark/hgv.svg new file mode 100644 index 0000000..de8cfea --- /dev/null +++ b/static/adopters/dark/hgv.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/dark/klarna.svg b/static/adopters/dark/klarna.svg new file mode 100644 index 0000000..59a239f --- /dev/null +++ b/static/adopters/dark/klarna.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/adopters/dark/lunasec.svg b/static/adopters/dark/lunasec.svg deleted file mode 100644 index c98f1e1..0000000 --- a/static/adopters/dark/lunasec.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/static/adopters/dark/maxroll.svg b/static/adopters/dark/maxroll.svg new file mode 100644 index 0000000..b870d7c --- /dev/null +++ b/static/adopters/dark/maxroll.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/adopters/dark/mistral.svg b/static/adopters/dark/mistral.svg new file mode 100644 index 0000000..63e0268 --- /dev/null +++ b/static/adopters/dark/mistral.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/dark/moonpig.svg b/static/adopters/dark/moonpig.svg new file mode 100644 index 0000000..da93f94 --- /dev/null +++ b/static/adopters/dark/moonpig.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/dark/openai.svg b/static/adopters/dark/openai.svg new file mode 100644 index 0000000..902e0f4 --- /dev/null +++ b/static/adopters/dark/openai.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/adopters/dark/osint.svg b/static/adopters/dark/osint.svg new file mode 100644 index 0000000..dcbaa94 --- /dev/null +++ b/static/adopters/dark/osint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/adopters/dark/republica-dominicana.svg b/static/adopters/dark/republica-dominicana.svg new file mode 100644 index 0000000..ab16899 --- /dev/null +++ b/static/adopters/dark/republica-dominicana.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/dark/reyah.svg b/static/adopters/dark/reyah.svg deleted file mode 100644 index 5f46764..0000000 --- a/static/adopters/dark/reyah.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/static/adopters/dark/sencrop.svg b/static/adopters/dark/sencrop.svg new file mode 100644 index 0000000..667062d --- /dev/null +++ b/static/adopters/dark/sencrop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/dark/spiribo.svg b/static/adopters/dark/spiribo.svg deleted file mode 100644 index faa9d82..0000000 --- a/static/adopters/dark/spiribo.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/dark/stackspin.svg b/static/adopters/dark/stackspin.svg deleted file mode 100644 index 0f9d777..0000000 --- a/static/adopters/dark/stackspin.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/dark/strivacity.svg b/static/adopters/dark/strivacity.svg deleted file mode 100644 index cb75f25..0000000 --- a/static/adopters/dark/strivacity.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/adopters/dark/troweprice.svg b/static/adopters/dark/troweprice.svg new file mode 100644 index 0000000..9dc24b9 --- /dev/null +++ b/static/adopters/dark/troweprice.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/adopters/dark/zaptec.svg b/static/adopters/dark/zaptec.svg new file mode 100644 index 0000000..0893366 --- /dev/null +++ b/static/adopters/dark/zaptec.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/dark/zezam.svg b/static/adopters/dark/zezam.svg new file mode 100644 index 0000000..fe60396 --- /dev/null +++ b/static/adopters/dark/zezam.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/light/axelspringer.svg b/static/adopters/light/axelspringer.svg new file mode 100644 index 0000000..e62e0bd --- /dev/null +++ b/static/adopters/light/axelspringer.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/booster.svg b/static/adopters/light/booster.svg new file mode 100644 index 0000000..58db620 --- /dev/null +++ b/static/adopters/light/booster.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/light/cisco.svg b/static/adopters/light/cisco.svg new file mode 100644 index 0000000..386cca0 --- /dev/null +++ b/static/adopters/light/cisco.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/commitzero.svg b/static/adopters/light/commitzero.svg deleted file mode 100755 index 7cae060..0000000 --- a/static/adopters/light/commitzero.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/adopters/light/connctd.svg b/static/adopters/light/connctd.svg deleted file mode 100755 index 7962db7..0000000 --- a/static/adopters/light/connctd.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/static/adopters/light/fandom.svg b/static/adopters/light/fandom.svg new file mode 100644 index 0000000..c765be1 --- /dev/null +++ b/static/adopters/light/fandom.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/adopters/light/hanko.svg b/static/adopters/light/hanko.svg deleted file mode 100755 index a11488a..0000000 --- a/static/adopters/light/hanko.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/light/hemnet.svg b/static/adopters/light/hemnet.svg new file mode 100644 index 0000000..0a79f0d --- /dev/null +++ b/static/adopters/light/hemnet.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/adopters/light/hgv.svg b/static/adopters/light/hgv.svg new file mode 100644 index 0000000..57302eb --- /dev/null +++ b/static/adopters/light/hgv.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/light/klarna.svg b/static/adopters/light/klarna.svg new file mode 100644 index 0000000..c217036 --- /dev/null +++ b/static/adopters/light/klarna.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/adopters/light/lumin.svg b/static/adopters/light/lumin.svg new file mode 100644 index 0000000..32bdcad --- /dev/null +++ b/static/adopters/light/lumin.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/adopters/light/lunasec.svg b/static/adopters/light/lunasec.svg deleted file mode 100644 index 4e15008..0000000 --- a/static/adopters/light/lunasec.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/static/adopters/light/maxroll.svg b/static/adopters/light/maxroll.svg new file mode 100644 index 0000000..d650982 --- /dev/null +++ b/static/adopters/light/maxroll.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/adopters/light/mistral.svg b/static/adopters/light/mistral.svg new file mode 100644 index 0000000..2c3b783 --- /dev/null +++ b/static/adopters/light/mistral.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/moonpig.svg b/static/adopters/light/moonpig.svg new file mode 100644 index 0000000..fce23bd --- /dev/null +++ b/static/adopters/light/moonpig.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/adopters/light/openai.svg b/static/adopters/light/openai.svg new file mode 100644 index 0000000..ec5298c --- /dev/null +++ b/static/adopters/light/openai.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/adopters/light/osint.svg b/static/adopters/light/osint.svg new file mode 100644 index 0000000..ce517dc --- /dev/null +++ b/static/adopters/light/osint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/adopters/light/republica-dominicana.svg b/static/adopters/light/republica-dominicana.svg new file mode 100644 index 0000000..8536edf --- /dev/null +++ b/static/adopters/light/republica-dominicana.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/adopters/light/reyah.svg b/static/adopters/light/reyah.svg deleted file mode 100755 index e911b8b..0000000 --- a/static/adopters/light/reyah.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/static/adopters/light/sencrop.svg b/static/adopters/light/sencrop.svg new file mode 100644 index 0000000..e4d4a65 --- /dev/null +++ b/static/adopters/light/sencrop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/light/spiribo.svg b/static/adopters/light/spiribo.svg deleted file mode 100755 index b27009f..0000000 --- a/static/adopters/light/spiribo.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/light/stackspin.svg b/static/adopters/light/stackspin.svg deleted file mode 100644 index 2ca6bd8..0000000 --- a/static/adopters/light/stackspin.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/adopters/light/strivacity.svg b/static/adopters/light/strivacity.svg deleted file mode 100755 index 3f6b890..0000000 --- a/static/adopters/light/strivacity.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/static/adopters/light/troweprice.svg b/static/adopters/light/troweprice.svg new file mode 100644 index 0000000..30b54e0 --- /dev/null +++ b/static/adopters/light/troweprice.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/adopters/light/zaptec.svg b/static/adopters/light/zaptec.svg new file mode 100644 index 0000000..5592e3b --- /dev/null +++ b/static/adopters/light/zaptec.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/adopters/light/zezam.svg b/static/adopters/light/zezam.svg new file mode 100644 index 0000000..0e13d19 --- /dev/null +++ b/static/adopters/light/zezam.svg @@ -0,0 +1,3 @@ + + + diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index ff598b8..a67bb0c 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -3,10 +3,9 @@ The Ory community stands on the shoulders of individuals, companies, and maintainers. The Ory team thanks everyone involved - from submitting bug reports and feature requests, to contributing patches and documentation. The Ory -community counts more than 33.000 members and is growing rapidly. The Ory stack -protects 60.000.000.000+ API requests every month with over 400.000+ active -service nodes. None of this would have been possible without each and everyone -of you! +community counts more than 50.000 members and is growing. The Ory stack protects +7.000.000.000+ API requests every day across thousands of companies. None of +this would have been possible without each and everyone of you! The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our ecosystem. _If you think @@ -16,370 +15,293 @@ that your company deserves a spot here, reach out to - + - - - - - - - - - - - - - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
Type Name Logo WebsiteCase Study
Adopter *Raspberry PI Foundation - - - Raspberry PI Foundation - - raspberrypi.org
Adopter *Kyma Project - - - Kyma Project - - kyma-project.io
Adopter *TulipOpenAI - - Tulip Retail + + OpenAI tulip.comopenai.comOpenAI Case Study
Adopter *Cashdeck / All My FundsFandom - - All My Funds + + Fandom cashdeck.com.aufandom.comFandom Case Study
Adopter *HootsuiteLumin - - Hootsuite + + Lumin hootsuite.comluminpdf.comLumin Case Study
Adopter *SegmentSencrop - - Segment + + Sencrop segment.comsencrop.comSencrop Case Study
Adopter *ArduinoOSINT Industries - - Arduino + + OSINT Industries arduino.ccosint.industriesOSINT Industries Case Study
Adopter *DataDetectHGV - - Datadetect + + HGV unifiedglobalarchiving.com/data-detect/hgv.itHGV Case Study
Adopter *Sainsbury'sMaxroll - - Sainsbury's + + Maxroll sainsburys.co.ukmaxroll.ggMaxroll Case Study
Adopter *ContrasteZezam - - Contraste + + Zezam contraste.comzezam.ioZezam Case Study
Adopter *ReyahT.RowePrice - - Reyah + + T.RowePrice reyah.eutroweprice.com
Adopter *ZeroMistral - - Project Zero by Commit + + Mistral getzero.devmistral.ai
Adopter *PadisAxel Springer - - Padis + + Axel Springer padis.ioaxelspringer.com
Adopter *CloudbearHemnet - - Cloudbear + + Hemnet cloudbear.euhemnet.se
Adopter *Security Onion SolutionsCisco - - Security Onion Solutions + + Cisco securityonionsolutions.comcisco.com
Adopter *FactlyPresidencia de la RepĂşblica Dominicana - - Factly + + Presidencia de la RepĂşblica Dominicana factlylabs.compresidencia.gob.do
Adopter *NortalMoonpig - - Nortal + + Moonpig nortal.commoonpig.com
Adopter *OrderMyGearBooster - - OrderMyGear + + Booster ordermygear.comchoosebooster.com
Adopter *Spiri.boZaptec - - Spiri.bo + + Zaptec spiri.bozaptec.com
Adopter *StrivacityKlarna - - Spiri.bo + + Klarna strivacity.comklarna.com
Adopter *HankoRaspberry PI Foundation - - Hanko + + Raspberry PI Foundation hanko.ioraspberrypi.org
Adopter *RabbitTulip - - Rabbit + + Tulip Retail rabbit.co.thtulip.com
Adopter *inMusicHootsuite - - InMusic + + Hootsuite inmusicbrands.comhootsuite.com
Adopter *BuhtaSegment - - Buhta + + Segment buhta.comsegment.com
Adopter *ConnctdArduino - - Connctd + + Arduino connctd.comarduino.cc
Adopter *ParalusSainsbury's - - Paralus + + Sainsbury's paralus.iosainsburys.co.uk
Adopter *TIER IVContraste - - TIER IV + + Contraste tier4.jpcontraste.com
Adopter *R2DevopsinMusic - - R2Devops + + InMusic r2devops.ioinmusicbrands.com
Adopter *LunaSec - - - LunaSec - - lunasec.io
Adopter *Serlo - - - Serlo - - serlo.org
Adopter *dyrector.io - - - dyrector.io - - dyrector.io
Adopter *StackspinBuhta - - stackspin.net + + Buhta stackspin.netbuhta.com
Adopter * Amplitude @@ -389,28 +311,30 @@ that your company deserves a spot here, reach out to amplitude.com
Adopter *Pinniped - - - pinniped.dev - - pinniped.dev
Adopter *Pvotal - - - pvotal.tech - - pvotal.tech
TIER IVKyma ProjectSerloPadis
CloudbearSecurity Onion SolutionsFactlyAll My Funds
NortalOrderMyGearR2DevopsParalus
dyrector.iopinniped.devpvotal.tech
@@ -418,6 +342,4 @@ Many thanks to all individual contributors -\* Uses one of Ory's major projects in production. - From fc1b4d66bcc436d1caa7b16777e093b1eca63cde Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 17 Mar 2025 08:10:39 -0300 Subject: [PATCH 158/164] fix: logos adopters (#231) --- templates/repository/common/ADOPTERS.md | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index a67bb0c..96d7305 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -26,7 +26,7 @@ that your company deserves a spot here, reach out to OpenAI - + OpenAI @@ -37,7 +37,7 @@ that your company deserves a spot here, reach out to Fandom - + Fandom @@ -48,7 +48,7 @@ that your company deserves a spot here, reach out to Lumin - + Lumin @@ -59,7 +59,7 @@ that your company deserves a spot here, reach out to Sencrop - + Sencrop @@ -70,7 +70,7 @@ that your company deserves a spot here, reach out to OSINT Industries - + OSINT Industries @@ -81,7 +81,7 @@ that your company deserves a spot here, reach out to HGV - + HGV @@ -92,7 +92,7 @@ that your company deserves a spot here, reach out to Maxroll - + Maxroll @@ -103,7 +103,7 @@ that your company deserves a spot here, reach out to Zezam - + Zezam @@ -114,7 +114,7 @@ that your company deserves a spot here, reach out to T.RowePrice - + T.RowePrice @@ -124,7 +124,7 @@ that your company deserves a spot here, reach out to Mistral - + Mistral @@ -134,7 +134,7 @@ that your company deserves a spot here, reach out to Axel Springer - + Axel Springer @@ -144,7 +144,7 @@ that your company deserves a spot here, reach out to Hemnet - + Hemnet @@ -154,7 +154,7 @@ that your company deserves a spot here, reach out to Cisco - + Cisco @@ -164,7 +164,7 @@ that your company deserves a spot here, reach out to Presidencia de la RepĂşblica Dominicana - + Presidencia de la RepĂşblica Dominicana @@ -174,7 +174,7 @@ that your company deserves a spot here, reach out to Moonpig - + Moonpig @@ -184,7 +184,7 @@ that your company deserves a spot here, reach out to Booster - + Booster @@ -194,7 +194,7 @@ that your company deserves a spot here, reach out to Zaptec - + Zaptec @@ -204,7 +204,7 @@ that your company deserves a spot here, reach out to Klarna - + Klarna From cab1d56457667cd377cfd3bc7e36f77f0594521b Mon Sep 17 00:00:00 2001 From: Vincent Date: Tue, 3 Jun 2025 16:02:48 +0200 Subject: [PATCH 159/164] chore: update logos (#236) --- static/logos/logo-hydra.svg | 19 ++++++------------- static/logos/logo-keto.svg | 18 ++++++------------ static/logos/logo-kratos.svg | 20 ++++++-------------- static/logos/logo-oathkeeper.svg | 24 ++++++------------------ static/logos/logo-polis.svg | 7 +++++++ 5 files changed, 31 insertions(+), 57 deletions(-) create mode 100644 static/logos/logo-polis.svg diff --git a/static/logos/logo-hydra.svg b/static/logos/logo-hydra.svg index 5999e95..9af3444 100644 --- a/static/logos/logo-hydra.svg +++ b/static/logos/logo-hydra.svg @@ -1,14 +1,7 @@ - - - - - - - - - - - - - + + + + + + diff --git a/static/logos/logo-keto.svg b/static/logos/logo-keto.svg index fd82c8b..f73a80e 100644 --- a/static/logos/logo-keto.svg +++ b/static/logos/logo-keto.svg @@ -1,13 +1,7 @@ - - - - - - - - - - - - + + + + + + diff --git a/static/logos/logo-kratos.svg b/static/logos/logo-kratos.svg index 8ea7011..2fab6e1 100644 --- a/static/logos/logo-kratos.svg +++ b/static/logos/logo-kratos.svg @@ -1,15 +1,7 @@ - - - - - - - - - - - - - - + + + + + + diff --git a/static/logos/logo-oathkeeper.svg b/static/logos/logo-oathkeeper.svg index 29c60b7..fcf9b19 100644 --- a/static/logos/logo-oathkeeper.svg +++ b/static/logos/logo-oathkeeper.svg @@ -1,19 +1,7 @@ - - - - - - - - - - - - - - - - - - + + + + + + diff --git a/static/logos/logo-polis.svg b/static/logos/logo-polis.svg new file mode 100644 index 0000000..1c25af0 --- /dev/null +++ b/static/logos/logo-polis.svg @@ -0,0 +1,7 @@ + + + + + + + From a74a88001b91994bd07d9d04dca49d89647c91d0 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Tue, 3 Jun 2025 19:47:48 +0200 Subject: [PATCH 160/164] fix: disable sync for monorepos (#235) * fix: disable sync for monorepos --- scripts/sync.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/sync.sh b/scripts/sync.sh index 9889459..116e8af 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -102,6 +102,17 @@ function replicate_all { "meta" "ci" ".github" + "hydra" + "keto" + "oathkeeper" + "kratos" + "elements" + "polis" + "x" + "fosite" + "kratos-selfservice-ui-node" + "kratos-selfservice-ui-react-native" + "kratos-selfservice-ui-react-nextjs" ) gh repo list ory --visibility public --no-archived --source --json name -L 1000 | jq -r '.[] | .name' | while read -r repo_name; do From 9ca43513cc7c74b69259c19707caded9f3a7c82c Mon Sep 17 00:00:00 2001 From: Jonas Hungershausen Date: Tue, 24 Jun 2025 09:28:42 -0400 Subject: [PATCH 161/164] chore: add updated elements logo (#238) --- static/logos/logo-elements.svg | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 static/logos/logo-elements.svg diff --git a/static/logos/logo-elements.svg b/static/logos/logo-elements.svg new file mode 100644 index 0000000..0232047 --- /dev/null +++ b/static/logos/logo-elements.svg @@ -0,0 +1,7 @@ + + + + + + + From c6bd2e09a60649324be437b4ea8bdb7e1a20725b Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 22 Oct 2025 12:50:00 -0300 Subject: [PATCH 162/164] chore: ory.com move (#241) * chore: delete ancient file * chore: update templates to ory.com --- community_hangouts.md | 318 ------------------ .../.github/ISSUE_TEMPLATE/BUG-REPORT.yml | 4 +- .../.github/ISSUE_TEMPLATE/DESIGN-DOC.yml | 4 +- .../ISSUE_TEMPLATE/FEATURE-REQUEST.yml | 4 +- .../common/.github/ISSUE_TEMPLATE/config.yml | 2 +- templates/repository/common/ADOPTERS.md | 16 +- .../repository/common/CODE_OF_CONDUCT.md | 4 +- templates/repository/common/CONTRIBUTING.md | 16 +- templates/repository/common/PROJECTS.md | 2 +- templates/repository/common/SECURITY.md | 4 +- .../library/.github/pull_request_template.md | 4 +- .../server/.github/pull_request_template.md | 4 +- 12 files changed, 32 insertions(+), 350 deletions(-) delete mode 100644 community_hangouts.md diff --git a/community_hangouts.md b/community_hangouts.md deleted file mode 100644 index 9d0548f..0000000 --- a/community_hangouts.md +++ /dev/null @@ -1,318 +0,0 @@ -# 07_10_2020_01 - -## Q&A - -### Question - -#### ORY Product: Oathkeeper, Keto - -#### Is there any way that we can change the Oathkeper flow? - -### Answer - -Write a pull request that submits the organizational structure that could be -part of Keto. It might be easier to ask for all the logic to be supported in -Keto. - -Look if Keto can support what you are looking for and if it does not support -that then make a feature request. Easier to pull off outside of Kratos. - -### Answer - -It should be possible, it should be a feature in Oathkeeper. If it is not -possible please open a feature request; it is a very common/good use case. - ---- - -### Question - -#### ORY Product: Oathkeeper - -#### Will there be multi domain support and multi domain login persistence? - -### Answer - -That is definitely something we are looking at. We need to figure out how to -implement this safely though. It will be a lot of work but it would be a very -important feature for us to have. - ---- - -### Question - -#### ORY Product: Hydra - -#### What is the reasoning between having two database tables? Would it not be easier to merge the tables into one ? What is the design decision behind that? - ---- - -# 07_10_2020_02 - -## Q&A - -### Question - -#### How do you generally approach a migration path, what can consumers of this library expect? - -### Answer - -We have extensive documentation on any breaking changes, if you sign up to the -newsletter you will get notified every time there is a new release. - -We have elaborate descriptions of all changes in the newsletter, or on github. -The changelogs are in the documentation and also on github. Also with guides how -to do the upgrade/migration. - -With helm charts its a manual process changing the version number at the moment. -We are looking to automate this in the near future. - -[k8s issue #180](https://github.com/ory/k8s/issues/180) - ---- - -### Question - -#### ORY Product: Kratos, Hydra, Oathkeeper - -#### Do you have plans to offer support the open source, selfhosted deployments? - -We have been using Oathkeeper & Kratos for Auth. We are interested in support, -but our customers dont allow SaaS in this regard. - -### Answer - -We will focus on the cloud offering, it is easy to scale, easier to support. But -this request comes often, and we do want to help companies in this position. - -We do want to offer solutions there so we could provide you with support in the -future. Best solution: Talk to [jared](mailto:jared@ory.sh), figure out what you -need and we will find a solution. - ---- - -### Question - -#### ORY Product: Hydra - -#### Is there a config to have Hydra respond to /api/hydra for example? - -I am deploying Hydra in Docker in AWS. I cant configure it to respond to a -specific URL, without route URL. - -### Answer - -Solution here is reverse proxy, like Oathkeeper. - -If you do not use a reverse proxy, you have to do it with path rewrite -currently. - ---- - -### Question - -#### Will ORY open source stay open source or become proprietary? - -### Answer - -All projects that are currently open source, will remain open source. We have a -commitment to open source, that we still need to publish. - -We will not go down the path of ElasticSearch. The monetization strategy that we -are following is running all the software as one consistent product with alot of -additional benefits as a cloud service. - -But the core building blocks will remain free and open source. As we use Linux -and Kubernetes, we also use the ORY stack - which is open source. - -We are also planning on having a foundation of sorts, but this is still in -planning. - ---- - -## Comments - -### Comment - -Next big assignment for Patrick is implementation of Google Sansibar paper. This -will allow us to deploy multi-region without significant latency. - ---- - -# 14_10_2020 - -## Q&A - -### Question - -#### ORY Project: Oathkeeper - -#### My biggest concern is this big refactor on Oathkeeper concerning the Hydrator, for example [Issue 441](https://github.com/ory/oathkeeper/issues/441) - -### Answer by Aeneas - -So the original hydrator was more or less like an interim solution for the -project and the idea was always to have a pipeline where you do authentication, -hydration, authorization and then mutation. - -So you've probably looked into the configuration system for remote Json, for -example, and I think its ultimately really not great to generate Json. So we -want to use JsonNet for all of the config stuff. And with the change we would -also introduce a new part to the pipeline, which would then be a dedicated -hydrator because I think it makes a lot of sense to add. Basically you get the -requests and then authenticate, add context, check for permissions and then you -take all of the data, massage it and put it into a token or something. - ---- - -### Question - -#### ORY Project: Kratos - -#### When are you expecting to release the 0.5 version of Kratos? - -### Answer - -The way we do release is slow because the pipelines sometimes a little bit flaky -when it comes to releases as we do pre-releases. So we do for example the -pre-release where we see if all the pipelines are working, if the build is -successful and if all the tests are successful for the build pipeline, the -binary in a Docker image ect. - -If that works and once that passes all tests we do the proper release. So the -fact that you're seeing the pre dot 0 release is a very good sign because it -means that we're working on it. Unfortunately the build didn't pass so so we -will be trying to figure out what's going on. - -You can expect the release maybe in the next hours, definitely this week. It -depends how difficult it is to figure out what's going on. - ---- - -### Question - -#### ORY Project: Kratos - -#### Is there any way to specify the schema_id to render the proper form inputs which belong to the specified schema? - -For example I have an employee and customer schema and I would like to be able -to specify the schema when registering a new account from the selfservice -endpoints or public API or anywhere else where I can create a user. - -More info in -[this thread](https://community.ory.sh/t/multiple-schemas-identities-seem-problematic/2251) - -### Answer - -So for registration, it's a little bit difficult because assume you have -customer schema and you have a admin schema. You don't really want someone who -signs up to be able to use the admin schema because they're not a regular user -or customer. - -I think the best idea probably would be to create an issue in the Kratos repo -and explain the use case and then we can discuss some ideas. - -Connected Issue: [kratos #765](https://github.com/ory/kratos/issues/765) - ---- - -## Comments - -# Comments/Feedback/Future Issues - -# 21_10_2020 - -## Q&A - -### Question - -We had to get used to the terminology and what all the different systems do -because there's quite a lot to the ecosystem. Could you give me a broad -overview? - -### Answer - -We started out with Hydra, which is the protocol layer for open authorization -and open ID connect. And the reason we started there was that we were doing a -cloud native file sharing application at the time and it just got really -difficult to interface with Dropbox and Google Cloud and so on. The Go Community -was not so so big back then and we just wanted to do something that would be -good for Go developers to use. - -But the deeper you get into open authorization and OAuth and OpenID Connect the -more complex it gets, the terminology, the structure of things, the processes or -flows. So we ended up completely redoing Hydra two times just because the more -we got into it, the more we knew and learned. - -Then probably the best place to start is with Kratos, which is how you build -your credentials, your username, password and all the flows around that. - -Alot of companies don't need auth and open ID connect because they're not using -cloud native services. So here Kratos is a great fit. I think it's really an -amazing utility, that we're soon going to offer as a cloud service also, by the -way. Then Hydra I just explained that, and also we have oathkeeper. Oathkeeper -is an implementation of Google beyondcorp reverse proxy plus some rules about -how and why to access API, so when you use Json web tokens against an API for -OAuth, there's a number of rules etc. It could be in the payload or it could be -just general rules about API access that you want to implement, so that's a zero -trust API access infrastructure. - -And last but not least there are different models out there for role-based -access management. For instance ORY Keto is an implementation basically -mimicking the AWS IAM. And now if you look at the newest sort of PR in the Keto -project we are tackling this at a much bigger level and implementing or trying -to implement something that Google calls Zanzibar, which is a more sort of very -low latency access management and role-based control system. So you write the -rules and we basically create an infrastructure that lets you manage that at -planet scale. - ---- - -### Question - -We are reading that jobs in Kratos are not being encouraged anymore. Why is -that? - -### Answer - -The reason for that is it's Hydra uses a special flavor of jobs before you get -to the API. The reason for that is to obfuscate some information and also make -it more compatible with some of the other security approaches we have including -oathkeeper, but when it's through the API it then turns into a normal Json web -token. So these are Open Standards, but they give you a lot of, let's say -flexibility, especially on how you want to configure the payload. - -nd they have a very simple structure, there's a record for how it's been made, -what algorithm the payload uses and the signature and we're not going to stray -far away from that at all because that's how you guarantee interoperability -amongst different systems. So we do take some liberties within Hydra of making -those tokens as it's called "ORY flavoured" until they get to the API. - -There's also some situations where it's not recommendable to use jobs. There's -actually lots of situations just because it's a new area and it's emerging. And -you know, there is not enough implementation experience with it. - -So if you have architectural questions and you want to ask them, you can do that -an issue or something else but be confident that we've had tons of conversations -about this and the implementation of Hydra is now over five years old. - ---- - -### Question - -Our main fear is that you guys might be closing or changing all the Open -Standards to some closed standard of security authorization. - -### Answer by Thomas - -We're not interested in violating those standards actually in any way because -that's the whole basis of our work too. I mean the IEEE standard and the IETF -standard and the w3c standard are our standards. That doesn't mean that the ORY -projects implement everything and by the way we implement a lot of things based -on how companies are using these things, but when we implement it it is exactly -in accordance with the standard. And the ORY open source projects too are the -codebase from that we build our products, so we are relying on them to stay open -source. - -## Comments - ---- diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml index b9c36a9..bf7dbab 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/BUG-REPORT.yml @@ -22,10 +22,10 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." + "I have joined the [Ory Community Slack](https://slack.ory.com)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + Newsletter](https://www.ory.com/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml index d6f29c7..79ebec6 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/DESIGN-DOC.yml @@ -33,10 +33,10 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." + "I have joined the [Ory Community Slack](https://slack.ory.com)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + Newsletter](https://www.ory.com/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml index e2bc92e..261d3fa 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/FEATURE-REQUEST.yml @@ -26,10 +26,10 @@ body: Guidelines](https://github.com/$REPOSITORY/blob/master/CONTRIBUTING.md)." required: true - label: - "I have joined the [Ory Community Slack](https://slack.ory.sh)." + "I have joined the [Ory Community Slack](https://slack.ory.com)." - label: "I am signed up to the [Ory Security Patch - Newsletter](https://www.ory.sh/l/sign-up-newsletter)." + Newsletter](https://www.ory.com/l/sign-up-newsletter)." id: checklist type: checkboxes - attributes: diff --git a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml index 02d86b3..4dab37c 100644 --- a/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml +++ b/templates/repository/common/.github/ISSUE_TEMPLATE/config.yml @@ -6,6 +6,6 @@ contact_links: Please ask and answer questions here, show your implementations and discuss ideas. - name: Ory Chat - url: https://www.ory.sh/chat + url: https://www.ory.com/chat about: Hang out with other Ory community members to ask and answer questions. diff --git a/templates/repository/common/ADOPTERS.md b/templates/repository/common/ADOPTERS.md index 96d7305..70530d7 100644 --- a/templates/repository/common/ADOPTERS.md +++ b/templates/repository/common/ADOPTERS.md @@ -31,7 +31,7 @@ that your company deserves a spot here, reach out to openai.com - OpenAI Case Study + OpenAI Case Study
Fandom @@ -42,7 +42,7 @@ that your company deserves a spot here, reach out to fandom.com - Fandom Case Study + Fandom Case Study
Lumin @@ -53,7 +53,7 @@ that your company deserves a spot here, reach out to luminpdf.com - Lumin Case Study + Lumin Case Study
Sencrop @@ -64,7 +64,7 @@ that your company deserves a spot here, reach out to sencrop.com - Sencrop Case Study + Sencrop Case Study
OSINT Industries @@ -75,7 +75,7 @@ that your company deserves a spot here, reach out to osint.industries - OSINT Industries Case Study + OSINT Industries Case Study
HGV @@ -86,7 +86,7 @@ that your company deserves a spot here, reach out to hgv.it - HGV Case Study + HGV Case Study
Maxroll @@ -97,7 +97,7 @@ that your company deserves a spot here, reach out to maxroll.gg - Maxroll Case Study + Maxroll Case Study
Zezam @@ -108,7 +108,7 @@ that your company deserves a spot here, reach out to zezam.io - Zezam Case Study + Zezam Case Study
T.RowePrice diff --git a/templates/repository/common/CODE_OF_CONDUCT.md b/templates/repository/common/CODE_OF_CONDUCT.md index e4c1ea5..6264a3c 100644 --- a/templates/repository/common/CODE_OF_CONDUCT.md +++ b/templates/repository/common/CODE_OF_CONDUCT.md @@ -44,7 +44,7 @@ individual problems. If Ory open source software is used in production in a for-profit company or enterprise environment, we mandate a paid support contract where Ory is obligated under their service level agreements (SLAs) to offer a defined level of availability and responsibility. For more information about -paid support please contact us at sales@ory.sh. +paid support please contact us at sales@ory.com. ## Enforcement Responsibilities @@ -70,7 +70,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -[office@ory.sh](mailto:office@ory.sh). All complaints will be reviewed and +[office@ory.com](mailto:office@ory.com). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/templates/repository/common/CONTRIBUTING.md b/templates/repository/common/CONTRIBUTING.md index ab473da..4edc937 100644 --- a/templates/repository/common/CONTRIBUTING.md +++ b/templates/repository/common/CONTRIBUTING.md @@ -21,7 +21,7 @@ _Please note_: We take Ory $PROJECT's security and our users' trust very seriously. If you believe you have found a security issue in Ory $PROJECT, -please disclose it by contacting us at security@ory.sh. +please disclose it by contacting us at security@ory.com. There are many ways in which you can contribute. The goal of this document is to provide a high-level overview of how you can get involved in Ory. @@ -41,7 +41,7 @@ won't clash with Ory $PROJECT's direction. A great way to do this is via [Ory $PROJECT Discussions]($DISCUSSIONS) -or the [Ory Chat](https://www.ory.sh/chat). +or the [Ory Chat](https://www.ory.com/chat). ## FAQ @@ -64,7 +64,7 @@ or the [Ory Chat](https://www.ory.sh/chat). [a Contributors License Agreement?](https://cla-assistant.io/$REPOSITORY) - I would like updates about new versions of Ory $PROJECT. - [How are new releases announced?](https://www.ory.sh/l/sign-up-newsletter) + [How are new releases announced?](https://www.ory.com/l/sign-up-newsletter) ## How can I contribute? @@ -106,7 +106,7 @@ to help out: ## Communication -We use [Slack](https://www.ory.sh/chat). You are welcome to drop in and ask +We use [Slack](https://www.ory.com/chat). You are welcome to drop in and ask questions, discuss bugs and feature requests, talk to other users of Ory, etc. Check out [Ory $PROJECT Discussions]($DISCUSSIONS). This is a great place for @@ -114,7 +114,7 @@ in-depth discussions and lots of code examples, logs and similar data. You can also join our community calls if you want to speak to the Ory team directly or ask some questions. You can find more info and participate in -[Slack](https://www.ory.sh/chat) in the #community-call channel. +[Slack](https://www.ory.com/chat) in the #community-call channel. If you want to receive regular notifications about updates to Ory $PROJECT, consider joining the mailing list. We will _only_ send you vital information on @@ -136,7 +136,7 @@ to add your example or Ory-related project to the awesome-ory README. ## Contribute code Unless you are fixing a known bug, we **strongly** recommend discussing it with -the core team via a GitHub issue or [in our chat](https://www.ory.sh/chat) +the core team via a GitHub issue or [in our chat](https://www.ory.com/chat) before getting started to ensure your work is consistent with Ory $PROJECT's roadmap and architecture. @@ -205,7 +205,7 @@ instructions please head over to the Ory Documentation ## Disclosing vulnerabilities Please disclose vulnerabilities exclusively to -[security@ory.sh](mailto:security@ory.sh). Do not use GitHub issues. +[security@ory.com](mailto:security@ory.com). Do not use GitHub issues. ## Code style @@ -247,4 +247,4 @@ community a safe place for you and we've got your back. We welcome discussion about creating a welcoming, safe, and productive environment for the community. If you have any questions, feedback, or concerns -[please let us know](https://www.ory.sh/chat). +[please let us know](https://www.ory.com/chat). diff --git a/templates/repository/common/PROJECTS.md b/templates/repository/common/PROJECTS.md index 3e1fb04..ba076c5 100644 --- a/templates/repository/common/PROJECTS.md +++ b/templates/repository/common/PROJECTS.md @@ -18,7 +18,7 @@ dependencies (Java, Node, Ruby, libxml, ...). [Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User Management system that is built according to -[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy). +[cloud architecture best practices](https://www.ory.com/docs/next/ecosystem/software-architecture-philosophy). It implements core use cases that almost every software application needs to deal with: Self-service Login and Registration, Multi-Factor Authentication (MFA/2FA), Account Recovery and Verification, Profile, and Account Management. diff --git a/templates/repository/common/SECURITY.md b/templates/repository/common/SECURITY.md index 8359d9b..76f7e9d 100644 --- a/templates/repository/common/SECURITY.md +++ b/templates/repository/common/SECURITY.md @@ -4,7 +4,7 @@ This policy outlines Ory's security commitments and practices for users across different licensing and deployment models. To learn more about Ory's security service level agreements (SLAs) and -processes, please [contact us](https://www.ory.sh/contact/). +processes, please [contact us](https://www.ory.com/contact/). ## Ory Network Users @@ -50,4 +50,4 @@ processes, please [contact us](https://www.ory.sh/contact/). ## Reporting a Vulnerability For details on how to report security vulnerabilities, visit our -[security policy documentation](https://www.ory.sh/docs/ecosystem/security). +[security policy documentation](https://www.ory.com/docs/ecosystem/security). diff --git a/templates/repository/library/.github/pull_request_template.md b/templates/repository/library/.github/pull_request_template.md index 0796297..f46e04d 100644 --- a/templates/repository/library/.github/pull_request_template.md +++ b/templates/repository/library/.github/pull_request_template.md @@ -24,7 +24,7 @@ Pull requests introducing new features, which do not have a design document link get merged. You can discuss changes with maintainers either in the Github Discussions in this repository or -join the [Ory Chat](https://www.ory.sh/chat). +join the [Ory Chat](https://www.ory.com/chat). --> ## Checklist @@ -39,7 +39,7 @@ them, don't hesitate to ask. We're here to help! This is simply a reminder of wh - [ ] I have read the [security policy](../security/policy). - [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security vulnerability, - I confirm that I got approval (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. + I confirm that I got approval (please contact [security@ory.com](mailto:security@ory.com)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added the necessary documentation within the code base (if appropriate). diff --git a/templates/repository/server/.github/pull_request_template.md b/templates/repository/server/.github/pull_request_template.md index 3bd4b80..230c6f3 100644 --- a/templates/repository/server/.github/pull_request_template.md +++ b/templates/repository/server/.github/pull_request_template.md @@ -24,7 +24,7 @@ Pull requests introducing new features, which do not have a design document link get merged. You can discuss changes with maintainers either in the Github Discussions in this repository or -join the [Ory Chat](https://www.ory.sh/chat). +join the [Ory Chat](https://www.ory.com/chat). --> ## Checklist @@ -43,7 +43,7 @@ If you're unsure about any of them, don't hesitate to ask. We're here to help! - [ ] I have read the [security policy](../security/policy). - [ ] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security vulnerability, - I confirm that I got the approval (please contact [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push the changes. + I confirm that I got the approval (please contact [security@ory.com](mailto:security@ory.com)) from the maintainers to push the changes. - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added or changed [the documentation](https://github.com/ory/docs). From 4cc9137991fcd028a1d76001541e34fa7928c5b0 Mon Sep 17 00:00:00 2001 From: Tom Fenech Date: Tue, 24 Mar 2026 11:41:42 +0100 Subject: [PATCH 163/164] security: avoid running from latest trivy-action tag (#247) According to https://github.com/aquasecurity/trivy/security/advisories/GHSA-69fq-xp46-6x23, usage of the "latest" tag exposed users to a malicious version. To resolve this issue, pin to the known-safe version. CVE-2026-33634 --- templates/repository/server/.github/workflows/cve-scan.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repository/server/.github/workflows/cve-scan.yaml b/templates/repository/server/.github/workflows/cve-scan.yaml index 47e6692..7853390 100644 --- a/templates/repository/server/.github/workflows/cve-scan.yaml +++ b/templates/repository/server/.github/workflows/cve-scan.yaml @@ -91,7 +91,7 @@ jobs: # can't whitelist CVE yet: https://github.com/kubescape/kubescape/pull/1568 severityThreshold: critical - name: Trivy Scanner - uses: aquasecurity/trivy-action@master + uses: aquasecurity/trivy-action@0.35.0 if: ${{ always() }} with: image-ref: ${{ env.IMAGE_NAME }} From 11406242a363011e737375f796ea4fdbaac96cbb Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Mon, 18 May 2026 21:17:20 +0200 Subject: [PATCH 164/164] feat: add talos (#249) --- install.sh | 12 ++++++++++-- scripts/sync.sh | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index d3b12cf..e370cf1 100755 --- a/install.sh +++ b/install.sh @@ -16,6 +16,7 @@ Usage: $this [-b] bindir [-d] [] - kratos - downloads Ory Kratos - hydra - downloads Ory Hydra - oathkeeper - downloads Ory Oathkeeper + - talos - downloads Ory Talos - ory - downloads the Ory CLI -b sets bindir or installation directory, Defaults to ./bin @@ -47,7 +48,7 @@ parse_args() { done shift $((OPTIND - 1)) - [ -z "$1" ] && (echo "Please specify the project you want to download. Possible values are: keto, kratos, hydra, oathkeeper, ory." && exit 1) + [ -z "$1" ] && (echo "Please specify the project you want to download. Possible values are: keto, kratos, hydra, oathkeeper, talos, ory." && exit 1) TAG=$2 case "$1" in @@ -83,8 +84,15 @@ parse_args() { FLAVOR="" ;; + talos) + REPO="talos" + BINARY=talos + PROJECT_NAME=talos + FLAVOR="" + ;; + *) - echo "The project you specified is unknown. Please choose one of \"ory\", \"keto\", \"kratos\", \"oathkeeper\". Received \"$1\"." + echo "The project you specified is unknown. Please choose one of \"ory\", \"keto\", \"kratos\", \"oathkeeper\", \"talos\". Received \"$1\"." exit 1 ;; esac diff --git a/scripts/sync.sh b/scripts/sync.sh index 116e8af..ae28b54 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -25,6 +25,7 @@ function replicate_all { declare -A name_map=( ["hydra"]="Hydra" ["keto"]="Keto" + ["talos"]="Talos" ["oathkeeper"]="Oathkeeper" ["kratos"]="Kratos" ["hydra-login-consent-node"]="Hydra Login, Logout And Consent Node Example" @@ -106,6 +107,7 @@ function replicate_all { "keto" "oathkeeper" "kratos" + "talos" "elements" "polis" "x"