From f468d2ebde7378ff8a61030ed116e39db86ef1b9 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 12:05:15 +0100 Subject: [PATCH 01/39] chore(cicd): cron jobs for dependabot promotion --- ...e-dependabot-prs-into-collected-branch.yml | 2 +- ...collected-dependabot-staging-to-master.yml | 48 +++++++++++++++++++ .../collected-dependabot-to-staging.yml | 45 +++++++++++++++++ .github/workflows/workflow-readme.md | 2 +- .releaserc.json | 10 +++- 5 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/collected-dependabot-staging-to-master.yml create mode 100644 .github/workflows/collected-dependabot-to-staging.yml diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index f1ba083..6021872 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -1,6 +1,6 @@ # This script seperate major and minor but we do merge them into the same branch. # Having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. -name: Auto-merge Dependabot PRs +name: Auto-merge Dependabot PRs into collected branch on: pull_request: types: [opened, synchronize] diff --git a/.github/workflows/collected-dependabot-staging-to-master.yml b/.github/workflows/collected-dependabot-staging-to-master.yml new file mode 100644 index 0000000..822ba31 --- /dev/null +++ b/.github/workflows/collected-dependabot-staging-to-master.yml @@ -0,0 +1,48 @@ +name: Collected Dependabot Promotion From Staging To Master +on: + schedule: + # we want the opposite weeks to staging so we get a week where it occurs in manual testing + - cron: '0 9 8-14 * 1' # Second Monday of month + - cron: '0 9 22-28 * 1' # Fourth Monday of month + workflow_dispatch: + +jobs: + promote-to-master: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for changes + id: changes + run: | + git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + git fetch origin master:master # or main/master - whatever your prod branch is + + if git diff --quiet master Automatic_collected_dependabot_staging; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + - name: Create PR to master + if: steps.changes.outputs.has_changes == 'true' + run: | + if gh pr list --head Automatic_collected_dependabot_staging --base master --json number --jq '.[0].number' | grep -q .; then + echo "PR already exists, skipping creation" + else + gh pr create \ + --base master \ + --head Automatic_collected_dependabot_staging \ + --title "Fortnightly dependabot collected master promotion - $(date +%Y-%m-%d)" \ + --body "Automated weekly promotion from staging to master after testing period" \ + --auto-merge \ + --merge + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-to-staging.yml b/.github/workflows/collected-dependabot-to-staging.yml new file mode 100644 index 0000000..4306f22 --- /dev/null +++ b/.github/workflows/collected-dependabot-to-staging.yml @@ -0,0 +1,45 @@ +name: Dependabot Collected Promotion To Staging +# this logic will require branch ruleset checks of running the dev pipeline +on: + schedule: + # Promotion from staging to release should be a week apart so alternating weeks (also live updates dangerous) + - cron: '0 9 1-7 * 1' # First Monday of month + - cron: '0 9 15-21 * 1' # Third Monday of month + workflow_dispatch: # Allow manual trigger + +jobs: + promote-to-automatic-collected-dependabot-staging: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for changes + id: changes + run: | + git fetch origin Automatic_version_update_dependabot:Automatic_version_update_dependabot + git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + + if git diff --quiet Automatic_collected_dependabot_staging Automatic_version_update_dependabot; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + - name: Create PR to Automatic_collected_dependabot_staging + if: steps.changes.outputs.has_changes == 'true' + run: | + gh pr create \ + --base Automatic_collected_dependabot_staging \ + --head Automatic_version_update_dependabot \ + --title "Fortnightly dependabot collected to staging - $(date +%Y-%m-%d)" \ + --body "Automated Fortnightly promotion of dependency updates from dependabot" \ + --auto-merge \ + --merge + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/workflow-readme.md b/.github/workflows/workflow-readme.md index 170fdf9..e008223 100644 --- a/.github/workflows/workflow-readme.md +++ b/.github/workflows/workflow-readme.md @@ -84,7 +84,7 @@ The individual steps also automatically pass so can see if any error at the end - dependabot duplicates tokens using dependabot secrets including write so can run checks - autoverging is being tried for major and minor - branch checks must pass for merge on automated_version - +- checks required but overrideable for all workflows ## Versioning Via semantic release and recorded as a generate c# file used by a blazor component diff --git a/.releaserc.json b/.releaserc.json index d7dbe06..d3ba112 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,10 +1,16 @@ { "branches": [ { - "name": "master" + "name": "master", + "prerelease": false }, { - "name": "Automatic_version_update_dependabot" + "name": "Automatic_version_update_dependabot", + "prerelease": false + }, + { + "name": "Automatic_collected_dependabot_staging", + "prerelease": true }, { "name": "feat-*", From b9f31a4cb3945b86d3b3ec4afdd3fa271014b1c1 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 12:37:06 +0100 Subject: [PATCH 02/39] chore(dependabot): is relesearc breaking --- .releaserc.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.releaserc.json b/.releaserc.json index d3ba112..58f0d4f 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -2,15 +2,9 @@ "branches": [ { "name": "master", - "prerelease": false }, { "name": "Automatic_version_update_dependabot", - "prerelease": false - }, - { - "name": "Automatic_collected_dependabot_staging", - "prerelease": true }, { "name": "feat-*", From ef8aaf870b1c087c17cdd50eefe863b54ced6d2f Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 12:41:01 +0100 Subject: [PATCH 03/39] chore(releaserc): config file fix --- .releaserc.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.releaserc.json b/.releaserc.json index 58f0d4f..d7dbe06 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,10 +1,10 @@ { "branches": [ { - "name": "master", + "name": "master" }, { - "name": "Automatic_version_update_dependabot", + "name": "Automatic_version_update_dependabot" }, { "name": "feat-*", From e4a100ea91c812168bd01c9898c6d98b98cee2f5 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 12:47:03 +0100 Subject: [PATCH 04/39] chore(dependabot): add back in branch staging --- .releaserc.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.releaserc.json b/.releaserc.json index d7dbe06..0953117 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -6,6 +6,9 @@ { "name": "Automatic_version_update_dependabot" }, + { + "name": "Automatic_collected_dependabot_staging" + }, { "name": "feat-*", "prerelease": true From f086dd4d1a9e0eafb56ec2ba358d6ce3609af30a Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 12:53:12 +0100 Subject: [PATCH 05/39] chore(releaserc): reapply prerelease --- .releaserc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.releaserc.json b/.releaserc.json index 0953117..43d58fc 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -7,7 +7,8 @@ "name": "Automatic_version_update_dependabot" }, { - "name": "Automatic_collected_dependabot_staging" + "name": "Automatic_collected_dependabot_staging", + "prerelease": true }, { "name": "feat-*", From 832349496ad6cdf80edc9e81f458669f2e954ea1 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 13:11:20 +0100 Subject: [PATCH 06/39] chore(releaserc): prerelease is causing the issues but will need it --- .releaserc.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.releaserc.json b/.releaserc.json index 43d58fc..204c5aa 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,14 +1,16 @@ { "branches": [ { - "name": "master" + "name": "master", + "prerelease": false }, { - "name": "Automatic_version_update_dependabot" + "name": "Automatic_version_update_dependabot", + "prerelease": false }, { "name": "Automatic_collected_dependabot_staging", - "prerelease": true + "prerelease": false }, { "name": "feat-*", From ac5d8f4622002f21bb99aed659e62f3132e0743b Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 13:29:49 +0100 Subject: [PATCH 07/39] chore(semver): better logging cause prerelease error try to view it --- .github/workflows/dev.yml | 13 ++++++++++++- .releaserc.json | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 425af66..7a4d46f 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -94,8 +94,19 @@ jobs: run: | echo "running semantic-release" - SEMVER_OUTPUT_RAW=$(npx semantic-release --dry-run 2>&1) + # SEMVER_OUTPUT_RAW=$(npx semantic-release --dry-run 2>&1) + # STATUS=$? + + SEMVER_OUTPUT_RAW=$(npx semantic-release --dry-run 2> /tmp/semantic-release-errors.log) STATUS=$? + + # Now you can check the status and log the error messages if an error occurred + if [ $STATUS -ne 0 ]; then + echo "Semantic release failed with exit code $STATUS." + echo "Error output:" + cat /tmp/semantic-release-errors.log + fi + echo "status = $STATUS" echo "$SEMVER_OUTPUT_RAW" diff --git a/.releaserc.json b/.releaserc.json index 204c5aa..d3ba112 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -10,7 +10,7 @@ }, { "name": "Automatic_collected_dependabot_staging", - "prerelease": false + "prerelease": true }, { "name": "feat-*", From b417400bcc6d9275e6e5dd46bc02930c71769b05 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 15:04:42 +0100 Subject: [PATCH 08/39] chore(releaserc): semver --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b8fe7c8..fad9453 100644 --- a/.gitignore +++ b/.gitignore @@ -236,3 +236,4 @@ TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/Logs/* # Generated version info files TELBlazor.Components/TELBlazorPackageVersion/VersionInfo*.cs +/.github/workflows/test.yml From c9ede7bede944f356f4bbf757eebca85e2355b42 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 15:14:08 +0100 Subject: [PATCH 09/39] chore(semver): dependabot --- .github/workflows/dev.yml | 27 ++++++++++++++++++++------- .releaserc.json | 8 +++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 7a4d46f..630ea52 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -92,13 +92,27 @@ jobs: - name: Run dev semantic version (None Blocking) id: detect_semantic_version run: | + echo "error catch run of semver first to get any error detail on config issues" + set +e + SEMVER_OUTPUT_RAW_ERROR_CHECK=$(npx semantic-release --dry-run 2> /tmp/semantic-release-errors.log) + STATUS_ERROR_CHECK=$? - echo "running semantic-release" - # SEMVER_OUTPUT_RAW=$(npx semantic-release --dry-run 2>&1) - # STATUS=$? + # Now you can check the status and log the error messages if an error occurred + if [ $STATUS_ERROR_CHECK -ne 0 ]; then + echo "❌ Semantic release failed with exit code $STATUS_ERROR_CHECK." + echo "❌ Error output:" + cat /tmp/semantic-release-errors.log + else + echo "✅ Semantic Ouput success : $SEMVER_OUTPUT_RAW_ERROR_CHECK " + echo "✅ Error on success : $STATUS_ERROR_CHECK" + fi - SEMVER_OUTPUT_RAW=$(npx semantic-release --dry-run 2> /tmp/semantic-release-errors.log) - STATUS=$? + set -e + + + echo "running semantic-release" + semver_output_raw=$(npx semantic-release --dry-run 2>&1) + status=$? # Now you can check the status and log the error messages if an error occurred if [ $STATUS -ne 0 ]; then @@ -372,5 +386,4 @@ jobs: -H "Authorization: Bearer $TEL_GIT_PACKAGES_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/$repo_owner/$repo_name/dispatches \ - -d "{\"event_type\": \"$event_type\", \"client_payload\": {\"artifact_url\": \"$artifact_url\"}}" - + -d "{\"event_type\": \"$event_type\", \"client_payload\": {\"artifact_url\": \"$artifact_url\"}}" \ No newline at end of file diff --git a/.releaserc.json b/.releaserc.json index d3ba112..2296f12 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,16 +1,14 @@ { "branches": [ { - "name": "master", - "prerelease": false + "name": "master" }, { - "name": "Automatic_version_update_dependabot", - "prerelease": false + "name": "Automatic_version_update_dependabot" }, { "name": "Automatic_collected_dependabot_staging", - "prerelease": true + "prerelease": "dependabot-staging" }, { "name": "feat-*", From f1d0467cea6e158044f8665639ca0274cd8ffa93 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Fri, 29 Aug 2025 16:55:46 +0100 Subject: [PATCH 10/39] chore(dependabot): broader lint check --- .github/workflows/reuseable-ci-checks.yml | 2 +- README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reuseable-ci-checks.yml b/.github/workflows/reuseable-ci-checks.yml index a875f2c..172443c 100644 --- a/.github/workflows/reuseable-ci-checks.yml +++ b/.github/workflows/reuseable-ci-checks.yml @@ -202,7 +202,7 @@ jobs: run: | BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}" echo "Branch name: $BRANCH_NAME" - if [[ "$BRANCH_NAME" =~ ^dependabot/ ]]; then + if [[ "$BRANCH_NAME" =~ ^dependabot/ ]] || [[ "$AUTHOR_NAME" == "dependabot[bot]" ]] || [[ "$COMMIT_MSG" =~ ^Bump ]]; then echo "✅ Branch is a dependabot branch - skipping commitlint ✅" echo "skip=true" >> $GITHUB_OUTPUT else diff --git a/README.md b/README.md index 220db0a..404d9b3 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ the ability to produce static prerendered html. The prerendered html is written - enter the variable names and variable values as follows: - GITHUB_USERNAME / [Your GitHub username] - TEL_GIT_PACKAGES_TOKEN / [The copied token] + - LOCAL_PACKAGES_PATH / [Path to your local packages folder] - then select **OK** - select **OK** again to close all dialogs. - **Restore Nuget, Npm, Tooling, playwright and build:** From 4d69e43c72fa52101c417c306efb19ccb04682e7 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 09:41:26 +0100 Subject: [PATCH 11/39] chore(cicd): automating pipeline progression of dependabot bumps --- ...e-dependabot-prs-into-collected-branch.yml | 26 ++++++++++++++++--- ...collected-dependabot-staging-to-master.yml | 1 + .../collected-dependabot-to-staging.yml | 1 + 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 6021872..9e3d50b 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -1,19 +1,38 @@ +# qqqq in development # This script seperate major and minor but we do merge them into the same branch. # Having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. name: Auto-merge Dependabot PRs into collected branch on: pull_request: - types: [opened, synchronize] + # synchronize + types: [opened] branches: [Automatic_version_update_dependabot] # Make sure this matches your actual branch name - + check_suite: + types: [completed] + workflow_dispatch: permissions: contents: write pull-requests: write jobs: + debug: + runs-on: ubuntu-latest + steps: + - name: Debug info + run: | + echo "Actor: ${{ github.actor }}" + echo "PR Title: ${{ github.event.pull_request.title }}" + echo "Target Branch: ${{ github.event.pull_request.base.ref }}" + echo "Source Branch: ${{ github.event.pull_request.head.ref }}" + - name: Wait for other checks to start + - name: Delay for check + run: | + # drop later qqqq shouldnt need but its running before auto + echo "Waiting 4 minutes for other checks to start running..." + sleep 240 auto-merge: runs-on: ubuntu-latest - if: github.actor == 'dependabot[bot]' + if: github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch' steps: - name: Extract update type id: extract @@ -27,6 +46,7 @@ jobs: - name: Auto-merge minor and patch updates if: steps.extract.outputs.update_type == 'minor_or_patch' + # Auto should set the the request to merge once checks complete run: gh pr merge --auto --squash "${{ github.event.pull_request.html_url }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/collected-dependabot-staging-to-master.yml b/.github/workflows/collected-dependabot-staging-to-master.yml index 822ba31..fbb0e0f 100644 --- a/.github/workflows/collected-dependabot-staging-to-master.yml +++ b/.github/workflows/collected-dependabot-staging-to-master.yml @@ -1,3 +1,4 @@ +# qqqq in development name: Collected Dependabot Promotion From Staging To Master on: schedule: diff --git a/.github/workflows/collected-dependabot-to-staging.yml b/.github/workflows/collected-dependabot-to-staging.yml index 4306f22..c0a0376 100644 --- a/.github/workflows/collected-dependabot-to-staging.yml +++ b/.github/workflows/collected-dependabot-to-staging.yml @@ -1,3 +1,4 @@ +# qqqq in development name: Dependabot Collected Promotion To Staging # this logic will require branch ruleset checks of running the dev pipeline on: From 59b6a1faca3c976fdf77265b54931dc19db308a7 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 10:53:21 +0100 Subject: [PATCH 12/39] chore(checks): fail due to artifact --- ...e-dependabot-prs-into-collected-branch.yml | 7 +- .../collected-dependabot-to-staging.yml | 84 +++++++++---------- .github/workflows/reuseable-ci-checks.yml | 4 +- .github/workflows/workflow-readme.md | 33 +++++++- 4 files changed, 82 insertions(+), 46 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 9e3d50b..0c420fc 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -5,7 +5,7 @@ name: Auto-merge Dependabot PRs into collected branch on: pull_request: # synchronize - types: [opened] + types: [opened, synchronize] branches: [Automatic_version_update_dependabot] # Make sure this matches your actual branch name check_suite: types: [completed] @@ -13,6 +13,7 @@ on: permissions: contents: write pull-requests: write + checks: read jobs: debug: @@ -32,7 +33,8 @@ jobs: sleep 240 auto-merge: runs-on: ubuntu-latest - if: github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch' + # if dependabot and checks ran + if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') steps: - name: Extract update type id: extract @@ -53,6 +55,7 @@ jobs: - name: Auto-merge major updates if: steps.extract.outputs.update_type == 'major' + # Auto should set the the request to merge once checks complete run: gh pr merge --auto --squash "${{ github.event.pull_request.html_url }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-to-staging.yml b/.github/workflows/collected-dependabot-to-staging.yml index c0a0376..eb067b9 100644 --- a/.github/workflows/collected-dependabot-to-staging.yml +++ b/.github/workflows/collected-dependabot-to-staging.yml @@ -1,46 +1,46 @@ -# qqqq in development -name: Dependabot Collected Promotion To Staging -# this logic will require branch ruleset checks of running the dev pipeline -on: - schedule: - # Promotion from staging to release should be a week apart so alternating weeks (also live updates dangerous) - - cron: '0 9 1-7 * 1' # First Monday of month - - cron: '0 9 15-21 * 1' # Third Monday of month - workflow_dispatch: # Allow manual trigger +# # qqqq in development +# name: Dependabot Collected Promotion To Staging +# # this logic will require branch ruleset checks of running the dev pipeline +# on: + # schedule: + # # Promotion from staging to release should be a week apart so alternating weeks (also live updates dangerous) + # - cron: '0 9 1-7 * 1' # First Monday of month + # - cron: '0 9 15-21 * 1' # Third Monday of month + # workflow_dispatch: # Allow manual trigger -jobs: - promote-to-automatic-collected-dependabot-staging: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 +# jobs: + # promote-to-automatic-collected-dependabot-staging: + # runs-on: ubuntu-latest + # permissions: + # contents: write + # pull-requests: write + # steps: + # - name: Checkout + # uses: actions/checkout@v4 + # with: + # fetch-depth: 0 - - name: Check for changes - id: changes - run: | - git fetch origin Automatic_version_update_dependabot:Automatic_version_update_dependabot - git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + # - name: Check for changes + # id: changes + # run: | + # git fetch origin Automatic_version_update_dependabot:Automatic_version_update_dependabot + # git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging - if git diff --quiet Automatic_collected_dependabot_staging Automatic_version_update_dependabot; then - echo "has_changes=false" >> $GITHUB_OUTPUT - else - echo "has_changes=true" >> $GITHUB_OUTPUT - fi + # if git diff --quiet Automatic_collected_dependabot_staging Automatic_version_update_dependabot; then + # echo "has_changes=false" >> $GITHUB_OUTPUT + # else + # echo "has_changes=true" >> $GITHUB_OUTPUT + # fi - - name: Create PR to Automatic_collected_dependabot_staging - if: steps.changes.outputs.has_changes == 'true' - run: | - gh pr create \ - --base Automatic_collected_dependabot_staging \ - --head Automatic_version_update_dependabot \ - --title "Fortnightly dependabot collected to staging - $(date +%Y-%m-%d)" \ - --body "Automated Fortnightly promotion of dependency updates from dependabot" \ - --auto-merge \ - --merge - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + # - name: Create PR to Automatic_collected_dependabot_staging + # if: steps.changes.outputs.has_changes == 'true' + # run: | + # gh pr create \ + # --base Automatic_collected_dependabot_staging \ + # --head Automatic_version_update_dependabot \ + # --title "Fortnightly dependabot collected to staging - $(date +%Y-%m-%d)" \ + # --body "Automated Fortnightly promotion of dependency updates from dependabot" \ + # --auto-merge \ + # --merge + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/reuseable-ci-checks.yml b/.github/workflows/reuseable-ci-checks.yml index 172443c..9523b66 100644 --- a/.github/workflows/reuseable-ci-checks.yml +++ b/.github/workflows/reuseable-ci-checks.yml @@ -340,7 +340,9 @@ jobs: # Echo the entire artifact list for debugging purposes echo "Artifact List: $ARTIFACT_LIST" - ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts[] | select(.name=="coverage-report") | .url') + #qqqq worked mostly ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts[] | select(.name=="coverage-report") | .url') + ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts | map(select(.name=="coverage-report")) | sort_by(.created_at) | last | .url') + # Echo the artifact URL to confirm echo "Artifact URL: $ARTIFACT_URL" diff --git a/.github/workflows/workflow-readme.md b/.github/workflows/workflow-readme.md index e008223..cef6cb3 100644 --- a/.github/workflows/workflow-readme.md +++ b/.github/workflows/workflow-readme.md @@ -85,12 +85,43 @@ The individual steps also automatically pass so can see if any error at the end - autoverging is being tried for major and minor - branch checks must pass for merge on automated_version - checks required but overrideable for all workflows +- dependabot secret names to match repos ones where need to share +- dependabot not need to build package later brnch does + +## Dependabot Pipeline (AI generatated diag) + +```mermaid +flowchart TD + %% Dependabot PR to initial branch + A[Dependabot PR] --> B[Automatic_version_update_dependabot] + + %% Checks on the dependabot branch + B --> C[Run Checks] + C --> C1[Commit name check ❌ skipped] + C --> C2[Branch name check ❌ skipped] + C --> C3[Build as release] + C --> C4[Unit tests] + C --> C5[E2E tests] + + %% Weekly merge to staging + B -->|Weekly merge via collected-dependabot-to-staging.yml| D[Automatic_collected_dependabot_staging] + + %% Staging checks and dev build + D --> E[Run Checks & Dev Build] + E --> E1[Checks again] + E --> E2[Build dev package] + E --> E3[Showcase dev page] + + %% Weekly merge to master + D -->|Weekly merge via collected-dependabot-staging-to-master.yml| F[Master] +``` + ## Versioning Via semantic release and recorded as a generate c# file used by a blazor component ## Alternative Approaches -``` + name: Pull Request Checks # ⚠️ pull_request_target is dangerous it allows secrets to be used by forks and bots, ⚠️ From 306ec36b73e8007657367228d256123f4491634e Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 10:58:21 +0100 Subject: [PATCH 13/39] chore(cicd): safer disabling of scripts --- ...collected-dependabot-staging-to-master.yml | 87 ++++++++++--------- .../collected-dependabot-to-staging.yml | 3 + 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/.github/workflows/collected-dependabot-staging-to-master.yml b/.github/workflows/collected-dependabot-staging-to-master.yml index fbb0e0f..ffcb013 100644 --- a/.github/workflows/collected-dependabot-staging-to-master.yml +++ b/.github/workflows/collected-dependabot-staging-to-master.yml @@ -1,49 +1,52 @@ -# qqqq in development name: Collected Dependabot Promotion From Staging To Master on: - schedule: - # we want the opposite weeks to staging so we get a week where it occurs in manual testing - - cron: '0 9 8-14 * 1' # Second Monday of month - - cron: '0 9 22-28 * 1' # Fourth Monday of month workflow_dispatch: +# # qqqq in development +# name: Collected Dependabot Promotion From Staging To Master +# on: + # schedule: + # # we want the opposite weeks to staging so we get a week where it occurs in manual testing + # - cron: '0 9 8-14 * 1' # Second Monday of month + # - cron: '0 9 22-28 * 1' # Fourth Monday of month + # workflow_dispatch: -jobs: - promote-to-master: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 +# jobs: + # promote-to-master: + # runs-on: ubuntu-latest + # permissions: + # contents: write + # pull-requests: write + # steps: + # - name: Checkout + # uses: actions/checkout@v4 + # with: + # fetch-depth: 0 - - name: Check for changes - id: changes - run: | - git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging - git fetch origin master:master # or main/master - whatever your prod branch is + # - name: Check for changes + # id: changes + # run: | + # git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + # git fetch origin master:master - if git diff --quiet master Automatic_collected_dependabot_staging; then - echo "has_changes=false" >> $GITHUB_OUTPUT - else - echo "has_changes=true" >> $GITHUB_OUTPUT - fi + # if git diff --quiet master Automatic_collected_dependabot_staging; then + # echo "has_changes=false" >> $GITHUB_OUTPUT + # else + # echo "has_changes=true" >> $GITHUB_OUTPUT + # fi - - name: Create PR to master - if: steps.changes.outputs.has_changes == 'true' - run: | - if gh pr list --head Automatic_collected_dependabot_staging --base master --json number --jq '.[0].number' | grep -q .; then - echo "PR already exists, skipping creation" - else - gh pr create \ - --base master \ - --head Automatic_collected_dependabot_staging \ - --title "Fortnightly dependabot collected master promotion - $(date +%Y-%m-%d)" \ - --body "Automated weekly promotion from staging to master after testing period" \ - --auto-merge \ - --merge - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + # - name: Create PR to master + # if: steps.changes.outputs.has_changes == 'true' + # run: | + # if gh pr list --head Automatic_collected_dependabot_staging --base master --json number --jq '.[0].number' | grep -q .; then + # echo "PR already exists, skipping creation" + # else + # gh pr create \ + # --base master \ + # --head Automatic_collected_dependabot_staging \ + # --title "Fortnightly dependabot collected master promotion - $(date +%Y-%m-%d)" \ + # --body "Automated weekly promotion from staging to master after testing period" \ + # --auto-merge \ + # --merge + # fi + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-to-staging.yml b/.github/workflows/collected-dependabot-to-staging.yml index eb067b9..817768d 100644 --- a/.github/workflows/collected-dependabot-to-staging.yml +++ b/.github/workflows/collected-dependabot-to-staging.yml @@ -1,4 +1,7 @@ # # qqqq in development +name: Dependabot Collected Promotion To Staging +on: + workflow_dispatch: # name: Dependabot Collected Promotion To Staging # # this logic will require branch ruleset checks of running the dev pipeline # on: From db831a2c2f306f11f77425f91d2434ca0b0534fc Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 12:21:43 +0100 Subject: [PATCH 14/39] chore(automerge): gh docs --- ...e-dependabot-prs-into-collected-branch.yml | 52 ++++++++++--------- README.md | 5 ++ 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 0c420fc..dbbcfb1 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -1,12 +1,12 @@ # qqqq in development -# This script seperate major and minor but we do merge them into the same branch. -# Having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. -name: Auto-merge Dependabot PRs into collected branch +# this script seperate major and minor but we do merge them into the same branch. +# having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. +name: auto-merge dependabot prs into collected branch on: pull_request: # synchronize types: [opened, synchronize] - branches: [Automatic_version_update_dependabot] # Make sure this matches your actual branch name + branches: [automatic_version_update_dependabot] # make sure this matches your actual branch name check_suite: types: [completed] workflow_dispatch: @@ -19,43 +19,45 @@ jobs: debug: runs-on: ubuntu-latest steps: - - name: Debug info + - name: debug info run: | - echo "Actor: ${{ github.actor }}" - echo "PR Title: ${{ github.event.pull_request.title }}" - echo "Target Branch: ${{ github.event.pull_request.base.ref }}" - echo "Source Branch: ${{ github.event.pull_request.head.ref }}" - - name: Wait for other checks to start - - name: Delay for check + echo "actor: ${{ github.actor }}" + echo "pr title: ${{ github.event.pull_request.title }}" + echo "target branch: ${{ github.event.pull_request.base.ref }}" + echo "source branch: ${{ github.event.pull_request.head.ref }}" + - name: wait for other checks to start + - name: delay for check run: | # drop later qqqq shouldnt need but its running before auto - echo "Waiting 4 minutes for other checks to start running..." + echo "waiting 4 minutes for other checks to start running..." sleep 240 auto-merge: runs-on: ubuntu-latest # if dependabot and checks ran if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') steps: - - name: Extract update type + - name: extract update type id: extract run: | - PR_TITLE="${{ github.event.pull_request.title }}" - if [[ $PR_TITLE == *"(major)"* ]]; then - echo "update_type=major" >> $GITHUB_OUTPUT + pr_title="${{ github.event.pull_request.title }}" + if [[ $pr_title == *"(major)"* ]]; then + echo "update_type=major" >> $github_output else - echo "update_type=minor_or_patch" >> $GITHUB_OUTPUT + echo "update_type=minor_or_patch" >> $github_output fi - - name: Auto-merge minor and patch updates + - name: auto-merge minor and patch updates if: steps.extract.outputs.update_type == 'minor_or_patch' - # Auto should set the the request to merge once checks complete - run: gh pr merge --auto --squash "${{ github.event.pull_request.html_url }}" + # auto should set the the request to merge once checks complete + # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" + run: gh pr merge --auto 1 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} - - name: Auto-merge major updates + - name: auto-merge major updates if: steps.extract.outputs.update_type == 'major' - # Auto should set the the request to merge once checks complete - run: gh pr merge --auto --squash "${{ github.event.pull_request.html_url }}" + # auto should set the the request to merge once checks complete + # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" + run: gh pr merge --auto 1 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 404d9b3..4ec4215 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ the ability to produce static prerendered html. The prerendered html is written - **Node.js 18+** and npm - **Git** configured with your credentials - **PowerShell 5.1+** +- **Longfile names enabled on the system** > ⚠️ **Important:** All commands in this guide require **PowerShell running as Administrator** ### Quick Setup ⚡ @@ -116,6 +117,10 @@ The project should now work. See other sections for what projects to run, and co > ⚠️ read the contribution section before creating a branch or commits ⚠️ +### Trouble Shooting +- Longpaths may be required if E2E Client is not building. + - Follow [microsoft docs](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry) + - or Win + R -> type regedit -> path to the option HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem -> set LongPathsEnabled to 1 ### Getting Started with the Project following Setup From 8db2b137b755697948e9fb9ccb8c397cb6e3df72 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 12:47:25 +0100 Subject: [PATCH 15/39] chore(dependabot): auto --- .../automerge-dependabot-prs-into-collected-branch.yml | 3 ++- .gitignore | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index dbbcfb1..72540d9 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -25,12 +25,13 @@ jobs: echo "pr title: ${{ github.event.pull_request.title }}" echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" - - name: wait for other checks to start + - name: delay for check run: | # drop later qqqq shouldnt need but its running before auto echo "waiting 4 minutes for other checks to start running..." sleep 240 + auto-merge: runs-on: ubuntu-latest # if dependabot and checks ran diff --git a/.gitignore b/.gitignore index fad9453..ca74745 100644 --- a/.gitignore +++ b/.gitignore @@ -237,3 +237,4 @@ TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/Logs/* # Generated version info files TELBlazor.Components/TELBlazorPackageVersion/VersionInfo*.cs /.github/workflows/test.yml +/Optimisation Notes.md From 8167b1b02aeec95f548d40f402b623cae090e905 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 13:21:45 +0100 Subject: [PATCH 16/39] chore(dependabot): automated --- ...e-dependabot-prs-into-collected-branch.yml | 5 +- ...collected-dependabot-staging-to-master.yml | 52 ------------------- ...-dependabot-staging-to-master.yml-disabled | 49 +++++++++++++++++ .../collected-dependabot-to-staging.yml | 49 ----------------- ...llected-dependabot-to-staging.yml-disabled | 47 +++++++++++++++++ 5 files changed, 100 insertions(+), 102 deletions(-) delete mode 100644 .github/workflows/collected-dependabot-staging-to-master.yml create mode 100644 .github/workflows/collected-dependabot-staging-to-master.yml-disabled delete mode 100644 .github/workflows/collected-dependabot-to-staging.yml create mode 100644 .github/workflows/collected-dependabot-to-staging.yml-disabled diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 72540d9..c52c612 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -23,6 +23,8 @@ jobs: run: | echo "actor: ${{ github.actor }}" echo "pr title: ${{ github.event.pull_request.title }}" + echo "github event_name: ${{ github.event_name }}" + echo "github event_suite conlusion: ${{ github.event.check_suite.conclusion }}" echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" @@ -35,7 +37,8 @@ jobs: auto-merge: runs-on: ubuntu-latest # if dependabot and checks ran - if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') + # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') + # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') steps: - name: extract update type id: extract diff --git a/.github/workflows/collected-dependabot-staging-to-master.yml b/.github/workflows/collected-dependabot-staging-to-master.yml deleted file mode 100644 index ffcb013..0000000 --- a/.github/workflows/collected-dependabot-staging-to-master.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Collected Dependabot Promotion From Staging To Master -on: - workflow_dispatch: -# # qqqq in development -# name: Collected Dependabot Promotion From Staging To Master -# on: - # schedule: - # # we want the opposite weeks to staging so we get a week where it occurs in manual testing - # - cron: '0 9 8-14 * 1' # Second Monday of month - # - cron: '0 9 22-28 * 1' # Fourth Monday of month - # workflow_dispatch: - -# jobs: - # promote-to-master: - # runs-on: ubuntu-latest - # permissions: - # contents: write - # pull-requests: write - # steps: - # - name: Checkout - # uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - - # - name: Check for changes - # id: changes - # run: | - # git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging - # git fetch origin master:master - - # if git diff --quiet master Automatic_collected_dependabot_staging; then - # echo "has_changes=false" >> $GITHUB_OUTPUT - # else - # echo "has_changes=true" >> $GITHUB_OUTPUT - # fi - - # - name: Create PR to master - # if: steps.changes.outputs.has_changes == 'true' - # run: | - # if gh pr list --head Automatic_collected_dependabot_staging --base master --json number --jq '.[0].number' | grep -q .; then - # echo "PR already exists, skipping creation" - # else - # gh pr create \ - # --base master \ - # --head Automatic_collected_dependabot_staging \ - # --title "Fortnightly dependabot collected master promotion - $(date +%Y-%m-%d)" \ - # --body "Automated weekly promotion from staging to master after testing period" \ - # --auto-merge \ - # --merge - # fi - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-staging-to-master.yml-disabled b/.github/workflows/collected-dependabot-staging-to-master.yml-disabled new file mode 100644 index 0000000..5a1332e --- /dev/null +++ b/.github/workflows/collected-dependabot-staging-to-master.yml-disabled @@ -0,0 +1,49 @@ +# qqqq in development +name: Collected Dependabot Promotion From Staging To Master +on: + schedule: + # we want the opposite weeks to staging so we get a week where it occurs in manual testing + - cron: '0 9 8-14 * 1' # Second Monday of month + - cron: '0 9 22-28 * 1' # Fourth Monday of month + workflow_dispatch: + +jobs: + promote-to-master: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for changes + id: changes + run: | + git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + git fetch origin master:master + + if git diff --quiet master Automatic_collected_dependabot_staging; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + - name: Create PR to master + if: steps.changes.outputs.has_changes == 'true' + run: | + if gh pr list --head Automatic_collected_dependabot_staging --base master --json number --jq '.[0].number' | grep -q .; then + echo "PR already exists, skipping creation" + else + gh pr create \ + --base master \ + --head Automatic_collected_dependabot_staging \ + --title "Fortnightly dependabot collected master promotion - $(date +%Y-%m-%d)" \ + --body "Automated weekly promotion from staging to master after testing period" \ + --auto-merge \ + --merge + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-to-staging.yml b/.github/workflows/collected-dependabot-to-staging.yml deleted file mode 100644 index 817768d..0000000 --- a/.github/workflows/collected-dependabot-to-staging.yml +++ /dev/null @@ -1,49 +0,0 @@ -# # qqqq in development -name: Dependabot Collected Promotion To Staging -on: - workflow_dispatch: -# name: Dependabot Collected Promotion To Staging -# # this logic will require branch ruleset checks of running the dev pipeline -# on: - # schedule: - # # Promotion from staging to release should be a week apart so alternating weeks (also live updates dangerous) - # - cron: '0 9 1-7 * 1' # First Monday of month - # - cron: '0 9 15-21 * 1' # Third Monday of month - # workflow_dispatch: # Allow manual trigger - -# jobs: - # promote-to-automatic-collected-dependabot-staging: - # runs-on: ubuntu-latest - # permissions: - # contents: write - # pull-requests: write - # steps: - # - name: Checkout - # uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - - # - name: Check for changes - # id: changes - # run: | - # git fetch origin Automatic_version_update_dependabot:Automatic_version_update_dependabot - # git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging - - # if git diff --quiet Automatic_collected_dependabot_staging Automatic_version_update_dependabot; then - # echo "has_changes=false" >> $GITHUB_OUTPUT - # else - # echo "has_changes=true" >> $GITHUB_OUTPUT - # fi - - # - name: Create PR to Automatic_collected_dependabot_staging - # if: steps.changes.outputs.has_changes == 'true' - # run: | - # gh pr create \ - # --base Automatic_collected_dependabot_staging \ - # --head Automatic_version_update_dependabot \ - # --title "Fortnightly dependabot collected to staging - $(date +%Y-%m-%d)" \ - # --body "Automated Fortnightly promotion of dependency updates from dependabot" \ - # --auto-merge \ - # --merge - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/collected-dependabot-to-staging.yml-disabled b/.github/workflows/collected-dependabot-to-staging.yml-disabled new file mode 100644 index 0000000..b3dba35 --- /dev/null +++ b/.github/workflows/collected-dependabot-to-staging.yml-disabled @@ -0,0 +1,47 @@ +# qqqq in development + +name: Dependabot Collected Promotion To Staging +# this logic will require branch ruleset checks of running the dev pipeline +on: + schedule: + # Promotion from staging to release should be a week apart so alternating weeks (also live updates dangerous) + - cron: '0 9 1-7 * 1' # First Monday of month + - cron: '0 9 15-21 * 1' # Third Monday of month + workflow_dispatch: # Allow manual trigger + +jobs: + promote-to-automatic-collected-dependabot-staging: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for changes + id: changes + run: | + git fetch origin Automatic_version_update_dependabot:Automatic_version_update_dependabot + git fetch origin Automatic_collected_dependabot_staging:Automatic_collected_dependabot_staging + + if git diff --quiet Automatic_collected_dependabot_staging Automatic_version_update_dependabot; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + - name: Create PR to Automatic_collected_dependabot_staging + if: steps.changes.outputs.has_changes == 'true' + run: | + gh pr create \ + --base Automatic_collected_dependabot_staging \ + --head Automatic_version_update_dependabot \ + --title "Fortnightly dependabot collected to staging - $(date +%Y-%m-%d)" \ + --body "Automated Fortnightly promotion of dependency updates from dependabot" \ + --auto-merge \ + --merge + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From e962141c131aa4a0502a19ae65e7158c6f7d7494 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 13:49:41 +0100 Subject: [PATCH 17/39] chore(dependabot): autom --- ...e-dependabot-prs-into-collected-branch.yml | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index c52c612..dc03fe3 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -1,15 +1,17 @@ # qqqq in development +# qqqq not getting the events # this script seperate major and minor but we do merge them into the same branch. # having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. name: auto-merge dependabot prs into collected branch on: - pull_request: + # pull_request: # synchronize - types: [opened, synchronize] - branches: [automatic_version_update_dependabot] # make sure this matches your actual branch name + # types: [opened, synchronize] + # branches: [automatic_version_update_dependabot] # make sure this matches your actual branch name check_suite: types: [completed] workflow_dispatch: + permissions: contents: write pull-requests: write @@ -27,6 +29,10 @@ jobs: echo "github event_suite conlusion: ${{ github.event.check_suite.conclusion }}" echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" + echo "Check Suite ID: ${{ github.event.check_suite.id }}" + echo "Conclusion: ${{ github.event.check_suite.conclusion }}" + echo "Target Branch: ${{ github.event.check_suite.pull_requests[0].base.ref }}" + echo "PR Number: ${{ github.event.check_suite.pull_requests[0].number }}" - name: delay for check run: | @@ -36,10 +42,20 @@ jobs: auto-merge: runs-on: ubuntu-latest + # if: github.event.check_suite.pull_requests[0].base.ref == 'main' # if dependabot and checks ran # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Set up GitHub CLI + run: | + # Install GitHub CLI (gh) + sudo apt-get update + sudo apt-get install gh + - name: extract update type id: extract run: | From d744e96a1861e6dd018be26dc151212c84b6cc1c Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 14:21:21 +0100 Subject: [PATCH 18/39] chore(dependabot): naming caps --- .../automerge-dependabot-prs-into-collected-branch.yml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index dc03fe3..74c4e86 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -7,7 +7,7 @@ on: # pull_request: # synchronize # types: [opened, synchronize] - # branches: [automatic_version_update_dependabot] # make sure this matches your actual branch name + # branches: [Automatic_version_update_dependabot] # make sure this matches your actual branch name check_suite: types: [completed] workflow_dispatch: @@ -33,12 +33,7 @@ jobs: echo "Conclusion: ${{ github.event.check_suite.conclusion }}" echo "Target Branch: ${{ github.event.check_suite.pull_requests[0].base.ref }}" echo "PR Number: ${{ github.event.check_suite.pull_requests[0].number }}" - - - name: delay for check - run: | - # drop later qqqq shouldnt need but its running before auto - echo "waiting 4 minutes for other checks to start running..." - sleep 240 + auto-merge: runs-on: ubuntu-latest @@ -46,6 +41,7 @@ jobs: # if dependabot and checks ran # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') + if: github.event.check_suite.conclusion == 'success' && github.actor == 'dependabot[bot]' && github.event.check_suite.pull_requests[0].base.ref == 'Automatic_version_update_dependabot' steps: - name: Checkout the repository uses: actions/checkout@v3 From 942f2ed1aa62d6cbd87bd0051da23166d979f0f0 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 14:34:50 +0100 Subject: [PATCH 19/39] chore(dep): remove check for now --- .../automerge-dependabot-prs-into-collected-branch.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 74c4e86..5ceface 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -41,7 +41,10 @@ jobs: # if dependabot and checks ran # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') - if: github.event.check_suite.conclusion == 'success' && github.actor == 'dependabot[bot]' && github.event.check_suite.pull_requests[0].base.ref == 'Automatic_version_update_dependabot' + + + # qqqq add in after testing && github.actor == 'dependabot[bot]' + if: github.event.check_suite.conclusion == 'success' && github.event.check_suite.pull_requests[0].base.ref == 'Automatic_version_update_dependabot' steps: - name: Checkout the repository uses: actions/checkout@v3 @@ -57,9 +60,9 @@ jobs: run: | pr_title="${{ github.event.pull_request.title }}" if [[ $pr_title == *"(major)"* ]]; then - echo "update_type=major" >> $github_output + echo "update_type=major" >> $GITHUB_OUTPUT else - echo "update_type=minor_or_patch" >> $github_output + echo "update_type=minor_or_patch" >> $GITHUB_OUTPUT fi - name: auto-merge minor and patch updates From 15aa4b365a725e756aaabf830b6801dd95ca6ca0 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 14:46:21 +0100 Subject: [PATCH 20/39] chore(deps): token definition --- .../automerge-dependabot-prs-into-collected-branch.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 5ceface..b6f25f3 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -69,14 +69,16 @@ jobs: if: steps.extract.outputs.update_type == 'minor_or_patch' # auto should set the the request to merge once checks complete # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" - run: gh pr merge --auto 1 + # run: gh pr merge --auto 1 + run: gh pr merge --auto ${{ github.event.check_suite.pull_requests[0].number }} env: - github_token: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: auto-merge major updates if: steps.extract.outputs.update_type == 'major' # auto should set the the request to merge once checks complete # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" - run: gh pr merge --auto 1 + # run: gh pr merge --auto 1 + run: gh pr merge --auto ${{ github.event.check_suite.pull_requests[0].number }} env: - github_token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From acb65e516611ef35bbd8c05fbd8a1d7f57c10a9a Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 14:55:11 +0100 Subject: [PATCH 21/39] chore(dep): merge check --- .../automerge-dependabot-prs-into-collected-branch.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index b6f25f3..782fd1c 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -70,7 +70,7 @@ jobs: # auto should set the the request to merge once checks complete # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" # run: gh pr merge --auto 1 - run: gh pr merge --auto ${{ github.event.check_suite.pull_requests[0].number }} + run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -79,6 +79,6 @@ jobs: # auto should set the the request to merge once checks complete # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" # run: gh pr merge --auto 1 - run: gh pr merge --auto ${{ github.event.check_suite.pull_requests[0].number }} + run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From a0b408711e4ea8a8c038d561a1eb7ca1bdd0633a Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 15:22:16 +0100 Subject: [PATCH 22/39] chore(cicd): title catching --- ...omerge-dependabot-prs-into-collected-branch.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 782fd1c..d84eaa6 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -33,6 +33,15 @@ jobs: echo "Conclusion: ${{ github.event.check_suite.conclusion }}" echo "Target Branch: ${{ github.event.check_suite.pull_requests[0].base.ref }}" echo "PR Number: ${{ github.event.check_suite.pull_requests[0].number }}" + + - name: Dump event payload + run: | + echo "==== EVENT NAME ====" + echo "${{ github.event_name }}" + echo "==== RAW CHECK_SUITE PAYLOAD ====" + echo '${{ toJson(github.event.check_suite) }}' + echo "==== PRs in this check suite ====" + echo '${{ toJson(github.event.check_suite.pull_requests) }}' auto-merge: @@ -58,7 +67,10 @@ jobs: - name: extract update type id: extract run: | - pr_title="${{ github.event.pull_request.title }}" + pr_number=${{ github.event.check_suite.pull_requests[0].number }} + # pr_title="${{ github.event.pull_request.title }}" + pr_title=$(gh pr view "$pr_number" --json title --jq .title) + echo "PR title: $pr_title" if [[ $pr_title == *"(major)"* ]]; then echo "update_type=major" >> $GITHUB_OUTPUT else From 940430de3031e498a617f73c11728ca404969d94 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 15:45:13 +0100 Subject: [PATCH 23/39] chore(depend): title getting --- .../automerge-dependabot-prs-into-collected-branch.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index d84eaa6..8386653 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -66,8 +66,12 @@ jobs: - name: extract update type id: extract + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + echo "get pr number" pr_number=${{ github.event.check_suite.pull_requests[0].number }} + echo "PR title: $pr_number" # pr_title="${{ github.event.pull_request.title }}" pr_title=$(gh pr view "$pr_number" --json title --jq .title) echo "PR title: $pr_title" From 02114f0ccd5b1213176080409162b0d2968cfcb1 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 16:31:07 +0100 Subject: [PATCH 24/39] chore(deps): refactor --- ...e-dependabot-prs-into-collected-branch.yml | 69 +++++-------- ...rs-into-collected-branch.yml-works-defunct | 99 +++++++++++++++++++ 2 files changed, 123 insertions(+), 45 deletions(-) create mode 100644 .github/workflows/automerge-dependabot-prs-into-collected-branch.yml-works-defunct diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 8386653..7e01694 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -1,16 +1,12 @@ # qqqq in development -# qqqq not getting the events # this script seperate major and minor but we do merge them into the same branch. # having two steps allows us to easily turn off major changes in future and then script them to their own branch and pipeline. name: auto-merge dependabot prs into collected branch on: - # pull_request: - # synchronize - # types: [opened, synchronize] - # branches: [Automatic_version_update_dependabot] # make sure this matches your actual branch name - check_suite: - types: [completed] - workflow_dispatch: + pull_request: + types: [opened, synchronize] + branches: [Automatic_version_update_dependabot] # make sure this matches your actual branch name + permissions: contents: write @@ -26,43 +22,33 @@ jobs: echo "actor: ${{ github.actor }}" echo "pr title: ${{ github.event.pull_request.title }}" echo "github event_name: ${{ github.event_name }}" - echo "github event_suite conlusion: ${{ github.event.check_suite.conclusion }}" echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" - echo "Check Suite ID: ${{ github.event.check_suite.id }}" - echo "Conclusion: ${{ github.event.check_suite.conclusion }}" - echo "Target Branch: ${{ github.event.check_suite.pull_requests[0].base.ref }}" - echo "PR Number: ${{ github.event.check_suite.pull_requests[0].number }}" + echo "PR Number: ${{ github.event.pull_request.number }}" - name: Dump event payload run: | echo "==== EVENT NAME ====" echo "${{ github.event_name }}" - echo "==== RAW CHECK_SUITE PAYLOAD ====" - echo '${{ toJson(github.event.check_suite) }}' - echo "==== PRs in this check suite ====" - echo '${{ toJson(github.event.check_suite.pull_requests) }}' + echo "==== RAW PULL_REQUEST PAYLOAD ====" + echo '${{ toJson(github.event.pull_request) }}' - + # Branch rules ensure doesnt auto merge if shouldnt auto-merge: runs-on: ubuntu-latest - # if: github.event.check_suite.pull_requests[0].base.ref == 'main' - # if dependabot and checks ran - # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') - # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') - - - # qqqq add in after testing && github.actor == 'dependabot[bot]' - if: github.event.check_suite.conclusion == 'success' && github.event.check_suite.pull_requests[0].base.ref == 'Automatic_version_update_dependabot' + # qqqq add in after testing if: github.actor == 'dependabot[bot]' steps: - name: Checkout the repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 + + # - name: Set up GitHub CLI + # run: | + # # Install GitHub CLI (gh) + # sudo apt-get update + # sudo apt-get install gh - name: Set up GitHub CLI - run: | - # Install GitHub CLI (gh) - sudo apt-get update - sudo apt-get install gh + uses: github/gh-cli@v2 - name: extract update type id: extract @@ -70,10 +56,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "get pr number" - pr_number=${{ github.event.check_suite.pull_requests[0].number }} - echo "PR title: $pr_number" - # pr_title="${{ github.event.pull_request.title }}" - pr_title=$(gh pr view "$pr_number" --json title --jq .title) + pr_title=${{ github.event.pull_request.title }} echo "PR title: $pr_title" if [[ $pr_title == *"(major)"* ]]; then echo "update_type=major" >> $GITHUB_OUTPUT @@ -83,18 +66,14 @@ jobs: - name: auto-merge minor and patch updates if: steps.extract.outputs.update_type == 'minor_or_patch' - # auto should set the the request to merge once checks complete - # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" - # run: gh pr merge --auto 1 - run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} + run: | + gh pr merge --auto --merge "${{ github.event.pull_request.number }}" env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: auto-merge major updates if: steps.extract.outputs.update_type == 'major' - # auto should set the the request to merge once checks complete - # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" - # run: gh pr merge --auto 1 - run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} + run: | + gh pr merge --auto --merge "${{ github.event.pull_request.number }}" env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml-works-defunct b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml-works-defunct new file mode 100644 index 0000000..4f20747 --- /dev/null +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml-works-defunct @@ -0,0 +1,99 @@ +# qqqq this does add auto merge but seems to trigger on the first set of checks git guardian (it seems), +# also it calls for checks not specifically for out branch +# so an approach based one the branch is likely better +name: auto-merge dependabot prs into collected branch +on: + # pull_request: + # synchronize + # types: [opened, synchronize] + # branches: [Automatic_version_update_dependabot] # make sure this matches your actual branch name + check_suite: + types: [completed] + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + checks: read + +jobs: + debug: + runs-on: ubuntu-latest + steps: + - name: debug info + run: | + echo "actor: ${{ github.actor }}" + echo "pr title: ${{ github.event.pull_request.title }}" + echo "github event_name: ${{ github.event_name }}" + echo "github event_suite conlusion: ${{ github.event.check_suite.conclusion }}" + echo "target branch: ${{ github.event.pull_request.base.ref }}" + echo "source branch: ${{ github.event.pull_request.head.ref }}" + echo "Check Suite ID: ${{ github.event.check_suite.id }}" + echo "Conclusion: ${{ github.event.check_suite.conclusion }}" + echo "Target Branch: ${{ github.event.check_suite.pull_requests[0].base.ref }}" + echo "PR Number: ${{ github.event.check_suite.pull_requests[0].number }}" + + - name: Dump event payload + run: | + echo "==== EVENT NAME ====" + echo "${{ github.event_name }}" + echo "==== RAW CHECK_SUITE PAYLOAD ====" + echo '${{ toJson(github.event.check_suite) }}' + echo "==== PRs in this check suite ====" + echo '${{ toJson(github.event.check_suite.pull_requests) }}' + + + auto-merge: + runs-on: ubuntu-latest + # if: github.event.check_suite.pull_requests[0].base.ref == 'main' + # if dependabot and checks ran + # if: (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') + # qqqq put back in later if: (github.actor == 'dependabot[bot]' || github.event_name == 'workflow_dispatch')&& (github.event_name != 'check_suite' || github.event.check_suite.conclusion == 'success') + + + # qqqq add in after testing && github.actor == 'dependabot[bot]' + if: github.event.check_suite.conclusion == 'success' && github.event.check_suite.pull_requests[0].base.ref == 'Automatic_version_update_dependabot' + steps: + - name: Checkout the repository + uses: actions/checkout@v3 + + - name: Set up GitHub CLI + run: | + # Install GitHub CLI (gh) + sudo apt-get update + sudo apt-get install gh + + - name: extract update type + id: extract + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "get pr number" + pr_number=${{ github.event.check_suite.pull_requests[0].number }} + echo "PR title: $pr_number" + # pr_title="${{ github.event.pull_request.title }}" + pr_title=$(gh pr view "$pr_number" --json title --jq .title) + echo "PR title: $pr_title" + if [[ $pr_title == *"(major)"* ]]; then + echo "update_type=major" >> $GITHUB_OUTPUT + else + echo "update_type=minor_or_patch" >> $GITHUB_OUTPUT + fi + + - name: auto-merge minor and patch updates + if: steps.extract.outputs.update_type == 'minor_or_patch' + # auto should set the the request to merge once checks complete + # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" + # run: gh pr merge --auto 1 + run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: auto-merge major updates + if: steps.extract.outputs.update_type == 'major' + # auto should set the the request to merge once checks complete + # qqqq could squash for cleaner? --squash "${{ github.event.pull_request.html_url }}" + # run: gh pr merge --auto 1 + run: gh pr merge --auto --merge ${{ github.event.check_suite.pull_requests[0].number }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 098a925a830a751c5c149fa577244551860b9b64 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 16:53:23 +0100 Subject: [PATCH 25/39] chore(dependabot): automerge --- ...e-dependabot-prs-into-collected-branch.yml | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 7e01694..b3c9f4a 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -5,7 +5,7 @@ name: auto-merge dependabot prs into collected branch on: pull_request: types: [opened, synchronize] - branches: [Automatic_version_update_dependabot] # make sure this matches your actual branch name + branches: [Automatic_version_update_dependabot] permissions: @@ -41,27 +41,26 @@ jobs: - name: Checkout the repository uses: actions/checkout@v4 - # - name: Set up GitHub CLI - # run: | - # # Install GitHub CLI (gh) - # sudo apt-get update - # sudo apt-get install gh - - name: Set up GitHub CLI - uses: github/gh-cli@v2 + run: | + # Install GitHub CLI (gh) + sudo apt-get update + sudo apt-get install gh - name: extract update type id: extract env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - echo "get pr number" - pr_title=${{ github.event.pull_request.title }} + echo "get pr title" + pr_title="${{ github.event.pull_request.title }}" echo "PR title: $pr_title" - if [[ $pr_title == *"(major)"* ]]; then + if [[ "$pr_title" == *"(major)"* ]]; then echo "update_type=major" >> $GITHUB_OUTPUT + echo "Detected major update" else echo "update_type=minor_or_patch" >> $GITHUB_OUTPUT + echo "Detected minor or patch update" fi - name: auto-merge minor and patch updates From f97d61bb9c182ab00a81fb2ad6f4cab4f9a9e193 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 1 Sep 2025 17:06:16 +0100 Subject: [PATCH 26/39] chore(deps): drop debug --- .../automerge-dependabot-prs-into-collected-branch.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index b3c9f4a..72b997e 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -25,13 +25,6 @@ jobs: echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" echo "PR Number: ${{ github.event.pull_request.number }}" - - - name: Dump event payload - run: | - echo "==== EVENT NAME ====" - echo "${{ github.event_name }}" - echo "==== RAW PULL_REQUEST PAYLOAD ====" - echo '${{ toJson(github.event.pull_request) }}' # Branch rules ensure doesnt auto merge if shouldnt auto-merge: From 7972622e9d983b544cbf4658797483ecba999905 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 8 Sep 2025 11:12:08 +0100 Subject: [PATCH 27/39] chore(workflow): readme --- .github/workflows/workflow-readme.md | 58 +--------------------------- 1 file changed, 2 insertions(+), 56 deletions(-) diff --git a/.github/workflows/workflow-readme.md b/.github/workflows/workflow-readme.md index cef6cb3..f26f5c6 100644 --- a/.github/workflows/workflow-readme.md +++ b/.github/workflows/workflow-readme.md @@ -121,59 +121,5 @@ Via semantic release and recorded as a generate c# file used by a blazor compone ## Alternative Approaches - -name: Pull Request Checks - -# ⚠️ pull_request_target is dangerous it allows secrets to be used by forks and bots, ⚠️ -# ⚠️ we want dependabot only to be using these secrets so addition logic requires an "if" for every job ⚠️ -# We will restrict it by making pull_request_target only for the Automatic_version_update_dependabot and then use -# an if to ensure its only by dependabot - -on: - pull_request: - branches: ['**'] # Run on all branches - branches-ignore: ['dependabot/**'] # Skip Dependabot PRs - pull_request_target: - branches: ['Automatic_version_update_dependabot'] # Base branch for Dependabot PRs - workflow_dispatch: - -jobs: - dummy: - if: | - (github.actor == 'dependabot[bot]' && - startsWith(github.head_ref, 'dependabot/') && - github.event_name == 'pull_request_target') - || - (github.actor != 'dependabot[bot]' && github.event_name == 'pull_request') - runs-on: ubuntu-latest - steps: - - name: Dummy Step - run: echo "This is a dummy job to allow workflow_dispatch" - - pull-request-call-reusable-ci-checks-workflow: - if: | - (github.actor == 'dependabot[bot]' && - startsWith(github.head_ref, 'dependabot/') && - github.event_name == 'pull_request_target') - || - (github.actor != 'dependabot[bot]' && github.event_name == 'pull_request') - name: Pull Request run CI Checks - uses: ./.github/workflows/reuseable-ci-checks.yml - needs: dummy - with: - runall: true - - # could try secrets:inherit QQQQ - secrets: - UNITTESTS_APPSETTINGS_DEVELOPMENT: ${{ secrets.UNITTESTS_APPSETTINGS_DEVELOPMENT }} - WASMSTATICCLIENT_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_DEVELOPMENT }} - WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }} - WASMSERVERHOST_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }} - TEL_GIT_PACKAGES_TOKEN: ${{secrets.NUGETKEY }} - - UNITTESTS_APPSETTINGS_PRODUCTION: ${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }} - WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOST_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }} - -``` +- dont use pull-request-target for security reasons if can avoid it and if do use ifs to control it based on what branch and who is calling the workflow +- can use secrets inherits might have been better for reuseable checks which because triggered by other workflows can directly access repo secrets instead need them passing From 2561a566dcf6e58b2e4b06f5330c56f53c41ddd3 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 15 Sep 2025 14:34:04 +0100 Subject: [PATCH 28/39] chore(cicd): More bredth as isnt triggering --- .../automerge-dependabot-prs-into-collected-branch.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 72b997e..f66275f 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -4,7 +4,7 @@ name: auto-merge dependabot prs into collected branch on: pull_request: - types: [opened, synchronize] + # types: [opened, synchronize] branches: [Automatic_version_update_dependabot] @@ -29,11 +29,12 @@ jobs: # Branch rules ensure doesnt auto merge if shouldnt auto-merge: runs-on: ubuntu-latest - # qqqq add in after testing if: github.actor == 'dependabot[bot]' + # qqqq add in after testing, and harder checks for what it is doing if: github.actor == 'dependabot[bot]' steps: - name: Checkout the repository uses: actions/checkout@v4 + # qqqq could use action - name: Set up GitHub CLI run: | # Install GitHub CLI (gh) @@ -42,6 +43,7 @@ jobs: - name: extract update type id: extract + # Specific dependabot token qqqq? env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From c432225ea889434ee6e56e3a7abd7f24adcee28d Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Mon, 15 Sep 2025 16:22:35 +0100 Subject: [PATCH 29/39] chore(cicd): Still not running pr failing for branch with checks --- .github/dependabot.yml | 6 ++++-- .../automerge-dependabot-prs-into-collected-branch.yml | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4d54b00..4ecced0 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,7 +19,8 @@ updates: interval: "daily" open-pull-requests-limit: 100 target-branch: "Automatic_version_update_dependabot" - rebase-strategy: "auto" + # qqqq put back in once dependabot flowing automaticaly + # rebase-strategy: "auto" ignore: # The cicd for TELBlazor manages the version to consume for showcase consuming the package - dependency-name: "TELBlazor.Components" @@ -30,4 +31,5 @@ updates: interval: "daily" open-pull-requests-limit: 100 target-branch: "Automatic_version_update_dependabot" - rebase-strategy: "auto" \ No newline at end of file + # qqqq put back in once dependabot flowing automaticaly + # rebase-strategy: "auto" \ No newline at end of file diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index f66275f..298cb94 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -12,6 +12,7 @@ permissions: contents: write pull-requests: write checks: read + issues: write jobs: debug: @@ -30,6 +31,7 @@ jobs: auto-merge: runs-on: ubuntu-latest # qqqq add in after testing, and harder checks for what it is doing if: github.actor == 'dependabot[bot]' + # if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'TechnologyEnhancedLearning/TELBlazor' steps: - name: Checkout the repository uses: actions/checkout@v4 From 7d4fe9be981351788c579b99ed411ddf912ecf3c Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 10:47:59 +0100 Subject: [PATCH 30/39] chore(cicd): Use only development appsettings in checks --- .github/workflows/reuseable-ci-checks.yml | 44 ++++++++++++++--------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/.github/workflows/reuseable-ci-checks.yml b/.github/workflows/reuseable-ci-checks.yml index 9523b66..daec6cb 100644 --- a/.github/workflows/reuseable-ci-checks.yml +++ b/.github/workflows/reuseable-ci-checks.yml @@ -23,14 +23,14 @@ on: required: true WASMSERVERHOST_APPSETTINGS_DEVELOPMENT: required: true - UNITTESTS_APPSETTINGS_PRODUCTION: - required: true - WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: - required: true - WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: - required: true - WASMSERVERHOST_APPSETTINGS_PRODUCTION: - required: true + # UNITTESTS_APPSETTINGS_PRODUCTION: + # required: true + # WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: + # required: true + # WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: + # required: true + # WASMSERVERHOST_APPSETTINGS_PRODUCTION: + # required: true TEL_GIT_PACKAGES_TOKEN: required: true @@ -90,10 +90,11 @@ jobs: paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Development.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }}' paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Development.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }}' - paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' + # qqqq drop later + # paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' for path in "${!paths[@]}"; do mkdir -p "$(dirname "$path")" @@ -117,6 +118,8 @@ jobs: run: dotnet workload install wasm-tools --skip-manifest-update --source https://api.nuget.org/v3/index.json - name: Build and create package locally + env: + ASPNETCORE_ENVIRONMENT: Development run: | dotnet build TELBlazor.Components -c Release \ /p:TELBlazorPackageVersion=$TELBLAZOR_PACKAGE_VERSION \ @@ -126,6 +129,8 @@ jobs: - name: Build solution without generating new package + env: + ASPNETCORE_ENVIRONMENT: Development run: | dotnet build TELBlazor.sln -c Release \ /p:TELBlazorPackageVersion=$TELBLAZOR_PACKAGE_VERSION \ @@ -259,10 +264,11 @@ jobs: paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Development.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }}' paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Development.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }}' - paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' - paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' + # qqqq drop + # paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' + # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' for path in "${!paths[@]}"; do mkdir -p "$(dirname "$path")" @@ -284,6 +290,8 @@ jobs: run: dotnet workload install wasm-tools --skip-manifest-update --source https://api.nuget.org/v3/index.json - name: Build and create package locally + env: + ASPNETCORE_ENVIRONMENT: Development run: | dotnet build TELBlazor.Components -c Release \ /p:TELBlazorPackageVersion=$TELBLAZOR_PACKAGE_VERSION \ @@ -292,6 +300,8 @@ jobs: /p:DisablePackageGeneration=false - name: Build solution without generating new package + env: + ASPNETCORE_ENVIRONMENT: Development run: | dotnet build TELBlazor.sln -c Release \ /p:TELBlazorPackageVersion=$TELBLAZOR_PACKAGE_VERSION \ @@ -305,6 +315,8 @@ jobs: - name: Run tests with coverage threshold check id: unit_e2e_tests + env: + ASPNETCORE_ENVIRONMENT: Development run: | dotnet test --no-build --no-restore -c Release \ /p:TELBlazorPackageVersion=$TELBLAZOR_PACKAGE_VERSION \ From 2f05f0e507e185419ad26ceb25bf514eafd21d0b Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 11:00:55 +0100 Subject: [PATCH 31/39] chore(cicd): need to not provide unneeded secrets even for test run --- .github/workflows/dev.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 630ea52..d7521d2 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -50,10 +50,10 @@ jobs: TEL_GIT_PACKAGES_TOKEN: ${{secrets.NUGETKEY }} # Prod - UNITTESTS_APPSETTINGS_PRODUCTION: ${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }} - WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOST_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }} + # UNITTESTS_APPSETTINGS_PRODUCTION: ${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }} + # WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }} + # WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }} + # WASMSERVERHOST_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }} # Now we've done due diligence # The checks have been allowed to run if the workflow fails so if there a multiple fails we know. From 8a00ed1a82353aaf5a7166d24b03591eecef9519 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 12:32:15 +0100 Subject: [PATCH 32/39] chore(cicd): Removing the prod appsetting from dev checks --- .github/workflows/pull_request.yml | 7 +------ .github/workflows/reuseable-ci-checks.yml | 16 +--------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 853771e..347caf5 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -23,9 +23,4 @@ jobs: WASMSTATICCLIENT_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_DEVELOPMENT }} WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }} WASMSERVERHOST_APPSETTINGS_DEVELOPMENT: ${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }} - TEL_GIT_PACKAGES_TOKEN: ${{secrets.NUGETKEY }} - - UNITTESTS_APPSETTINGS_PRODUCTION: ${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }} - WASMSTATICCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }} - WASMSERVERHOST_APPSETTINGS_PRODUCTION: ${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }} \ No newline at end of file + TEL_GIT_PACKAGES_TOKEN: ${{secrets.NUGETKEY }} \ No newline at end of file diff --git a/.github/workflows/reuseable-ci-checks.yml b/.github/workflows/reuseable-ci-checks.yml index daec6cb..d126610 100644 --- a/.github/workflows/reuseable-ci-checks.yml +++ b/.github/workflows/reuseable-ci-checks.yml @@ -90,12 +90,6 @@ jobs: paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Development.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }}' paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Development.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }}' - # qqqq drop later - # paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' - for path in "${!paths[@]}"; do mkdir -p "$(dirname "$path")" printf '%s' "${paths[$path]}" > "$path" @@ -264,12 +258,6 @@ jobs: paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Development.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_DEVELOPMENT }}' paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Development.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_DEVELOPMENT }}' - # qqqq drop - # paths["./TELBlazor.Components.UnitTests/appsettings.Production.json"]='${{ secrets.UNITTESTS_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.WasmStaticClient/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSTATICCLIENT_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/wwwroot/appsettings.Production.json"]='${{ secrets.WASMSERVERHOSTCLIENT_APPSETTINGS_PRODUCTION }}' - # paths["./TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/appsettings.Production.json"]='${{ secrets.WASMSERVERHOST_APPSETTINGS_PRODUCTION }}' - for path in "${!paths[@]}"; do mkdir -p "$(dirname "$path")" printf '%s' "${paths[$path]}" > "$path" @@ -352,10 +340,8 @@ jobs: # Echo the entire artifact list for debugging purposes echo "Artifact List: $ARTIFACT_LIST" - #qqqq worked mostly ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts[] | select(.name=="coverage-report") | .url') ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts | map(select(.name=="coverage-report")) | sort_by(.created_at) | last | .url') - - + # Echo the artifact URL to confirm echo "Artifact URL: $ARTIFACT_URL" echo "artifact_url=$ARTIFACT_URL" >> $GITHUB_ENV From 36aae75207a6ac1aea9b0dffa7d5228777f758a3 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 13:22:30 +0100 Subject: [PATCH 33/39] chore(cicd): More debugging --- .../automerge-dependabot-prs-into-collected-branch.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 298cb94..4581476 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -26,6 +26,9 @@ jobs: echo "target branch: ${{ github.event.pull_request.base.ref }}" echo "source branch: ${{ github.event.pull_request.head.ref }}" echo "PR Number: ${{ github.event.pull_request.number }}" + echo "event type: ${{ github.event.pull_request.type || 'N/A' }}" + echo "Pull request user login: ${{ github.event.pull_request.user.login }}" + echo "Repository: ${{ github.repository }}" # Branch rules ensure doesnt auto merge if shouldnt auto-merge: @@ -36,7 +39,6 @@ jobs: - name: Checkout the repository uses: actions/checkout@v4 - # qqqq could use action - name: Set up GitHub CLI run: | # Install GitHub CLI (gh) @@ -45,7 +47,6 @@ jobs: - name: extract update type id: extract - # Specific dependabot token qqqq? env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From 5789e0c3d8d39eb96b3f2526a5d116ec3232d391 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 13:30:42 +0100 Subject: [PATCH 34/39] chore(cicd): if for automerge --- .../automerge-dependabot-prs-into-collected-branch.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 4581476..2e8e2b5 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -29,12 +29,13 @@ jobs: echo "event type: ${{ github.event.pull_request.type || 'N/A' }}" echo "Pull request user login: ${{ github.event.pull_request.user.login }}" echo "Repository: ${{ github.repository }}" + echo "Event name: ${{ github.event_name }}" + echo "Event action: ${{ github.event.action }} # Branch rules ensure doesnt auto merge if shouldnt auto-merge: runs-on: ubuntu-latest - # qqqq add in after testing, and harder checks for what it is doing if: github.actor == 'dependabot[bot]' - # if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'TechnologyEnhancedLearning/TELBlazor' + if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'TechnologyEnhancedLearning/TELBlazor' }} steps: - name: Checkout the repository uses: actions/checkout@v4 From 4c59e2ea828e047936dab46fc8b2e8a34f897cd5 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 13:33:19 +0100 Subject: [PATCH 35/39] chore(cicd): quick --- .../automerge-dependabot-prs-into-collected-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml index 2e8e2b5..88fb9f2 100644 --- a/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml +++ b/.github/workflows/automerge-dependabot-prs-into-collected-branch.yml @@ -30,7 +30,7 @@ jobs: echo "Pull request user login: ${{ github.event.pull_request.user.login }}" echo "Repository: ${{ github.repository }}" echo "Event name: ${{ github.event_name }}" - echo "Event action: ${{ github.event.action }} + echo "Event action: ${{ github.event.action }}" # Branch rules ensure doesnt auto merge if shouldnt auto-merge: From 1fbdc38efa8004d282db7a4b79ef38f7db5d3927 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Tue, 16 Sep 2025 16:14:30 +0100 Subject: [PATCH 36/39] chore(cicd): qqqqs --- .github/dependabot.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4ecced0..4d54b00 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,8 +19,7 @@ updates: interval: "daily" open-pull-requests-limit: 100 target-branch: "Automatic_version_update_dependabot" - # qqqq put back in once dependabot flowing automaticaly - # rebase-strategy: "auto" + rebase-strategy: "auto" ignore: # The cicd for TELBlazor manages the version to consume for showcase consuming the package - dependency-name: "TELBlazor.Components" @@ -31,5 +30,4 @@ updates: interval: "daily" open-pull-requests-limit: 100 target-branch: "Automatic_version_update_dependabot" - # qqqq put back in once dependabot flowing automaticaly - # rebase-strategy: "auto" \ No newline at end of file + rebase-strategy: "auto" \ No newline at end of file From 082d84bce07558a24626a182d568c6b776ec2c52 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Wed, 17 Sep 2025 11:02:59 +0100 Subject: [PATCH 37/39] feat(newversion): new version BREAKING CHANGE: new version --- .../packages.lock.json | 36 +- .../packages.lock.json | 24 +- .../packages.lock.json | 24 +- .../packages.lock.json | 212 +- .../packages.lock.json | 538 +---- .../packages.lock.json | 1760 +---------------- 6 files changed, 13 insertions(+), 2581 deletions(-) diff --git a/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/packages.lock.json b/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/packages.lock.json index c05ad3b..a43a357 100644 --- a/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/packages.lock.json +++ b/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost.Client/packages.lock.json @@ -40,15 +40,15 @@ }, "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[8.0.19, )", - "resolved": "8.0.19", - "contentHash": "IhHf+zeZiaE5EXRyxILd4qM+Hj9cxV3sa8MpzZgeEhpvaG3a1VEGF6UCaPFLO44Kua3JkLKluE0SWVamS50PlA==" + "requested": "[8.0.20, )", + "resolved": "8.0.20", + "contentHash": "Rhcto2AjGvTO62+/VTmBpumBOmqIGp7nYEbTbmEXkCq4yPGxV8whju3/HsIA/bKyo2+DggaYk5+/8sxb1AbPTw==" }, "Microsoft.NET.Sdk.WebAssembly.Pack": { "type": "Direct", - "requested": "[8.0.19, )", - "resolved": "8.0.19", - "contentHash": "Cm/sq4ET7XGU7jBSfSh+s+eV0faJ1RnErpImRYN7+d5loWISBwl22qsM6sn9StUWKJao+xGvF0IxgyPVnY20Vw==" + "requested": "[8.0.20, )", + "resolved": "8.0.20", + "contentHash": "T8IgvEg6M4INrHw9K89JjslxP0D6fHYiogFvarNPSjfusHdV/KvwJU4YC1+lNOIIgpjslkb4WWSW9IuNxHdPLg==" }, "Serilog": { "type": "Direct", @@ -305,30 +305,8 @@ "System.Text.Encodings.Web": "8.0.0" } }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, "telblazor.components.showcase.shared": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Markdig": "[0.41.3, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Serilog": "[4.2.0, )", - "TELBlazor.Components": "[1.2.6-local, )" - } - }, - "Markdig": { - "type": "CentralTransitive", - "requested": "[0.41.3, )", - "resolved": "0.41.3", - "contentHash": "i3vSTyGpBGWbJB04aJ3cPJs0T3BV2e1nduW3EUHK/i+xUupYbym75iZPss/XjqhS5JlBErwQYnx7ofK3Zcsozg==" + "type": "Project" }, "Microsoft.AspNetCore.Components.Web": { "type": "CentralTransitive", diff --git a/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/packages.lock.json b/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/packages.lock.json index c01e0ce..b724e75 100644 --- a/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/packages.lock.json +++ b/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/TELBlazor.Components.ShowCase.E2ETests.WasmServerHost/packages.lock.json @@ -327,15 +327,6 @@ "System.Text.Encodings.Web": "8.0.0" } }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, "telblazor.components.showcase.e2etests.wasmserverhost.client": { "type": "Project", "dependencies": { @@ -352,20 +343,7 @@ } }, "telblazor.components.showcase.shared": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Markdig": "[0.41.3, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Serilog": "[4.2.0, )", - "TELBlazor.Components": "[1.2.6-local, )" - } - }, - "Markdig": { - "type": "CentralTransitive", - "requested": "[0.41.3, )", - "resolved": "0.41.3", - "contentHash": "i3vSTyGpBGWbJB04aJ3cPJs0T3BV2e1nduW3EUHK/i+xUupYbym75iZPss/XjqhS5JlBErwQYnx7ofK3Zcsozg==" + "type": "Project" }, "Microsoft.AspNetCore.Components.Web": { "type": "CentralTransitive", diff --git a/TELBlazor.Components.ShowCase.E2ETests/packages.lock.json b/TELBlazor.Components.ShowCase.E2ETests/packages.lock.json index 74639a6..dd2143d 100644 --- a/TELBlazor.Components.ShowCase.E2ETests/packages.lock.json +++ b/TELBlazor.Components.ShowCase.E2ETests/packages.lock.json @@ -1562,15 +1562,6 @@ "xunit.extensibility.core": "[2.9.0]" } }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, "telblazor.components.showcase.e2etests.wasmserverhost": { "type": "Project", "dependencies": { @@ -1605,14 +1596,7 @@ } }, "telblazor.components.showcase.shared": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Markdig": "[0.41.3, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Serilog": "[4.2.0, )", - "TELBlazor.Components": "[1.2.6-local, )" - } + "type": "Project" }, "Blazored.LocalStorage": { "type": "CentralTransitive", @@ -1623,12 +1607,6 @@ "Microsoft.AspNetCore.Components.Web": "8.0.0" } }, - "Markdig": { - "type": "CentralTransitive", - "requested": "[0.41.3, )", - "resolved": "0.41.3", - "contentHash": "i3vSTyGpBGWbJB04aJ3cPJs0T3BV2e1nduW3EUHK/i+xUupYbym75iZPss/XjqhS5JlBErwQYnx7ofK3Zcsozg==" - }, "Microsoft.AspNetCore.Components.Web": { "type": "CentralTransitive", "requested": "[8.0.14, )", diff --git a/TELBlazor.Components.ShowCase.Shared/packages.lock.json b/TELBlazor.Components.ShowCase.Shared/packages.lock.json index 354fe01..dd5b66c 100644 --- a/TELBlazor.Components.ShowCase.Shared/packages.lock.json +++ b/TELBlazor.Components.ShowCase.Shared/packages.lock.json @@ -1,216 +1,6 @@ { "version": 2, "dependencies": { - "net8.0": { - "Blazored.LocalStorage": { - "type": "Direct", - "requested": "[4.5.0, )", - "resolved": "4.5.0", - "contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==", - "dependencies": { - "Microsoft.AspNetCore.Components.Web": "8.0.0" - } - }, - "Markdig": { - "type": "Direct", - "requested": "[0.41.3, )", - "resolved": "0.41.3", - "contentHash": "i3vSTyGpBGWbJB04aJ3cPJs0T3BV2e1nduW3EUHK/i+xUupYbym75iZPss/XjqhS5JlBErwQYnx7ofK3Zcsozg==" - }, - "Microsoft.AspNetCore.Components.Web": { - "type": "Direct", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "h/XSCAHmBywDF6San0FGPyXxK6PZh1g/xz4Ln9yeJNgSmKq5F1ehgVStDkJr4d6pWGr2RRkNxgGYMLRnULMnKw==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14", - "Microsoft.AspNetCore.Components.Forms": "8.0.14", - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Primitives": "8.0.0", - "Microsoft.JSInterop": "8.0.14", - "System.IO.Pipelines": "8.0.0" - } - }, - "Serilog": { - "type": "Direct", - "requested": "[4.2.0, )", - "resolved": "4.2.0", - "contentHash": "gmoWVOvKgbME8TYR+gwMf7osROiWAURterc6Rt2dQyX7wtjZYpqFiA/pY6ztjGQKKV62GGCyOcmtP1UKMHgSmA==" - }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "lcKWEvzaJz+ahDj5J0zz05NGyv4vqEa2vLalBuBf69vL0qrWqqB/rwI4/zdyloun+fLTq1bCnsAwiplbFgQtAA==", - "dependencies": { - "Microsoft.AspNetCore.Metadata": "8.0.14", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.AspNetCore.Components": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "b/6dwE/ESturk5VHHzq/GP15qkcxb196T+qxFs4wzUkeZtCx2OuK+1rPIHSgsOjthnHNOAhCY7/9n5uLqyenKA==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "8.0.14", - "Microsoft.AspNetCore.Components.Analyzers": "8.0.14" - } - }, - "Microsoft.AspNetCore.Components.Analyzers": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "pHPb1bqV2ECTfOw2QcGQzO1/fdpo8mwekY8Jbycm2UZ6yvqLtZRRPd+RVzL74oXR/HTakvqSh2Un1W1rIFTnoQ==" - }, - "Microsoft.AspNetCore.Components.Forms": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "U83TX0obbdIh1DeIGCix62RILHRa4HC7h0fgEYrV9Gl8tz0wzv6AoYkU4PvnxXAqpYA2wPTMgNOuqt1X2XxCoQ==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14" - } - }, - "Microsoft.AspNetCore.Metadata": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "4dkb/7GoyaFtEggCEHStc/t05nKgnEr1QUJIP8QaDvxdZTXk9SebVeMMPBSR4zbj6dK2tUwBAOdHLA215lmOWg==" - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "doVPCUUCY7c6LhBsEfiy3W1bvS7Mi6LkfQMS8nlC22jZWNxBv8VO8bdfeyvpYFst6Kxqk7HBC6lytmEoBssvSQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "8.0.3", - "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" - }, - "Microsoft.JSInterop": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "eg5HYSshwlO1oOzOg4WdT2ZSPKOu3hv556zPkfNpKEi5qoLuQt49mE1tegsL4H7ENl1dL0vBLRv4+YAuLKt/nA==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "CentralTransitive", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[8.0.2, )", - "resolved": "8.0.2", - "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "kDYeKJUzh0qeg/AI+nSr3ffthmXYQTEb0nS9qRC7YhSbbuN4M4NPbaB77AJwtkTnCV9XZ7qYj3dkZaNcyl73EA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "CentralTransitive", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - } - } + "net8.0": {} } } \ No newline at end of file diff --git a/TELBlazor.Components.ShowCase.WasmStaticClient/packages.lock.json b/TELBlazor.Components.ShowCase.WasmStaticClient/packages.lock.json index 1194dc0..78a14bc 100644 --- a/TELBlazor.Components.ShowCase.WasmStaticClient/packages.lock.json +++ b/TELBlazor.Components.ShowCase.WasmStaticClient/packages.lock.json @@ -1,541 +1,7 @@ { "version": 2, "dependencies": { - "net8.0": { - "Blazored.LocalStorage": { - "type": "Direct", - "requested": "[4.5.0, )", - "resolved": "4.5.0", - "contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==", - "dependencies": { - "Microsoft.AspNetCore.Components.Web": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components.WebAssembly": { - "type": "Direct", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "POAXlhcinb1pB9CALXPWZU9Aw9PqLqYghdGzl3CLYWUdFwyM3gRnR3iadwxmkk1cWdMZJ9ipTcvo/hONx+cQ6g==", - "dependencies": { - "Microsoft.AspNetCore.Components.Web": "8.0.14", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.Configuration.Json": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.JSInterop.WebAssembly": "8.0.14" - } - }, - "Microsoft.AspNetCore.Components.WebAssembly.DevServer": { - "type": "Direct", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "ACE4AdCdXc7pY1oqEZOGMN4/yl3lJWNouknfkFlqMFoPIwZC/Wx+p9bK4rfvvD7ZrHRDYdoWnAU6FZWLuX5pMQ==" - }, - "Microsoft.Extensions.Hosting": { - "type": "Direct", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "bP9EEkHBEfjgYiG8nUaXqMk/ujwJrffOkNPP7onpRMO8R+OUSESSP4xHkCAXgYZ1COP2Q9lXlU5gkMFh20gRuw==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.Configuration.CommandLine": "8.0.0", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", - "Microsoft.Extensions.Configuration.Json": "8.0.1", - "Microsoft.Extensions.Configuration.UserSecrets": "8.0.1", - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.Logging.Console": "8.0.1", - "Microsoft.Extensions.Logging.Debug": "8.0.1", - "Microsoft.Extensions.Logging.EventLog": "8.0.1", - "Microsoft.Extensions.Logging.EventSource": "8.0.1", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "kDYeKJUzh0qeg/AI+nSr3ffthmXYQTEb0nS9qRC7YhSbbuN4M4NPbaB77AJwtkTnCV9XZ7qYj3dkZaNcyl73EA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.19, )", - "resolved": "8.0.19", - "contentHash": "IhHf+zeZiaE5EXRyxILd4qM+Hj9cxV3sa8MpzZgeEhpvaG3a1VEGF6UCaPFLO44Kua3JkLKluE0SWVamS50PlA==" - }, - "Microsoft.NET.Sdk.WebAssembly.Pack": { - "type": "Direct", - "requested": "[8.0.19, )", - "resolved": "8.0.19", - "contentHash": "Cm/sq4ET7XGU7jBSfSh+s+eV0faJ1RnErpImRYN7+d5loWISBwl22qsM6sn9StUWKJao+xGvF0IxgyPVnY20Vw==" - }, - "Serilog": { - "type": "Direct", - "requested": "[4.2.0, )", - "resolved": "4.2.0", - "contentHash": "gmoWVOvKgbME8TYR+gwMf7osROiWAURterc6Rt2dQyX7wtjZYpqFiA/pY6ztjGQKKV62GGCyOcmtP1UKMHgSmA==" - }, - "Serilog.Extensions.Logging": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", - "dependencies": { - "Microsoft.Extensions.Logging": "8.0.0", - "Serilog": "3.1.1" - } - }, - "Serilog.Formatting.Compact": { - "type": "Direct", - "requested": "[3.0.0, )", - "resolved": "3.0.0", - "contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Settings.Configuration": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==", - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyModel": "8.0.0", - "Serilog": "3.1.1" - } - }, - "Serilog.Sinks.BrowserConsole": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "Q4hNs0ewnJIHG7mR61RMpV5y7kfuY9hHMI4WZwVhQxXzlZTqvSDLAsTx1PL3ivbWrPKjbkKQpZc6byXdwx2lxA==", - "dependencies": { - "Microsoft.AspNetCore.Components.WebAssembly": "8.0.7", - "Serilog": "4.0.0" - } - }, - "Serilog.Sinks.Http": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "eHyl2/93Roymf2eudPl/6Eeu2GQ93Ucy4GM1UPF0jyd7CIW8r+Bk5ohdbjjyjB9TQSpP2ovOuj6ltf9DjoWHtg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "2.0.0", - "Serilog.Sinks.File": "5.0.0" - } - }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "lcKWEvzaJz+ahDj5J0zz05NGyv4vqEa2vLalBuBf69vL0qrWqqB/rwI4/zdyloun+fLTq1bCnsAwiplbFgQtAA==", - "dependencies": { - "Microsoft.AspNetCore.Metadata": "8.0.14", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.AspNetCore.Components": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "b/6dwE/ESturk5VHHzq/GP15qkcxb196T+qxFs4wzUkeZtCx2OuK+1rPIHSgsOjthnHNOAhCY7/9n5uLqyenKA==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "8.0.14", - "Microsoft.AspNetCore.Components.Analyzers": "8.0.14" - } - }, - "Microsoft.AspNetCore.Components.Analyzers": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "pHPb1bqV2ECTfOw2QcGQzO1/fdpo8mwekY8Jbycm2UZ6yvqLtZRRPd+RVzL74oXR/HTakvqSh2Un1W1rIFTnoQ==" - }, - "Microsoft.AspNetCore.Components.Forms": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "U83TX0obbdIh1DeIGCix62RILHRa4HC7h0fgEYrV9Gl8tz0wzv6AoYkU4PvnxXAqpYA2wPTMgNOuqt1X2XxCoQ==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14" - } - }, - "Microsoft.AspNetCore.Metadata": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "4dkb/7GoyaFtEggCEHStc/t05nKgnEr1QUJIP8QaDvxdZTXk9SebVeMMPBSR4zbj6dK2tUwBAOdHLA215lmOWg==" - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "7IQhGK+wjyGrNsPBjJcZwWAr+Wf6D4+TwOptUt77bWtgNkiV8tDEbhFS+dDamtQFZ2X7kWG9m71iZQRj2x3zgQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.CommandLine": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "NZuZMz3Q8Z780nKX3ifV1fE7lS+6pynDHK71OfU4OZ1ItgvDOhyOC7E6z+JMZrAj63zRpwbdldYFk499t3+1dQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.FileExtensions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Json": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.UserSecrets": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "7tYqdPPpAK+3jO9d5LTuCK2VxrEdf85Ol4trUr6ds4jclBecadWZ/RyPCbNjfbN5iGTfUnD/h65TOQuqQv2c+A==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Json": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0" - } - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==", - "dependencies": { - "System.Text.Encodings.Web": "8.0.0", - "System.Text.Json": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "doVPCUUCY7c6LhBsEfiy3W1bvS7Mi6LkfQMS8nlC22jZWNxBv8VO8bdfeyvpYFst6Kxqk7HBC6lytmEoBssvSQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.FileProviders.Physical": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.FileSystemGlobbing": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==" - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "8.0.3", - "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Logging.Console": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "uzcg/5U2eLyn5LIKlERkdSxw6VPC1yydnOSQiRRWGBGN3kphq3iL4emORzrojScDmxRhv49gp5BI8U3Dz7y4iA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.Debug": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "B8hqNuYudC2RB+L/DI33uO4rf5by41fZVdcVL2oZj0UyoAZqnwTwYHp1KafoH4nkl1/23piNeybFFASaV2HkFg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.EventLog": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "ZD1m4GXoxcZeDJIq8qePKj+QAWeQNO/OG8skvrOG8RQfxLp9MAKRoliTc27xanoNUzeqvX5HhS/I7c0BvwAYUg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "System.Diagnostics.EventLog": "8.0.1" - } - }, - "Microsoft.Extensions.Logging.EventSource": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "YMXMAla6B6sEf/SnfZYTty633Ool3AH7KOw2LOaaEqwSo2piK4f7HMtzyc3CNiipDnq1fsUSuG5Oc7ZzpVy8WQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" - }, - "Microsoft.JSInterop": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "eg5HYSshwlO1oOzOg4WdT2ZSPKOu3hv556zPkfNpKEi5qoLuQt49mE1tegsL4H7ENl1dL0vBLRv4+YAuLKt/nA==" - }, - "Microsoft.JSInterop.WebAssembly": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "hgnUKcZNOuAuzR/bf0tuPC7a9bteZuH6RzT/DG8UBRlW3mcuHdnLr+kJ7P5MZWhug2xL3G6SBbteuxtRw7D3Vg==", - "dependencies": { - "Microsoft.JSInterop": "8.0.14" - } - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==", - "dependencies": { - "System.Text.Encodings.Web": "8.0.0" - } - }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, - "telblazor.components.showcase.shared": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Markdig": "[0.41.3, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Serilog": "[4.2.0, )", - "TELBlazor.Components": "[1.2.6-local, )" - } - }, - "Markdig": { - "type": "CentralTransitive", - "requested": "[0.41.3, )", - "resolved": "0.41.3", - "contentHash": "i3vSTyGpBGWbJB04aJ3cPJs0T3BV2e1nduW3EUHK/i+xUupYbym75iZPss/XjqhS5JlBErwQYnx7ofK3Zcsozg==" - }, - "Microsoft.AspNetCore.Components.Web": { - "type": "CentralTransitive", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "h/XSCAHmBywDF6San0FGPyXxK6PZh1g/xz4Ln9yeJNgSmKq5F1ehgVStDkJr4d6pWGr2RRkNxgGYMLRnULMnKw==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14", - "Microsoft.AspNetCore.Components.Forms": "8.0.14", - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Primitives": "8.0.0", - "Microsoft.JSInterop": "8.0.14", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "CentralTransitive", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[8.0.2, )", - "resolved": "8.0.2", - "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "CentralTransitive", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Serilog.Sinks.File": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "lxjg89Y8gJMmFxVkbZ+qDgjl+T4yC5F7WSLTvA+5q0R04tfKVLRL/EHpYoJ/MEQd2EeCKDuylBIVnAYMotmh2A==", - "dependencies": { - "Serilog": "4.0.0" - } - } - }, - "net8.0/browser-wasm": { - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - } - } + "net8.0": {}, + "net8.0/browser-wasm": {} } } \ No newline at end of file diff --git a/TELBlazor.Components.UnitTests/packages.lock.json b/TELBlazor.Components.UnitTests/packages.lock.json index 2df466b..dd5b66c 100644 --- a/TELBlazor.Components.UnitTests/packages.lock.json +++ b/TELBlazor.Components.UnitTests/packages.lock.json @@ -1,1764 +1,6 @@ { "version": 2, "dependencies": { - "net8.0": { - "AutoFixture": { - "type": "Direct", - "requested": "[4.18.1, )", - "resolved": "4.18.1", - "contentHash": "BmWZDY4fkrYOyd5/CTBOeXbzsNwV8kI4kDi/Ty1Y5F+WDHBVKxzfWlBE4RSicvZ+EOi2XDaN5uwdrHsItLW6Kw==", - "dependencies": { - "Fare": "[2.1.1, 3.0.0)", - "System.ComponentModel.Annotations": "4.3.0" - } - }, - "AutoFixture.AutoMoq": { - "type": "Direct", - "requested": "[4.18.1, )", - "resolved": "4.18.1", - "contentHash": "5mG4BdhamHBJGDKNdH5p0o1GIqbNCDqq+4Ny4csnYpzZPYjkfT5xOXLyhkvpF8EgK3GN5o4HMclEe2rhQVr1jQ==", - "dependencies": { - "AutoFixture": "4.18.1", - "Moq": "[4.7.0, 5.0.0)" - } - }, - "bunit": { - "type": "Direct", - "requested": "[1.34.0, )", - "resolved": "1.34.0", - "contentHash": "j0/7Qi2jNlM23p4ufIkTSY31OBGWVJYdIIuxxUZOB7LZP+uLsQcSgqOAJT9/UjZ6C2AzVc4WdCfuSZwh7iBQYw==", - "dependencies": { - "bunit.core": "1.34.0", - "bunit.web": "1.34.0" - } - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "FluentAssertions": { - "type": "Direct", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "IW5CdXiD4BIijMkJsEajhkQr7HSgzoxZBHp77b4tm8isCKGaDH2AGugW6DLS0/EPhO/MCZ2JOGg6ObdlKISJMg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[17.11.1, )", - "resolved": "17.11.1", - "contentHash": "U3Ty4BaGoEu+T2bwSko9tWqWUOU16WzSFkq6U8zve75oRBMSLTBdMAZrVNNz1Tq12aCdDom9fcOcM9QZaFHqFg==", - "dependencies": { - "Microsoft.CodeCoverage": "17.11.1", - "Microsoft.TestPlatform.TestHost": "17.11.1" - } - }, - "Serilog": { - "type": "Direct", - "requested": "[4.2.0, )", - "resolved": "4.2.0", - "contentHash": "gmoWVOvKgbME8TYR+gwMf7osROiWAURterc6Rt2dQyX7wtjZYpqFiA/pY6ztjGQKKV62GGCyOcmtP1UKMHgSmA==" - }, - "Serilog.Expressions": { - "type": "Direct", - "requested": "[5.0.0, )", - "resolved": "5.0.0", - "contentHash": "QhZjXtUcA2QfQRA60m+DfyIfidKsQV7HBstbYEDqzJKMbJH/KnKthkkjciRuYrmFE+scWv1JibC5LlXrdtOUmw==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Extensions.Logging": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", - "dependencies": { - "Microsoft.Extensions.Logging": "8.0.0", - "Serilog": "3.1.1" - } - }, - "Serilog.Formatting.Compact": { - "type": "Direct", - "requested": "[3.0.0, )", - "resolved": "3.0.0", - "contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Settings.Configuration": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==", - "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyModel": "8.0.0", - "Serilog": "3.1.1" - } - }, - "Serilog.Sinks.BrowserConsole": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "Q4hNs0ewnJIHG7mR61RMpV5y7kfuY9hHMI4WZwVhQxXzlZTqvSDLAsTx1PL3ivbWrPKjbkKQpZc6byXdwx2lxA==", - "dependencies": { - "Microsoft.AspNetCore.Components.WebAssembly": "8.0.7", - "Serilog": "4.0.0" - } - }, - "Serilog.Sinks.InMemory": { - "type": "Direct", - "requested": "[0.14.0, )", - "resolved": "0.14.0", - "contentHash": "6xsQEkx1ZlH19/6id6rNTZyi5cXghji/NJke+Uu3GP9LlY28+RmR7C4kKWtvoH55eXVsZdLQz5j4uCaT+ceaRA==", - "dependencies": { - "Serilog": "2.12.0" - } - }, - "Serilog.Sinks.InMemory.Assertions": { - "type": "Direct", - "requested": "[0.14.0, )", - "resolved": "0.14.0", - "contentHash": "1Glb4GQyIsnxGO0u/P+jIkm6x6YKjvGOIOtG5zb8OX3XUJxjyrti7iojYEWSaCzXKchwSvuYdRb494Flfo5oYw==", - "dependencies": { - "Serilog.Sinks.InMemory": "0.14.0" - } - }, - "Serilog.Sinks.XUnit": { - "type": "Direct", - "requested": "[2.0.4, )", - "resolved": "2.0.4", - "contentHash": "L9R01Z3EzsNlr6iPozwSX1TekFHyg8YiaaUncXG+WWSvT/wQp/8jIsN1EmXYtTbPbfUgzNdTdU/lCveYPFtNlA==", - "dependencies": { - "NETStandard.Library": "1.6.1", - "Serilog": "2.9.0", - "xunit.abstractions": "2.0.3", - "xunit.core": "2.4.1" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.0, )", - "resolved": "2.9.0", - "contentHash": "PtU3rZ0ThdmdJqTbK7GkgFf6iBaCR6Q0uvJHznID+XEYk2v6O/b7sRxqnbi3B2gRDXxjTqMkVNayzwsqsFUxRw==", - "dependencies": { - "xunit.analyzers": "1.15.0", - "xunit.assert": "2.9.0", - "xunit.core": "[2.9.0]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[2.5.4, )", - "resolved": "2.5.4", - "contentHash": "YUtEOBdArAISyb1cTWcHc6/bilSDB9q5lc8ughPQP1MqlAKSkxKMBqLQ+tiWMFRBd2o22E59nLD/4V5R3jfZxQ==" - }, - "AngleSharp": { - "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "aRFpAqixbuj1Vmqy2hsWPF0PJygo1SfjvmpBvVWZv6i+/u+C/L4wDdwFIzyCGUbjqr61NsZdPNPqDE8wlmG2qA==", - "dependencies": { - "System.Text.Encoding.CodePages": "8.0.0" - } - }, - "AngleSharp.Css": { - "type": "Transitive", - "resolved": "1.0.0-beta.144", - "contentHash": "WfyZ1zi5o7fNPgTv0O74nmzyxt9w4tjypwpOCSoeoZDOHtgghc/JqyGHRbQh7Y9sZlJiivQhrQNtm4XAy9LHYA==", - "dependencies": { - "AngleSharp": "[1.0.0, 2.0.0)" - } - }, - "AngleSharp.Diffing": { - "type": "Transitive", - "resolved": "1.0.0", - "contentHash": "6OeF2VvqyVaxMOP+wE0fjeaP+0ox2Og26tKDmY3Zf/qugRbd86OjmqoF6ZGyQonyP/zPjJ/TAB9VUR4HG3Dq5A==", - "dependencies": { - "AngleSharp": "1.1.2", - "AngleSharp.Css": "1.0.0-beta.144" - } - }, - "bunit.core": { - "type": "Transitive", - "resolved": "1.34.0", - "contentHash": "gC+Kb2HzLX7zD9av/qEbm3Wn3ABu68NnEXLOZ05t51l3RCSjoRQp8hDwxWAliqeqsq5OYa6mwC0UdZtqyhQtnQ==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.10", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "bunit.web": { - "type": "Transitive", - "resolved": "1.34.0", - "contentHash": "+16u5Aymb56r4xOfDLrKkFAEWEJDEqtKaw81IQuMaOA0E/+zAKrpMVJ+1jNnIudM2tLBiRlrCmp/4pkTxBp4Lg==", - "dependencies": { - "AngleSharp": "1.1.2", - "AngleSharp.Css": "1.0.0-beta.144", - "AngleSharp.Diffing": "1.0.0", - "Microsoft.AspNetCore.Components": "8.0.10", - "Microsoft.AspNetCore.Components.Authorization": "8.0.10", - "Microsoft.AspNetCore.Components.Web": "8.0.10", - "Microsoft.AspNetCore.Components.WebAssembly": "8.0.10", - "Microsoft.AspNetCore.Components.WebAssembly.Authentication": "8.0.10", - "Microsoft.Extensions.Caching.Memory": "8.0.1", - "Microsoft.Extensions.Localization.Abstractions": "8.0.10", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "System.Text.Json": "8.0.5", - "bunit.core": "1.34.0" - } - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "4.0.0", - "contentHash": "iLINpMFc07bcb0d075AB0mcXV/MT8J8oyBarDSeyrLM03UoCVOuvYu87LI4511XHfy7XEhHtMDum5gt2s56xDg==", - "dependencies": { - "System.AppContext": "4.1.0", - "System.Collections.Specialized": "4.0.1", - "System.ComponentModel.TypeConverter": "4.0.1", - "System.Console": "4.0.0", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tools": "4.0.1", - "System.Diagnostics.TraceSource": "4.0.0", - "System.Dynamic.Runtime": "4.0.11", - "System.Globalization": "4.0.11", - "System.IO.FileSystem": "4.0.1", - "System.Linq": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.Lightweight": "4.0.1", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0", - "System.Threading": "4.0.11", - "System.Xml.XmlDocument": "4.0.1", - "System.Xml.XmlSerializer": "4.0.11" - } - }, - "Fare": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "HaI8puqA66YU7/9cK4Sgbs1taUTP1Ssa4QT2PIzqJ7GvAbN1QgkjbRsjH+FSbMh1MJdvS0CIwQNLtFT+KF6KpA==", - "dependencies": { - "NETStandard.Library": "1.6.1" - } - }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "lcKWEvzaJz+ahDj5J0zz05NGyv4vqEa2vLalBuBf69vL0qrWqqB/rwI4/zdyloun+fLTq1bCnsAwiplbFgQtAA==", - "dependencies": { - "Microsoft.AspNetCore.Metadata": "8.0.14", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.AspNetCore.Components": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "b/6dwE/ESturk5VHHzq/GP15qkcxb196T+qxFs4wzUkeZtCx2OuK+1rPIHSgsOjthnHNOAhCY7/9n5uLqyenKA==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "8.0.14", - "Microsoft.AspNetCore.Components.Analyzers": "8.0.14" - } - }, - "Microsoft.AspNetCore.Components.Analyzers": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "pHPb1bqV2ECTfOw2QcGQzO1/fdpo8mwekY8Jbycm2UZ6yvqLtZRRPd+RVzL74oXR/HTakvqSh2Un1W1rIFTnoQ==" - }, - "Microsoft.AspNetCore.Components.Authorization": { - "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "z9WZ2sbkKKChx8b75X+1kRpbUdYOqn7sanbNCGavwmgyVUj30F5se2BTXENCOyi1Ve7Hgi4VapH4k1zwO5YN8A==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "8.0.10", - "Microsoft.AspNetCore.Components": "8.0.10" - } - }, - "Microsoft.AspNetCore.Components.Forms": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "U83TX0obbdIh1DeIGCix62RILHRa4HC7h0fgEYrV9Gl8tz0wzv6AoYkU4PvnxXAqpYA2wPTMgNOuqt1X2XxCoQ==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14" - } - }, - "Microsoft.AspNetCore.Components.WebAssembly.Authentication": { - "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "ej3LQJfn8z1fyPIZ5wDsmPQzfNBtkDgNxragEv0OA7EaWNWKc9LNw4w2uquXsIOoP/4FfEhPNBt0oXItSidatA==", - "dependencies": { - "Microsoft.AspNetCore.Components.Authorization": "8.0.10", - "Microsoft.AspNetCore.Components.Web": "8.0.10" - } - }, - "Microsoft.AspNetCore.Metadata": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "4dkb/7GoyaFtEggCEHStc/t05nKgnEr1QUJIP8QaDvxdZTXk9SebVeMMPBSR4zbj6dK2tUwBAOdHLA215lmOWg==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "17.11.1", - "contentHash": "nPJqrcA5iX+Y0kqoT3a+pD/8lrW/V7ayqnEJQsTonSoPz59J8bmoQhcSN4G8+UJ64Hkuf0zuxnfuj2lkHOq4cA==" - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "7IQhGK+wjyGrNsPBjJcZwWAr+Wf6D4+TwOptUt77bWtgNkiV8tDEbhFS+dDamtQFZ2X7kWG9m71iZQRj2x3zgQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.FileExtensions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileProviders.Physical": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Configuration.Json": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0" - } - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==", - "dependencies": { - "System.Text.Encodings.Web": "8.0.0", - "System.Text.Json": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "doVPCUUCY7c6LhBsEfiy3W1bvS7Mi6LkfQMS8nlC22jZWNxBv8VO8bdfeyvpYFst6Kxqk7HBC6lytmEoBssvSQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.FileProviders.Physical": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.FileSystemGlobbing": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==" - }, - "Microsoft.Extensions.Localization.Abstractions": { - "type": "Transitive", - "resolved": "8.0.10", - "contentHash": "OuuTRyukXTPjTgx1iYJzyaPa+hFrkj1djlWV/kqsWs2arSXczh/JpCgak617mo3M+5FMpEJ3af5nrgehC7q1YQ==" - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "Transitive", - "resolved": "8.0.3", - "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "8.0.2", - "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" - }, - "Microsoft.JSInterop": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "eg5HYSshwlO1oOzOg4WdT2ZSPKOu3hv556zPkfNpKEi5qoLuQt49mE1tegsL4H7ENl1dL0vBLRv4+YAuLKt/nA==" - }, - "Microsoft.JSInterop.WebAssembly": { - "type": "Transitive", - "resolved": "8.0.14", - "contentHash": "hgnUKcZNOuAuzR/bf0tuPC7a9bteZuH6RzT/DG8UBRlW3mcuHdnLr+kJ7P5MZWhug2xL3G6SBbteuxtRw7D3Vg==", - "dependencies": { - "Microsoft.JSInterop": "8.0.14" - } - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" - }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "17.11.1", - "contentHash": "E2jZqAU6JeWEVsyOEOrSW1o1bpHLgb25ypvKNB/moBXPVsFYBPd/Jwi7OrYahG50J83LfHzezYI+GaEkpAotiA==", - "dependencies": { - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "17.11.1", - "contentHash": "DnG+GOqJXO/CkoqlJWeDFTgPhqD/V6VqUIL3vINizCWZ3X+HshCtbbyDdSHQQEjrc2Sl/K3yaxX6s+5LFEdYuw==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.11.1", - "Newtonsoft.Json": "13.0.1" - } - }, - "Microsoft.Win32.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "Moq": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "EARB1hiT51yYWHynI+7FWOIZ9Lc3Pf83DlE3yROrgkiQ7xJy3+I52A5yMgvFe9GhOdXmXhBxZKApeOtWTV5MEQ==", - "dependencies": { - "Castle.Core": "4.0.0", - "System.Collections": "4.0.11", - "System.Collections.Concurrent": "4.0.12", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tools": "4.0.1", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.Linq.Queryable": "4.0.1", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Text.RegularExpressions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "NETStandard.Library": { - "type": "Transitive", - "resolved": "1.6.1", - "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.Win32.Primitives": "4.3.0", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.Compression.ZipFile": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Net.Sockets": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Timer": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - } - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" - }, - "runtime.native.System": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "runtime.native.System.IO.Compression": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "runtime.native.System.Net.Http": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "runtime.native.System.Security.Cryptography.Apple": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" - }, - "System.AppContext": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Collections.Concurrent": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Collections.NonGeneric": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "hMxFT2RhhlffyCdKLDXjx8WEC5JfCvNozAZxCablAuFRH74SCV4AgzE8yJCh/73bFnEoZgJ9MJmkjQ0dJmnKqA==", - "dependencies": { - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Collections.Specialized": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "/HKQyVP0yH1I0YtK7KJL/28snxHNH/bi+0lgk/+MbURF6ULhAE31MDI+NZDerNWu264YbxklXCCygISgm+HMug==", - "dependencies": { - "System.Collections.NonGeneric": "4.0.1", - "System.Globalization": "4.0.11", - "System.Globalization.Extensions": "4.0.1", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.ComponentModel": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.ComponentModel.Annotations": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "SY2RLItHt43rd8J9D8M8e8NM4m+9WLN2uUd9G0n1I4hj/7w+v3pzK6ZBjexlG1/2xvLKQsqir3UGVSyBTXMLWA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.ComponentModel": "4.3.0", - "System.Globalization": "4.3.0", - "System.Linq": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.ComponentModel.Primitives": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "sc/7eVCdxPrp3ljpgTKVaQGUXiW05phNWvtv/m2kocXqrUQvTVWKou1Edas2aDjTThLPZOxPYIGNb/HN0QjURg==", - "dependencies": { - "System.ComponentModel": "4.0.1", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.ComponentModel.TypeConverter": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "MnDAlaeJZy9pdB5ZdOlwdxfpI+LJQ6e0hmH7d2+y2LkiD8DRJynyDYl4Xxf3fWFm7SbEwBZh4elcfzONQLOoQw==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Collections.NonGeneric": "4.0.1", - "System.Collections.Specialized": "4.0.1", - "System.ComponentModel": "4.0.1", - "System.ComponentModel.Primitives": "4.1.0", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Reflection": "4.1.0", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Console": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Diagnostics.Debug": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Diagnostics.Tools": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Diagnostics.TraceSource": { - "type": "Transitive", - "resolved": "4.0.0", - "contentHash": "6WVCczFZKXwpWpzd/iJkYnsmWTSFFiU24Xx/YdHXBcu+nFI/ehTgeqdJQFbtRPzbrO3KtRNjvkhtj4t5/WwWsA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11", - "runtime.native.System": "4.0.0" - } - }, - "System.Diagnostics.Tracing": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Dynamic.Runtime": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Calendars": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Globalization.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Compression": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - } - }, - "System.IO.Compression.ZipFile": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", - "dependencies": { - "System.Buffers": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.IO.FileSystem": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.FileSystem.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Linq": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Linq.Expressions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Linq.Queryable": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "Yn/WfYe9RoRfmSLvUt2JerP0BTGGykCZkQPgojaxgzF2N0oPo+/AhB8TXOpdCcNlrG3VRtsamtK2uzsp3cqRVw==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.Reflection": "4.1.0", - "System.Reflection.Extensions": "4.0.1", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Net.Http": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Net.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Net.Sockets": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.ObjectModel": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.Handles": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Runtime.InteropServices": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - } - }, - "System.Runtime.InteropServices.RuntimeInformation": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - } - }, - "System.Runtime.Numerics": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - } - }, - "System.Security.Cryptography.Algorithms": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Cng": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Security.Cryptography.Csp": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - } - }, - "System.Security.Cryptography.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.OpenSsl": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Security.Cryptography.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Security.Cryptography.X509Certificates": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Text.Encoding.CodePages": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OZIsVplFGaVY90G2SbpgU7EnCoOO5pw1t4ic21dBF3/1omrJFpAGoNAVpPyMVOC90/hvgkGG3VFqR13YgZMQfg==" - }, - "System.Text.Encoding.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - } - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "8.0.5", - "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==" - }, - "System.Text.RegularExpressions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", - "dependencies": { - "System.Runtime": "4.3.0" - } - }, - "System.Threading": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Extensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.Threading.Timer": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Xml.ReaderWriter": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - } - }, - "System.Xml.XDocument": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - } - }, - "System.Xml.XmlDocument": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "2eZu6IP+etFVBBFUFzw2w6J21DqIN5eL9Y8r8JfJWUmV28Z5P0SNU01oCisVHQgHsDhHPnmq2s1hJrJCFZWloQ==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.IO": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Text.Encoding": "4.0.11", - "System.Threading": "4.0.11", - "System.Xml.ReaderWriter": "4.0.11" - } - }, - "System.Xml.XmlSerializer": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "FrazwwqfIXTfq23mfv4zH+BjqkSFNaNFBtjzu3I9NRmG8EELYyrv/fJnttCIwRMFRR/YKXF1hmsMmMEnl55HGw==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Globalization": "4.0.11", - "System.IO": "4.1.0", - "System.Linq": "4.1.0", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Text.RegularExpressions": "4.1.0", - "System.Threading": "4.0.11", - "System.Xml.ReaderWriter": "4.0.11", - "System.Xml.XmlDocument": "4.0.1" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.15.0", - "contentHash": "s+M8K/Rtlgr6CmD7AYQKrNTvT5sh0l0ZKDoZ3Z/ExhlIwfV9mGAMR4f7KqIB7SSK7ZOhqDTgTUMYPmKfmvWUWQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.0", - "contentHash": "Z/1pyia//860wEYTKn6Q5dmgikJdRjgE4t5AoxJkK8oTmidzPLEPG574kmm7LFkMLbH6Frwmgb750kcyR+hwoA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.0", - "contentHash": "uRaop9tZsZMCaUS4AfbSPGYHtvywWnm8XXFNUqII7ShWyDBgdchY6gyDNgO4AK1Lv/1NNW61Zq63CsDV6oH6Jg==", - "dependencies": { - "xunit.extensibility.core": "[2.9.0]", - "xunit.extensibility.execution": "[2.9.0]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.0", - "contentHash": "zjDEUSxsr6UNij4gIwCgMqQox+oLDPRZ+mubwWLci+SssPBFQD1xeRR4SvgBuXqbE0QXCJ/STVTp+lxiB5NLVA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.0", - "contentHash": "5ZTQZvmPLlBw6QzCOwM0KnMsZw6eGjbmC176QHZlcbQoMhGIeGcYzYwn5w9yXxf+4phtplMuVqTpTbFDQh2bqQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.0]" - } - }, - "telblazor.components": { - "type": "Project", - "dependencies": { - "Blazored.LocalStorage": "[4.5.0, )", - "Microsoft.AspNetCore.Components.Web": "[8.0.14, )", - "Microsoft.Extensions.Http": "[8.0.1, )", - "Serilog": "[4.2.0, )" - } - }, - "Blazored.LocalStorage": { - "type": "CentralTransitive", - "requested": "[4.5.0, )", - "resolved": "4.5.0", - "contentHash": "6nZuJwA7zNIKx83IsObiHXZb09ponJOpCClU3en+hI8ZFvrOKXeOw+H7TegQZQrvdR1n9fkrVkEBQZg8vx6ZTw==", - "dependencies": { - "Microsoft.AspNetCore.Components.Web": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components.Web": { - "type": "CentralTransitive", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "h/XSCAHmBywDF6San0FGPyXxK6PZh1g/xz4Ln9yeJNgSmKq5F1ehgVStDkJr4d6pWGr2RRkNxgGYMLRnULMnKw==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.14", - "Microsoft.AspNetCore.Components.Forms": "8.0.14", - "Microsoft.Extensions.DependencyInjection": "8.0.1", - "Microsoft.Extensions.Primitives": "8.0.0", - "Microsoft.JSInterop": "8.0.14", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components.WebAssembly": { - "type": "CentralTransitive", - "requested": "[8.0.14, )", - "resolved": "8.0.14", - "contentHash": "POAXlhcinb1pB9CALXPWZU9Aw9PqLqYghdGzl3CLYWUdFwyM3gRnR3iadwxmkk1cWdMZJ9ipTcvo/hONx+cQ6g==", - "dependencies": { - "Microsoft.AspNetCore.Components.Web": "8.0.14", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.Configuration.Json": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.JSInterop.WebAssembly": "8.0.14" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "CentralTransitive", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[8.0.2, )", - "resolved": "8.0.2", - "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "kDYeKJUzh0qeg/AI+nSr3ffthmXYQTEb0nS9qRC7YhSbbuN4M4NPbaB77AJwtkTnCV9XZ7qYj3dkZaNcyl73EA==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "CentralTransitive", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Newtonsoft.Json": { - "type": "CentralTransitive", - "requested": "[13.0.1, )", - "resolved": "13.0.1", - "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" - } - } + "net8.0": {} } } \ No newline at end of file From b3238df8d54567f45f3eef79082ca808072fe44f Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Wed, 17 Sep 2025 11:30:17 +0100 Subject: [PATCH 38/39] feat(version): new major BREAKING CHANGE: inc version --- .github/workflows/release.yml | 23 ++++++++++++++++++++++- README.md | 3 +++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4dd3fe4..4bd4e69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -57,11 +57,32 @@ jobs: id: set_semantic_version run: | + echo "error catch run of semver first to get any error detail on config issues" + + set +e + SEMVER_OUTPUT_RAW_ERROR_CHECK=$(npx semantic-release --dry-run 2> /tmp/semantic-release-errors.log) + STATUS_ERROR_CHECK=$? + + echo $SEMVER_OUTPUT_RAW_ERROR_CHECK + echo "STATUS_ERROR_CHECK = $STATUS_ERROR_CHECK " + + # Now you can check the status and log the error messages if an error occurred + if [ $STATUS_ERROR_CHECK -ne 0 ]; then + echo "❌ Semantic release failed with exit code $STATUS_ERROR_CHECK." + echo "❌ Error output:" + cat /tmp/semantic-release-errors.log + else + echo "✅ Semantic Ouput success : $SEMVER_OUTPUT_RAW_ERROR_CHECK " + echo "✅ Error on success : $STATUS_ERROR_CHECK" + fi + + set -e + echo "running semantic-release" SEMVER_OUTPUT_RAW=$(npx semantic-release 2>&1) STATUS=$? echo "status = $STATUS" - echo "$SEMVER_OUTPUT_RAW" + echo "$SEMVER_OUTPUT_RAW" # Check for no changes and set SEMVER_VERSION accordingly if echo "$SEMVER_OUTPUT_RAW" | grep -q 'There are no relevant changes'; then diff --git a/README.md b/README.md index 4ec4215..f80180a 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,9 @@ It is recommended you check setup by reading this section and making sure packag - e.g. > 'docs(readme): added detail on commit rules' [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) + + +You can also look here, but the semantic-release angular badge above is the best reference. [Commit conventions](https://github.com/angular/angular/blob/main/contributing-docs/commit-message-guidelines.md) #### Configuring the project From bdee7ba4197719f9e1c6087feccda2b24fedf5a7 Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Wed, 17 Sep 2025 11:54:44 +0100 Subject: [PATCH 39/39] feat(majorvers): big version BREAKING CHANGE: squash and vers --- .github/workflows/release.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4bd4e69..819533c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,10 +79,12 @@ jobs: set -e echo "running semantic-release" - SEMVER_OUTPUT_RAW=$(npx semantic-release 2>&1) + SEMVER_OUTPUT_RAW=$(npx semantic-release) + echo "semantic-release run" + echo "$SEMVER_OUTPUT_RAW" STATUS=$? echo "status = $STATUS" - echo "$SEMVER_OUTPUT_RAW" + # Check for no changes and set SEMVER_VERSION accordingly if echo "$SEMVER_OUTPUT_RAW" | grep -q 'There are no relevant changes'; then