Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Imperial development #65

Open
wants to merge 85 commits into
base: imperial-production
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
7be040b
Add permissions to pr_bot and flag_external_pr workflows (#3843)
tamirkamara Feb 8, 2024
d080e11
Update permissions for 'checks' (#3844)
tamirkamara Feb 8, 2024
fab7bc3
Add permissions to parent workflows (#3845)
tamirkamara Feb 8, 2024
3835e5a
More workflow permissions (#3846)
tamirkamara Feb 8, 2024
e8da262
fixing react router dom version and switching to absolute routing whe…
yahya130 Feb 12, 2024
f15c0bc
Update CodeQL actions (#3851)
tamirkamara Feb 15, 2024
1e48253
Delete InnerEye from workflows
tamirkamara Feb 20, 2024
b40e4e7
Update important dependencies (#3852)
tamirkamara Feb 20, 2024
ab39972
Add report check status to Test Results (#3856)
marrobi Feb 27, 2024
c3bc779
Fix registration of templates with no required or authorizedRoles de…
nasaldrops Feb 27, 2024
21dbd24
Add network rule set for Service Bus namespace (#3858)
marrobi Feb 28, 2024
05b0b93
Fix argument quoting in second ACR job step in 'Deploy TRE Reusable' …
jonnyry Feb 28, 2024
b2caab3
Destroy TRE script unbound variable fix (#3864)
jonnyry Feb 29, 2024
e8d2f89
Update Docker dependency update schedule (#3868)
marrobi Mar 1, 2024
ddddbf6
Update packages for February Security Updates (#3866)
marrobi Mar 5, 2024
8cd68b5
Update Azure MySQL Server to Flexible Server (#3892)
Apr 3, 2024
4f79ddb
Firewall Policy Rule Fix (#3894)
Apr 4, 2024
086be33
Prep For Release v0.17.0 (#3896)
Apr 4, 2024
de14165
Documentation Pipeline Fix (#3898)
Apr 5, 2024
ea63ebf
Feature/GitHub actions update (#3897)
Apr 9, 2024
47c8182
Bump the npm_and_yarn group in /ui/app with 3 updates (#3891)
dependabot[bot] Apr 9, 2024
bc2f233
Update "Azure AD" references to "Microsoft Entra ID" (#3873)
wojciechcloudkubed Apr 11, 2024
cb59c99
Update Resource processor Ubuntu Image (#3902)
Apr 12, 2024
ada56a6
Update config.py
danny-cooke-icl Apr 15, 2024
c8e5ed3
Remove TLS1.0/1.1 support. Resolves #3914 (#3916)
jonnyry May 1, 2024
606a5d9
Ubuntu 2204 update (#3924)
May 9, 2024
bd0aa62
Create KEY_VAULT_URL env var when a private.env file exists (#3727)
marrobi May 10, 2024
d866ec5
Add storage account check to avoid name clash (#3863)
marrobi May 10, 2024
7b572af
Bump the npm_and_yarn group in /ui/app with 2 updates (#3918)
dependabot[bot] May 10, 2024
565fd4d
Bump the pip group across 3 directories with 2 updates (#3930)
dependabot[bot] May 10, 2024
ddbbffe
Snyk updates 0524 (#3932)
May 20, 2024
bdb736e
Improve documentation on TRE teardown (#3954)
jonnyry May 28, 2024
8d97039
Add Key Vault purge protection variable (#3952)
May 29, 2024
1ffb09b
Resource processor - Re-instate az login and az acr login commands pr…
jonnyry May 30, 2024
59d006a
MySQL Recreation Fix (#3994)
Jun 21, 2024
73944ed
Core provider update (#3991)
Jun 21, 2024
63ee935
Expose FIREWALL_SKU as environment variable & support start/stop of S…
jonnyry Jun 24, 2024
4004cb8
Fixes #4003 with correct links (#4005)
michael-fielding Jun 24, 2024
8b762a9
Enable Workspace owners to create Airlock requests and remove need fo…
marrobi Jun 24, 2024
3689c09
Fix .github/workflows/lets_encrypt.yml (#3979)
jonnyry Jun 25, 2024
0560d29
Gitea Shared Service Fix (#4008)
Jun 25, 2024
8171fe9
Updates Windows11 Source Image SKU as previous SKU is end-of-life (#…
michael-fielding Jun 25, 2024
21daf3f
Weak hashes (#3963)
Jun 26, 2024
6909584
Databricks ips (#3964)
Jun 27, 2024
fc4abe1
Fix hash issue with builds (#4013)
marrobi Jun 27, 2024
9e49ed6
Release v0.18 (#4016)
Jun 28, 2024
5778fc9
Support custom domain on SSL certificate and App Registration redirec…
jonnyry Jul 9, 2024
9d0bf31
Add user case studies to docs (#4025)
Jul 12, 2024
43eb846
Azure SQL Workspace Service (#3970)
jonnyry Jul 15, 2024
5d5d8b0
Disable public network access to API App Service - traffic is routed …
jonnyry Jul 16, 2024
3d1bb33
Improve Bug Template (#4028)
Sweetdevil144 Jul 17, 2024
979c4fa
Documentation typo (#4038)
jonnyry Jul 18, 2024
6d51ace
Remove AppServiceFileAuditLogs diagnostic setting (#4034)
jonnyry Jul 23, 2024
ba76a89
Emoji markdown Fix (#4031)
Aug 1, 2024
b0d8969
Fix incorrect link on Azure TRE Resource Breakdown page (#4045)
marrobi Aug 2, 2024
388e4e6
opentelemetry version fix (#4051)
Aug 2, 2024
2aa0565
Snyk updates new (#3956)
Aug 5, 2024
e14f440
update dependabot dependencies (#4037)
Aug 5, 2024
b1243d8
Fix Guacamole shared drive always enabled (#4046)
marrobi Aug 5, 2024
4334cbc
Fix Blob.Created trigger to only handle Blob.Created events (#4044)
marrobi Aug 5, 2024
f2c5ef8
Cost API Error (#4035)
Aug 6, 2024
792e1a4
Revert "Fix Blob.Created trigger to only handle Blob.Created events" …
marrobi Aug 6, 2024
e84e625
update docs for links to work (#4061)
Aug 8, 2024
f1c17b8
update vm_config for screensaver timeout (#4064)
Aug 14, 2024
cb59871
Snyk 0824 (#4059)
Aug 14, 2024
e073613
Airlock notifier update (#4042)
Aug 15, 2024
59bd365
Update .NET version on Linux VM (#4069)
Aug 19, 2024
c3e4c8d
Prep for release v0.19.0 (#4073)
Aug 27, 2024
4040e72
Open AI Workspace Service (#4075)
harryy94 Sep 16, 2024
7dd1915
Update unrestricted & airlock review workspace base version (#4087)
jonnyry Sep 19, 2024
55a1001
Workspace creation blocked due to Azure API depreciation - base work…
jonnyry Sep 24, 2024
0af4c94
Provider upgrades for Microsoft.TimeSeriesInsights fix (#4097)
Danny-Cooke-CK Sep 26, 2024
87cb4f0
Update Workspace limit in docs (#4098)
Sep 26, 2024
92f1033
Fix CycleCloud and SLURM deployment issues (#4050)
marrobi Sep 26, 2024
89b55cb
Update to Release Docs (#4015)
Sep 26, 2024
93e9a37
Prep for Release v0.19.1 (#4101)
Sep 26, 2024
400766b
Add route to retrieve users assigned to a workspace with UI (#4058)
marrobi Oct 1, 2024
91ce09e
Update config.py
danny-cooke-icl Oct 2, 2024
44f1051
Merge branch 'microsoft:main' into main
danny-cooke-icl Oct 2, 2024
7421892
Merge pull request #59 from ImperialCollegeLondon/imperial-production
danny-cooke-icl Oct 2, 2024
3251211
Merge branch 'imperial-development-0.19.1' into imperial-development-…
danny-cooke-icl Oct 8, 2024
fc2655b
Merge pull request #61 from ImperialCollegeLondon/imperial-developmen…
danny-cooke-icl Oct 8, 2024
4e0ede5
Update control_tre.sh
danny-cooke-icl Oct 9, 2024
259a292
Merge pull request #62 from ImperialCollegeLondon/danny-cooke-icl-pat…
danny-cooke-icl Oct 9, 2024
043c39a
Merge pull request #63 from ImperialCollegeLondon/imperial-developmen…
danny-cooke-icl Oct 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ RUN apt-get update && apt-get install -y ca-certificates curl gnupg lsb-release
&& curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
&& echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& apt-get update && apt-get install -y docker-ce="5:23.0.3-1~debian.11~bullseye" docker-ce-cli="5:23.0.3-1~debian.11~bullseye" containerd.io="1.6.20-1" docker-buildx-plugin --no-install-recommends \
&& apt-get update && apt-get install -y docker-ce="5:24.0.0-1~debian.11~bullseye" docker-ce-cli="5:24.0.0-1~debian.11~bullseye" docker-compose-plugin="2.21.0-1~debian.11~bullseye" containerd.io="1.6.24-1" docker-buildx-plugin --no-install-recommends \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/*

# Install Certbot
Expand Down Expand Up @@ -75,7 +75,7 @@ COPY ["airlock_processor/requirements.txt", "/tmp/pip-tmp/airlock_processor/"]
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt

# Install azure-cli
ARG AZURE_CLI_VERSION=2.50.0-1~bullseye
ARG AZURE_CLI_VERSION=2.57.0-1~bullseye
COPY .devcontainer/scripts/azure-cli.sh /tmp/
RUN export AZURE_CLI_VERSION=${AZURE_CLI_VERSION} \
&& /tmp/azure-cli.sh
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ A clear and concise description of what the bug is.
**Steps to reproduce**

1.
1.
1.
2.
3.

**Azure TRE release version (e.g. v0.14.0 or main):**

Expand Down
11 changes: 10 additions & 1 deletion .github/actions/devcontainer_run_command/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,13 @@ inputs:
required: false
default: ""
KV_PURGE_PROTECTION_ENABLED:
description: "A boolean indicating if the purge protection will be enabled on the core keyvault."
required: false
default: "true"
FIREWALL_SKU:
description: "Firewall SKU"
required: false
default: ""
description: "JSON string containing key/value pairs to injet into the Resource Processor as ENV vars"
required: true

Expand All @@ -135,7 +142,7 @@ runs:
echo "AZURE_ENVIRONMENT=$azure_env" >> $GITHUB_ENV

- name: Azure Login
uses: azure/login@v1
uses: azure/login@v2
if: contains(inputs.COMMAND, 'bootstrap') != true
with:
creds: ${{ inputs.AZURE_CREDENTIALS }}
Expand Down Expand Up @@ -222,6 +229,7 @@ runs:
-e IS_API_SECURED=${{ inputs.IS_API_SECURED }} \
-e DOCKER_BUILDKIT=1 \
-e TF_VAR_stateful_resources_locked=${{ inputs.STATEFUL_RESOURCES_LOCKED }} \
-e TF_VAR_kv_purge_protection_enabled="${{ inputs.KV_PURGE_PROTECTION_ENABLED }}" \
-e TF_VAR_enable_airlock_malware_scanning=${{ inputs.ENABLE_AIRLOCK_MALWARE_SCANNING }} \
-e CI_CACHE_ACR_NAME="${{ inputs.CI_CACHE_ACR_NAME }}" \
-e KV_PURGE_PROTECTION_ENABLED="${{ inputs.KV_PURGE_PROTECTION_ENABLED }}" \
Expand All @@ -234,6 +242,7 @@ runs:
&& inputs.RP_BUNDLE_VALUES) || '{}' }}' \
-e TF_VAR_resource_processor_number_processes_per_instance="${{ (inputs.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE != ''
&& inputs.RESOURCE_PROCESSOR_NUMBER_PROCESSES_PER_INSTANCE) || 5 }}" \
-e TF_VAR_firewall_sku=${{ inputs.FIREWALL_SKU }} \
-e E2E_TESTS_NUMBER_PROCESSES="${{ inputs.E2E_TESTS_NUMBER_PROCESSES }}" \
'${{ inputs.CI_CACHE_ACR_NAME }}${{ env.ACR_DOMAIN_SUFFIX }}/tredev:${{ inputs.DEVCONTAINER_TAG }}' \
bash -c "${{ inputs.COMMAND }}"
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,12 @@ updates:
- dependency-name: "*"
update-types: ["version-update:semver-patch"]
open-pull-requests-limit: 0

- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-patch"]
open-pull-requests-limit: 0
6 changes: 4 additions & 2 deletions .github/scripts/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// These tests can be run from the dev container using the run-tests.sh script
//
const { createHash } = require('crypto');
const { create } = require('domain');

async function getCommandFromComment({ core, context, github }) {
const commentUsername = context.payload.comment.user.login;
Expand Down Expand Up @@ -292,11 +293,12 @@ function getRefIdForBranch(branchName) {
return createShortHash(`refs/heads/${branchName}\n`);
}
function createShortHash(ref) {
const hash = createHash('sha1').update(ref, 'utf8').digest('hex')
const hash = createHash('sha512').update(ref, 'utf8').digest('hex');
return hash.substring(0, 8);
}

module.exports = {
getCommandFromComment,
labelAsExternalIfAuthorDoesNotHaveWriteAccess
labelAsExternalIfAuthorDoesNotHaveWriteAccess,
createShortHash
}
32 changes: 20 additions & 12 deletions .github/scripts/build.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const { getCommandFromComment, labelAsExternalIfAuthorDoesNotHaveWriteAccess } = require('./build.js')
const { getCommandFromComment, labelAsExternalIfAuthorDoesNotHaveWriteAccess, createShortHash } = require('./build.js')
const { createGitHubContext, PR_NUMBER, outputFor, toHaveComment } = require('./test-helpers.js')

expect.extend({
Expand Down Expand Up @@ -146,7 +146,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/,
});
});
});
Expand Down Expand Up @@ -326,7 +326,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/,
});
});
})
Expand Down Expand Up @@ -355,7 +355,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/,
bodyMatcher: /Running tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/,
});
});
})
Expand All @@ -381,7 +381,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES,
bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/,
bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/,
});
});
});
Expand All @@ -407,7 +407,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES,
bodyMatcher: /Running extended AAD tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/,
bodyMatcher: /Running extended AAD tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/,
});
});
});
Expand All @@ -433,7 +433,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES,
bodyMatcher: /Running shared service tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `cbce50da`\)/,
bodyMatcher: /Running shared service tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `291ae84f`\)/,
});
});
});
Expand Down Expand Up @@ -549,7 +549,7 @@ describe('getCommandFromComment', () => {
owner: 'someOwner',
repo: 'someRepo',
issue_number: PR_NUMBER.FORK_NON_DOCS_CHANGES,
bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `6db070b1`\)/,
bodyMatcher: /Running extended tests: https:\/\/github.com\/someOwner\/someRepo\/actions\/runs\/11112222 \(with refid `607c7437`\)/,
});
});
})
Expand Down Expand Up @@ -679,13 +679,13 @@ goes here`,
});

test('should set prRefId output', async () => {
// Using a PR number of 123 should give a refid of 'cbce50da'
// Using a PR number of 123 should give a refid of '291ae84f'
// Based on running `echo "refs/pull/123/merge" | shasum | cut -c1-8` (as per the original bash scripts)
const context = createCommentContext({
pullRequestNumber: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES
});
await getCommandFromComment({ core, context, github });
expect(outputFor(mockCoreSetOutput, 'prRefId')).toBe('cbce50da');
expect(outputFor(mockCoreSetOutput, 'prRefId')).toBe('291ae84f');
});

test('should not set branchRefId output for PR from forked repo', async () => {
Expand All @@ -701,13 +701,13 @@ goes here`,

test('should set branchRefId for PR from upstream repo', async () => {
// Using PR 123 which is faked as a PR from the upstream repo
// The Using a PR number of 123 should give a refid of '71f7c907'
// The Using a PR number of 123 should give a refid of '6b751c8f'
// Based on running `echo "refs/heads/pr-head-ref" | shasum | cut -c1-8` (as per the original bash scripts)
const context = createCommentContext({
pullRequestNumber: PR_NUMBER.UPSTREAM_NON_DOCS_CHANGES
});
await getCommandFromComment({ core, context, github });
expect(outputFor(mockCoreSetOutput, 'branchRefId')).toBe('71f7c907');
expect(outputFor(mockCoreSetOutput, 'branchRefId')).toBe('6b751c8f');
});

test('should set prHeadSha output', async () => {
Expand Down Expand Up @@ -770,4 +770,12 @@ goes here`,
});
});

describe('createShortHash creates a short hash from a long hash', () => {
test('should return the first 8 characters of the hash', () => {
const longHash = '0123456789abcdef';
const shortHash = '1c043fbe';
expect(createShortHash(longHash)).toBe(shortHash);
}
);
});
});
24 changes: 12 additions & 12 deletions .github/scripts/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -774,12 +774,12 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"

braces@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
braces@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
fill-range "^7.0.1"
fill-range "^7.1.1"

browser-process-hrtime@^1.0.0:
version "1.0.0"
Expand Down Expand Up @@ -1109,10 +1109,10 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"

fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"

Expand Down Expand Up @@ -2479,9 +2479,9 @@ write-file-atomic@^3.0.0:
typedarray-to-buffer "^3.1.5"

ws@^7.4.6:
version "7.5.9"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
version "7.5.10"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==

xml-name-validator@^3.0.0:
version "3.0.0"
Expand Down
Loading
Loading