diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml index d48c9a347..c5dd5964a 100644 --- a/.github/workflows/validation.yml +++ b/.github/workflows/validation.yml @@ -36,6 +36,15 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Get Modified JSON Files + id: modified_files + run: | + MODIFIED_FILES=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '^domains/.*\.json$' | sed 's|.*/||' | tr '\n' ',' | sed 's|,$||') + echo "MODIFIED_FILES=${MODIFIED_FILES}" >> $GITHUB_ENV + - run: npm install - run: npm test + env: + PULL_REQUEST: ${{ github.event.pull_request.number || false }} # false if not a PR + MODIFIED_FILES: ${{ env.MODIFIED_FILES }} diff --git a/tests/pr.test.js b/tests/pr.test.js new file mode 100644 index 000000000..6e5588fd7 --- /dev/null +++ b/tests/pr.test.js @@ -0,0 +1,23 @@ +if (!process.env.PULL_REQUEST) return; + +const t = require("ava"); +const fs = require("fs-extra"); +const path = require("path"); + +const PR_AUTHOR = process.env.PR_AUTHOR; +const MODIFIED_FILES = process.env.MODIFIED_FILES.split(","); + +const domainsPath = path.resolve("domains"); + +const admins = require("../util/administrators.json"); + +t("Modified JSON files must be owned by the PR author", (t) => { + MODIFIED_FILES.forEach((file) => { + const domain = fs.readJsonSync(path.join(domainsPath, file)); + + t.true( + domain.owner.username === PR_AUTHOR || admins.includes(PR_AUTHOR), + `${file}: Owner should be ${PR_AUTHOR} but is ${domain.owner}` + ); + }); +}); diff --git a/util/administrators.json b/util/administrators.json new file mode 100644 index 000000000..f85832ced --- /dev/null +++ b/util/administrators.json @@ -0,0 +1,4 @@ +[ + "wdhdev", + "DEV-DIBSTER" +] \ No newline at end of file diff --git a/util/reserved-domains.json b/util/reserved-domains.json index 67087b209..42a683c8c 100644 --- a/util/reserved-domains.json +++ b/util/reserved-domains.json @@ -8,7 +8,9 @@ "api", "auth", "authentication", + "authorisation", "authorise", + "authorization", "authorize", "aux", "billing", @@ -17,6 +19,7 @@ "cart", "catalog", "checkout", + "co", "com", "com[1-9]", "con", @@ -74,7 +77,6 @@ "payments", "portal", "postmaster", - "prn", "recovery", "redirect", "registrar",