diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index b401fbd5a..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,2 +0,0 @@ -# Anyone attached to this rule will always been assigned to a pull request -* @hashicorp/boundary-ui \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index ff41ea430..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -name: Bug report -about: Let us know about a bug! -title: '' -labels: '' -assignees: '' - ---- - - - -## :bug: Bug Report - -### **Description** - -_A clear and concise description of the bug._ - -### **Steps to Reproduce** - -1. Go to '...' -2. Click on '...' -3. Scroll down to '...' -4. See the error - -## **Expected behavior** - -_A clear description of what you expected to happen._ - -## **Actual behavior** - -_A clear description of what actually happened._ - -## **Screenshots (if applicable)** - -_Add screenshots or screen recordings to help explain the issue._ - -## **Environment** - -- **OS and Version:** (e.g., Windows 10 (22H2), macOS (14.7.2)) -- **Architecture:** (e.g., arm64, x86_64) -- **Browser/Version:** (if applicable) -- **Desktop Client Version:** (if applicable) -- **Controller/worker versions:** (if applicable) - -## **Logs & Console Output (if applicable)** - -_Paste any relevant error logs or browser console output here._ - -## **Additional Context** - -_Any other details that might be relevant._ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 361398c36..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright IBM Corp. 2021, 2026 -# SPDX-License-Identifier: BUSL-1.1 - -contact_links: - - name: Ask a question - url: https://discuss.hashicorp.com/c/boundary - about: For increased visibility, please post questions on the discussion forum. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 7775cce1b..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Feature request -about: Suggest something! -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Explain any additional use-cases** -If there are any use-cases that would help us understand the use/need/value please share them as they can help us decide on acceptance and prioritization. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 904c61a89..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 -updates: -- package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" \ No newline at end of file diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 3c2d2411f..000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright IBM Corp. 2021, 2026 -# SPDX-License-Identifier: BUSL-1.1 - -addons: - - changed-files: - - any-glob-to-any-file: "addons/**/*" - -api-addon: - - changed-files: - - any-glob-to-any-file: "addons/api/**/*" - -auth-addon: - - changed-files: - - any-glob-to-any-file: "addons/auth/**/*" - -styles-addon: - - changed-files: - - any-glob-to-any-file: "addons/rose/**/*" - -ui: - - changed-files: - - any-glob-to-any-file: "ui/**/*" - -admin: - - changed-files: - - any-glob-to-any-file: "ui/admin/**/*" - -desktop: - - changed-files: - - any-glob-to-any-file: "ui/desktop/**/*" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 53463d0a4..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,33 +0,0 @@ -# Description - - - - - -## Screenshots (if appropriate) - -## How to Test - - -## Checklist - - - - -- [ ] I have added before and after screenshots for UI changes -- [ ] I have added JSON response output for API changes -- [ ] I have added steps to reproduce and test for bug fixes in the description -- [ ] I have commented on my code, particularly in hard-to-understand areas -- [ ] My changes generate no new warnings -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] I have added `a11y-tests` label to run a11y audit tests if needed - -## PCI review checklist - - -- [ ] I have documented a clear reason for, and description of, the change I am making. -- [ ] If applicable, I've documented a plan to revert these changes if they require more than reverting the pull request. -- [ ] If applicable, I've documented the impact of any changes to security controls. - Examples of changes to security controls include using new access control methods, adding or removing logging pipelines, etc. diff --git a/.github/scripts/merge.sh b/.github/scripts/merge.sh deleted file mode 100755 index c410191fa..000000000 --- a/.github/scripts/merge.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash -# Copyright IBM Corp. 2021, 2026 -# SPDX-License-Identifier: BUSL-1.1 - - -set -euo pipefail - -# Configure Git -git config --global user.email "hc-github-team-secure-boundary@hashicorp.com" -git config --global user.name "github-team-secure-boundary" -# Fetch branches from ENT -git fetch origin -BRANCH=${1} - -echo "BRANCH to merge is $BRANCH" -git checkout "${BRANCH}" - -# Checkout OSS repo -git remote add oss-remote https://github.com/hashicorp/boundary-ui.git -git fetch oss-remote - -# Merge oss/${BRANCH} into ent/${BRANCH} -git_merge_branch="${2}" -git checkout -b "${git_merge_branch}" -latest_oss_commit="$(git rev-parse --short oss-remote/${BRANCH})" -echo "Trying to merge the latest oss commit - ${latest_oss_commit} from oss/${BRANCH} into ent/${BRANCH}" - -if ! errors=$(git merge -m "Merge Boundary UI OSS branch '${BRANCH}' at commit ${latest_oss_commit}" "${latest_oss_commit}"); then - # Here we can try to auto resolve conflicts - # This logic will vary from project to project. The below is just an example. - conflicts=$(git diff --name-only --diff-filter=U) - printf "Found conflicts:\n${conflicts}\n" - # Resolve package.json conflicts by taking oss - if echo "$conflicts" | grep -q package.json; then - echo "Checking out oss package.json..." - git checkout --theirs package.json - git add package.json - fi - # Resolve pnpm-lock.yaml conflicts by re-running pnpm install: - # https://pnpm.io/git#merge-conflicts - if echo "$conflicts" | grep -q pnpm-lock.yaml; then - echo "Re-running pnpm install to fix conflicts by regenerating pnpm-lock.yaml..." - pnpm install - git add pnpm-lock.yaml - fi - - # If we can commit all the changes without conflict, we have resolved everything automatically - if ! git commit --no-edit; then - echo "Auto Merge failed, creating a draft PR" - git merge --abort - git clean -xfd - git fetch oss-remote - git checkout "${OSS_BRANCH}" - git checkout -b "${OSS_LOCAL_BRANCH}" - git push -f --set-upstream origin "${OSS_LOCAL_BRANCH}" - gh pr create \ - --draft \ - --fill-first \ - --label "oss-merge" \ - -B "${BASE_BRANCH}" \ - -H "${OSS_LOCAL_BRANCH}" \ - -a "${ACTOR}" \ - -t "[${BASE_BRANCH/oss\/release\//}] OSS to ENT merge of (${SHA::7})" \ - -b "${BASE_BRANCH/oss\//} upstream merge of (${SHA::7}) - Merge failed, Please fix the conflicts using github UI or using the following commands: - \`\`\`bash - git checkout ${BASE_BRANCH} - git pull - git checkout ${OSS_LOCAL_BRANCH} - git merge ${BASE_BRANCH} - # fix conflicts and commit - git push origin ${OSS_LOCAL_BRANCH} - \`\`\`" - exit 0 - fi -fi - -# Check that there are actually changes to merge by comparing the -# merge branch to the current checked out branch -if (git diff ${BRANCH} --exit-code > /dev/null); then - echo "there are no changes to merge" - exit 0 -fi -git push origin "${git_merge_branch}" -gh pr create \ - --fill-first \ - --label "oss-merge" \ - -B "${BASE_BRANCH}" \ - -H "${MERGE_BRANCH}" \ - -a ${ACTOR} \ - -t "[${BASE_BRANCH/oss\/release\//}] OSS to ENT merge of (${SHA::7})" \ - -b "${BASE_BRANCH/oss\//} upstream merge of (${SHA::7})" -gh pr merge --auto --merge - -# This PR will be need to be approved manually diff --git a/.github/workflows/a11y-tests.yaml b/.github/workflows/a11y-tests.yaml deleted file mode 100644 index 313edd807..000000000 --- a/.github/workflows/a11y-tests.yaml +++ /dev/null @@ -1,56 +0,0 @@ -name: A11y Tests - -on: - pull_request: - types: [labeled, opened, synchronize, reopened] - workflow_dispatch: - -jobs: - - a11y-test: - name: Run A11y Tests - if: contains(github.event.pull_request.labels.*.name, 'a11y-tests') - runs-on: ${{ fromJSON(vars.RUNNER) }} - timeout-minutes: 40 - steps: - - uses: browser-actions/setup-chrome@2e1d749697dd1612b833dba4a722266286fbefcd # v2.1.2 - with: - install-dependencies: true - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - run_install: false - - run: pnpm install - - name: Run a11y tests - env: - # this will generate the test reports but causes tests to pass even when there a11y failures - ENABLE_A11Y_MIDDLEWARE_REPORTER: true - run: pnpm test-a11y - - name: Consolidate ember a11y reports - run: | - mkdir ember-a11y-reports - jq -s 'map(.[])' ./ui/admin/ember-a11y-report/*.json > ember-a11y-reports/admin.json - jq -s 'map(.[])' ./ui/desktop/ember-a11y-report/*.json > ember-a11y-reports/desktop.json - - name: Output ember a11y test report summary (admin) - run: 'cat ember-a11y-reports/admin.json | jq "map({moduleName,testName,routes,urls,violations: .violations | map({id, nodes: .nodes | map({failureSummary, targets: .[] | .[]? | .relatedNodes? | .[]? | .target? })}) })"' - - name: Output ember a11y test report summary (desktop) - run: 'cat ember-a11y-reports/desktop.json | jq "map({moduleName,testName,routes,urls,violations: .violations | map({id, nodes: .nodes | map({failureSummary, targets: .[] | .[]? | .relatedNodes? | .[]? | .target? })}) })"' - - name: Upload ember a11y reports - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: ember-a11y-reports - path: ./ember-a11y-reports - - name: Report a11y test results status - if: always() - # fail CI when the combined array length of admin and desktop a11y reports is not 0 - run: | - EMBER_A11Y_FAILURE_COUNT=$(jq -s 'map(.[]) | length' ember-a11y-reports/admin.json ember-a11y-reports/desktop.json) - echo "$EMBER_A11Y_FAILURE_COUNT ember-a11y test failures" - if [ "$EMBER_A11Y_FAILURE_COUNT" != '0' ]; then - exit 1 - fi diff --git a/.github/workflows/build-admin-ui.yaml b/.github/workflows/build-admin-ui.yaml deleted file mode 100644 index 4b94a9ef6..000000000 --- a/.github/workflows/build-admin-ui.yaml +++ /dev/null @@ -1,94 +0,0 @@ -name: Build Admin UI -on: - push: - branches: - - main - - "release/**" - workflow_dispatch: - -jobs: - dependencies: - name: Install dependencies - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - run_install: false - - run: pnpm install --frozen-lockfile - build-admin-ui-oss: - name: Build Admin UI OSS - needs: [dependencies] - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Build - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm run build:ui:admin:oss - - name: Upload artifact admin-ui - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: admin-ui - path: ./ui/admin/dist/ - - name: Upload artifact OSS admin UI - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: admin-ui-oss - path: ./ui/admin/dist/ - build-admin-ui-enterprise: - name: Build Admin UI Enterprise - needs: [dependencies] - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Build - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm run build:ui:admin:enterprise - - name: Upload artifact enterprise admin UI - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: admin-ui-ent - path: ./ui/admin/dist/ - build-admin-ui-hcp: - name: Build Admin UI HCP - needs: [dependencies] - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Build - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm run build:ui:admin:hcp - - name: Upload artifact HCP admin UI - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: admin-ui-hcp - path: ./ui/admin/dist/ diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index d5aeed55b..000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,62 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -name: "CodeQL" - -on: - push: - branches: [main] - pull_request: - # The branches below must be a subset of the branches above - branches: [main] - schedule: - - cron: '0 19 * * 4' - -jobs: - analyze: - name: Analyze - runs-on: ${{ fromJSON(vars.RUNNER) }} - - strategy: - fail-fast: false - matrix: - # Override automatic language detection by changing the below list - # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] - language: ['javascript'] - # Learn more... - # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection - - steps: - - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Set up Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@70df9def86d22bf0ea4e7f8b956e7b92e7c1ea22 # codeql-bundle-v2.20.7 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@70df9def86d22bf0ea4e7f8b956e7b92e7c1ea22 # codeql-bundle-v2.20.7 diff --git a/.github/workflows/copyright-validate.yaml b/.github/workflows/copyright-validate.yaml deleted file mode 100644 index bb1a6f159..000000000 --- a/.github/workflows/copyright-validate.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: Add Copyright Headers -on: pull_request -jobs: - copywrite: - runs-on: ${{ fromJSON(vars.RUNNER) }} - permissions: - contents: write - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - # Ref and repository aren't normally needed, this is a workaround for a bug in auto commit - with: - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} - - uses: hashicorp/setup-copywrite@32638da2d4e81d56a0764aa1547882fc4d209636 # v1.1.3 - - name: Add missing Copyright Headers - run: copywrite headers - - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7.1.0 - with: - commit_message: Add missing copyright headers diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml deleted file mode 100644 index a26df18d1..000000000 --- a/.github/workflows/labeler.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: "Pull Request Labeler" -on: -- pull_request_target - -jobs: - triage: - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" \ No newline at end of file diff --git a/.github/workflows/monorepo-validate.yaml b/.github/workflows/monorepo-validate.yaml deleted file mode 100644 index 427ee2219..000000000 --- a/.github/workflows/monorepo-validate.yaml +++ /dev/null @@ -1,74 +0,0 @@ -name: Validate Monorepo -on: pull_request -jobs: - - dependencies: - name: Install dependencies - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - run_install: false - - run: pnpm install --frozen-lockfile - - compliance: - name: License Compliance - needs: [dependencies] - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm run compliance:licenses - - lint: - name: Lint - needs: [dependencies, compliance] - runs-on: ${{ fromJSON(vars.RUNNER) }} - timeout-minutes: 5 - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm lint - - test: - name: Test - needs: [lint] - runs-on: ${{ fromJSON(vars.RUNNER) }} - timeout-minutes: 15 - steps: - - uses: browser-actions/setup-chrome@2e1d749697dd1612b833dba4a722266286fbefcd # v2.1.2 - with: - install-dependencies: true - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - run_install: false - cache: true - cache_dependency_path: '**/pnpm-lock.yaml' - - run: pnpm install --offline - - run: pnpm test diff --git a/.github/workflows/test-e2e-admin-ui.yaml b/.github/workflows/test-e2e-admin-ui.yaml deleted file mode 100644 index 532957cdf..000000000 --- a/.github/workflows/test-e2e-admin-ui.yaml +++ /dev/null @@ -1,340 +0,0 @@ -name: Test E2E Admin UI - -on: - pull_request: - types: [labeled, opened, synchronize, reopened] - workflow_dispatch: - inputs: - boundary-enterprise-branch: - description: 'Branch of boundary-enterprise to test against (default to main)' - required: true - default: 'main' - type: string - boundary-branch: - description: 'Branch of boundary to test against (default to main)' - required: true - default: 'main' - type: string - -jobs: - setup: - name: setup matrix - # don't need to run e2e tests on ce -> ent merges since tests were already - # run in the ce branch, and there are currently no code differences between - # the two repos - if: github.actor != 'hc-github-team-secure-boundary' - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} - steps: - - name: Set matrix - id: set-matrix - run: | - BOUNDARY_BRANCH="${{ github.event.inputs.boundary-branch || 'main' }}" - ENT_BRANCH="${{ github.event.inputs.boundary-enterprise-branch || 'main' }}" - - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - matrix=$(jq -cn --arg branch "$BOUNDARY_BRANCH" '{ - browser: ["chromium", "firefox", "webkit"], - include: [{ - boundary_edition: "community", - github_repo: "hashicorp/boundary", - folder_name: "boundary", - boundary_edition_short: "oss", - enos_scenario: "e2e_ui_docker", - test_command: "admin:ce:docker", - boundary_branch: $branch - }] - }') - else - matrix=$(jq -cn --arg branch "$ENT_BRANCH" '{ - browser: ["chromium", "firefox", "webkit"], - include: [{ - boundary_edition: "enterprise", - github_repo: "hashicorp/boundary-enterprise", - folder_name: "boundary-enterprise", - boundary_edition_short: "ent", - enos_scenario: "e2e_ui_docker_ent", - test_command: "admin:ent:docker", - boundary_branch: $branch - }] - }') - fi - echo "matrix=$matrix" >> "$GITHUB_OUTPUT" - - test: - name: test - needs: setup - runs-on: ${{ fromJSON(vars.RUNNER_UBUNTU_22) }} - strategy: - matrix: ${{ fromJSON(needs.setup.outputs.matrix) }} - fail-fast: false - env: - ENOS_VAR_e2e_debug_no_run: true - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - fetch-depth: 0 - - - name: Set up Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - - name: Set up pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - cache: true - cache_dependency_path: | - pnpm-lock.yaml - ui/desktop/electron-app/pnpm-lock.yaml - run_install: false - - - name: Set up Terraform - uses: hashicorp/setup-terraform@dfe3c3f87815947d99a8997f908cb6525fc44e9e - - - name: Set up Enos - uses: hashicorp/action-setup-enos@6ec106c8f809fe645162d73bea565c65f3269907 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Install Vault CLI - run: | - wget https://releases.hashicorp.com/vault/1.17.6/vault_1.17.6_linux_amd64.zip -O /tmp/vault.zip - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - unzip -o -q /tmp/vault.zip -d /usr/local/bin - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - unzip -o -q /tmp/vault.zip -d "$HOME/bin" - fi - - - name: GPG setup - run: | - # Create a GPG key - export KEY_PW=boundary - gpg --generate-key --batch <> ~/.gnupg/gpg-agent.conf - gpg-connect-agent reloadagent /bye &>/dev/null - - # Get information about the created keys - export lines=$(gpg --list-secret-keys --with-colons --with-keygrip) - export KEY_ID="" - while read -r line - do - # Save the first key id to be used later - if [[ $line =~ "fpr"* ]]; then - if [[ $KEY_ID == "" ]]; then - KEY_ID="$(echo "$line" | sed -r 's/fpr|://g')" - fi - fi - - # Cache the passphrases for the keys so passwords do not need to be entered - if [[ $line =~ "grp"* ]]; then - export KEYGRIP_ID="$(echo "$line" | sed -r 's/grp|://g')" - /usr/lib/gnupg/gpg-preset-passphrase --preset -P $KEY_PW $KEYGRIP_ID - fi - done <<< $lines - - # Trust the key - touch /tmp/test.txt - gpg -a --encrypt -r $KEY_ID --trust-model always --batch --yes /tmp/test.txt - echo "trusted-key $KEY_ID" >> ~/.gnupg/gpg.conf - - # Initialize the password store - sudo apt-get update - sudo apt-get install -y pass - pass init $KEY_ID &>/dev/null - - - name: Checkout ${{ matrix.folder_name }} repo - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - repository: ${{ matrix.github_repo }} - path: support/src/${{ matrix.folder_name }} - token: ${{ secrets.ELEVATED_GITHUB_TOKEN }} - ref: ${{ matrix.boundary_branch }} - - - name: GH fix for localhost resolution - run: | - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - cat /etc/hosts && echo "-----------" - sudo sed -i 's/::1 *localhost ip6-localhost ip6-loopback/::1 ip6 -localhost ip6-loopback/g' /etc/hosts - cat /etc/hosts - ssh -V - fi - - - name: Set git config - run: | - git config --global url."https://oauth2:${{ secrets.ELEVATED_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com" - - - name: Install Dependencies and Browsers - run: | - # Block Playwright from doing anything during the pnpm install - PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 pnpm install --frozen-lockfile - - cd e2e-tests - - # Install browsers and dependencies based on the repository - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - pnpm playwright install --with-deps - - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - # Use raw apt-get to install system libraries without npx - sudo apt-get install -y \ - libnss3 \ - libnspr4 \ - libatk1.0-0 \ - libatk-bridge2.0-0 \ - libcups2 \ - libdrm2 \ - libdbus-1-3 \ - libxcb1 \ - libxkbcommon0 \ - libx11-6 \ - libxcomposite1 \ - libxdamage1 \ - libxext6 \ - libxfixes3 \ - libxrandr2 \ - libgbm1 \ - libpango-1.0-0 \ - libcairo2 \ - libasound2 \ - libgtk-4-1 \ - libgraphene-1.0-0 \ - libevent-2.1-7 \ - libopus0 \ - libgstreamer-plugins-base1.0-0 \ - libgstreamer-plugins-good1.0-0 \ - libgstreamer-gl1.0-0 \ - libgstreamer-plugins-bad1.0-0 \ - libflite1 \ - libwebpdemux2 \ - libavif13 \ - libwebpmux3 \ - libmanette-0.2-0 \ - libenchant-2-2 \ - libhyphen0 \ - libsecret-1-0 \ - libwoff1 \ - libx264-163 \ - libsoup-3.0-0 \ - gstreamer1.0-libav \ - libicu70 \ - libegl1 \ - libepoxy0 \ - libevdev2 \ - libffi7 \ - libfontconfig1 \ - libfreetype6 \ - libgdk-pixbuf-2.0-0 \ - libgles2 \ - libglib2.0-0 \ - libglx0 \ - libgstreamer1.0-0 \ - libgudev-1.0-0 \ - libharfbuzz-icu0 \ - libharfbuzz0b \ - libjpeg-turbo8 \ - liblcms2-2 \ - libnotify4 \ - libopengl0 \ - libopenjp2-7 \ - libpng16-16 \ - libproxy1v5 \ - libwayland-client0 \ - libwayland-egl1 \ - libwayland-server0 \ - libxml2 \ - libxslt1.1 \ - libatomic1 - - # Install the browser executables - pnpm playwright install - fi - - - name: Determine Go version - id: get-go-version - run: | - echo "Building with Go $(cat ./support/src/${{matrix.folder_name}}/.go-version)" - echo "go-version=$(cat ./support/src/${{matrix.folder_name}}/.go-version)" >> "$GITHUB_OUTPUT" - - - name: Set up Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 - with: - go-version: ${{ steps.get-go-version.outputs.go-version }} - cache: false - - - name: Set up test infra - id: infra - run: | - ssh-keygen -N '' -t ed25519 -f ~/.ssh/github_enos - mkdir -p ./enos/terraform-plugin-cache - - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - echo ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} > ./support/src/${{matrix.folder_name}}/internal/ui/VERSION - export ENOS_VAR_ui_build_override="oss" - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - echo ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} > ./support/src/${{matrix.folder_name}}/internal/ui/VERSION_ent - export ENOS_VAR_ui_build_override="enterprise" - fi - - export ENOS_VAR_boundary_edition=${{ matrix.boundary_edition_short }} && \ - export ENOS_VAR_enos_user=$GITHUB_ACTOR && \ - export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \ - export ENOS_VAR_boundary_license="${{ secrets.BOUNDARY_ENT_LICENSE }}" && \ - enos scenario launch --timeout 60m0s --chdir ./support/src/${{matrix.folder_name}}/enos ${{matrix.enos_scenario}} builder:local - - - name: Move boundary binary - run: | - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - mv ./support/src/${{matrix.folder_name}}/bin/boundary /usr/local/bin/ - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - mv ./support/src/${{matrix.folder_name}}/bin/boundary $HOME/bin - fi - - boundary version - - - name: Run Tests - run: | - source <(bash ./support/src/${{matrix.folder_name}}/enos/scripts/test_e2e_env.sh) - cd e2e-tests - pnpm run ${{ matrix.test_command }} --project=${{ matrix.browser}} --reporter=html - - - name: Upload Playwright report - if: ${{ failure() }} - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: playwright-report-${{ matrix.boundary_edition }}-${{ matrix.browser }} - path: e2e-tests/playwright-report - - - name: Clean up test infra - if: ${{ always() }} - continue-on-error: true - run: | - export ENOS_VAR_boundary_edition=${{ matrix.boundary_edition_short }} && \ - export ENOS_VAR_enos_user=$GITHUB_ACTOR && \ - export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \ - enos scenario destroy --timeout 60m0s --chdir ./support/src/${{matrix.folder_name}}/enos ${{matrix.enos_scenario}} builder:local - - - name: Send Slack message on failure - uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3 - if: ${{ failure() && github.repository == 'hashicorp/boundary-ui-enterprise' }} - with: - method: chat.postMessage - token: ${{ secrets.SLACK_BOT_TOKEN }} - payload: | - channel: ${{ secrets.SLACK_CHANNEL_ID }} - text: ":x: admin ui e2e tests (${{ matrix.boundary_edition }}:${{ matrix.browser }}) failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Branch:* ${{ github.repository }}:${{ github.head_ref || github.ref_name }}" \ No newline at end of file diff --git a/.github/workflows/test-e2e-desktop.yaml b/.github/workflows/test-e2e-desktop.yaml deleted file mode 100644 index f83ea10c9..000000000 --- a/.github/workflows/test-e2e-desktop.yaml +++ /dev/null @@ -1,184 +0,0 @@ -name: Test E2E Desktop Client - -on: - pull_request: - types: [labeled, opened, synchronize, reopened] - workflow_dispatch: - inputs: - boundary-enterprise-branch: - description: 'Branch of boundary-enterprise to test against (default to main)' - required: true - default: 'main' - type: string - boundary-ui-enterprise-branch: - description: 'Branch of boundary-ui-enterprise to test against (default to main)' - required: true - default: 'main' - type: string - -jobs: - test: - name: test - # don't need to run e2e tests on ce -> ent merges since tests were already - # run in the ce branch, and there are currently no code differences between - # the two repos - # desktop client e2e tests only run enterprise tests, so only run in boundary-ui-enterprise - if: github.actor != 'hc-github-team-secure-boundary' && github.repository == 'hashicorp/boundary-ui-enterprise' - runs-on: ${{ fromJSON(vars.RUNNER_UBUNTU_22) }} - env: - ENOS_VAR_boundary_edition: "ent" - ENOS_VAR_e2e_debug_no_run: true - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - fetch-depth: 0 - - - name: Set up Node - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 24 - - - name: Set up pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 #v6.0.8 - with: - cache: true - cache_dependency_path: | - pnpm-lock.yaml - ui/desktop/electron-app/pnpm-lock.yaml - run_install: false - - - name: Set up Terraform - uses: hashicorp/setup-terraform@dfe3c3f87815947d99a8997f908cb6525fc44e9e - - - name: Set up Enos - uses: hashicorp/action-setup-enos@6ec106c8f809fe645162d73bea565c65f3269907 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Install Vault CLI - run: | - wget https://releases.hashicorp.com/vault/1.17.6/vault_1.17.6_linux_amd64.zip -O /tmp/vault.zip - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - unzip -o -q /tmp/vault.zip -d /usr/local/bin - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - unzip -o -q /tmp/vault.zip -d "$HOME/bin" - fi - - # TODO: We should consider modifying to also build CE binary. For now - # building ENT binary using most recent UI commit is sufficient. - - name: Checkout boundary-enterprise - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - repository: hashicorp/boundary-enterprise - ref: ${{ github.event.inputs.boundary-enterprise-branch || 'main' }} - path: support/src/boundary-enterprise - token: ${{ secrets.ELEVATED_GITHUB_TOKEN }} - - - name: Checkout boundary-ui-enterprise - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - repository: hashicorp/boundary-ui-enterprise - ref: ${{ github.event.inputs.boundary-ui-enterprise-branch || 'main' }} - path: support/src/boundary-ui-enterprise - token: ${{ secrets.ELEVATED_GITHUB_TOKEN }} - - - name: Use boundary-ui-enterprise commit SHA for building binary - run: | - cd support/src/boundary-ui-enterprise - git rev-parse HEAD > ../boundary-enterprise/internal/ui/VERSION_ent - - - name: GH fix for localhost resolution - run: | - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - cat /etc/hosts && echo "-----------" - sudo sed -i 's/::1 *localhost ip6-localhost ip6-loopback/::1 ip6 -localhost ip6-loopback/g' /etc/hosts - cat /etc/hosts - ssh -V - fi - - - name: Set git config - run: | - git config --global url."https://oauth2:${{ secrets.ELEVATED_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com" - - - name: Determine Go version - id: get-go-version - run: | - echo "Building with Go $(cat ./support/src/boundary-enterprise/.go-version)" - echo "go-version=$(cat ./support/src/boundary-enterprise/.go-version)" >> "$GITHUB_OUTPUT" - - - name: Set up Go - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 - with: - go-version: ${{ steps.get-go-version.outputs.go-version }} - cache: false - - - name: Set up test infra - id: infra - run: | - ssh-keygen -N '' -t ed25519 -f ~/.ssh/github_enos - mkdir -p ./enos/terraform-plugin-cache - export ENOS_VAR_ui_build_override="ent" && \ - export ENOS_VAR_boundary_edition="ent" && \ - export ENOS_VAR_enos_user=$GITHUB_ACTOR && \ - export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \ - export ENOS_VAR_boundary_license="${{ secrets.BOUNDARY_ENT_LICENSE }}" && \ - enos scenario launch --timeout 60m0s --chdir ./support/src/boundary-enterprise/enos e2e_ui_docker_ent builder:local - - - name: Move boundary binary - run: | - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - mv ./support/src/boundary-enterprise/bin/boundary /usr/local/bin/ - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - mv ./support/src/boundary-enterprise/bin/boundary $HOME/bin - fi - boundary version - - - name: Install dependencies - run: | - pnpm install --frozen-lockfile - cd e2e-tests - if [[ "${{ github.repository }}" == "hashicorp/boundary-ui" ]]; then - pnpm playwright install --with-deps - elif [[ "${{ github.repository }}" == "hashicorp/boundary-ui-enterprise" ]]; then - # playwright dependencies can't be installed on a self-hosted runner - # due to permission issues - pnpm playwright install - - sudo apt update -qq - sudo apt install xvfb -y - fi - - # Runner is headless so we need to enable a display to run the client - - name: Run Tests - run: | - source <(bash ./support/src/boundary-enterprise/enos/scripts/test_e2e_env.sh) - cd e2e-tests - - export DISPLAY=:99 - Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & - pnpm run desktop - - - name: Upload Playwright report - if: ${{ failure() }} - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: playwright-report - path: e2e-tests/playwright-report - - - name: Clean up test infra - if: ${{ always() }} - continue-on-error: true - run: | - export ENOS_VAR_enos_user=$GITHUB_ACTOR && \ - export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \ - enos scenario destroy --timeout 60m0s --chdir ./support/src/boundary-enterprise/enos e2e_ui_docker_ent builder:local - - - name: Send Slack message on failure - uses: slackapi/slack-github-action@45a88b9581bfab2566dc881e2cd66d334e621e2c # v3.0.3 - if: ${{ failure() && github.repository == 'hashicorp/boundary-ui-enterprise' }} - with: - method: chat.postMessage - token: ${{ secrets.SLACK_BOT_TOKEN }} - payload: | - channel: ${{ secrets.SLACK_CHANNEL_ID }} - text: ":x: desktop client e2e tests failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Branch:* ${{ github.repository }}:${{ github.head_ref || github.ref_name }}" diff --git a/.github/workflows/ui-release-trigger.yml b/.github/workflows/ui-release-trigger.yml deleted file mode 100644 index c29b564a2..000000000 --- a/.github/workflows/ui-release-trigger.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: "Trigger Boundary Desktop release" - -on: - push: - tags: - - '*' - -jobs: - trigger-gha-release: - runs-on: ${{ fromJSON(vars.RUNNER) }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Release description - run: | - echo "Triggering release with a TAG ${GITHUB_REF#refs/tags/}" - - name: Trigger Release workflow in boundary-desktop-releases - run: | - export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}" - gh workflow run release.yml \ - --repo hashicorp/boundary-desktop-releases \ - --ref main \ - -f TAG="${GITHUB_REF#refs/tags/}" \ No newline at end of file diff --git a/.release/release-metadata.hcl b/.release/release-metadata.hcl deleted file mode 100644 index 480d18228..000000000 --- a/.release/release-metadata.hcl +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2021, 2026 -# SPDX-License-Identifier: BUSL-1.1 - -url_license = "https://github.com/hashicorp/boundary-ui/blob/main/LICENSE" -url_project_website = "https://learn.hashicorp.com/tutorials/boundary/getting-started-desktop-app" -url_source_repository = "https://github.com/hashicorp/boundary-ui" \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 000000000..f964a5471 --- /dev/null +++ b/NOTICE @@ -0,0 +1,28 @@ +Threshold UI +Copyright (c) 2026 CyberCove LLC + +This repository is a community fork of "Boundary UI" +(https://github.com/hashicorp/boundary-ui), the admin web UI and desktop +client for HashiCorp Boundary. + + Upstream work: Copyright (c) HashiCorp, Inc. 2020-2023; + Copyright (c) IBM Corp. 2024-2026 + Upstream license: Business Source License 1.1 (see LICENSE) + +The upstream LICENSE and per-file copyright / SPDX headers are retained +unchanged. Modifications made in this fork are provided under the same +license terms (BUSL-1.1), including its Additional Use Grant and Change +Date as stated in LICENSE. + +This project is an independent community effort. It is NOT affiliated with, +endorsed by, or sponsored by HashiCorp, Inc. or IBM Corp. "HashiCorp", +"Boundary", and related marks and logos are trademarks of their respective +owners; they are used here only to describe the upstream origin of this work +and to name the upstream CLI/API this software interoperates with. The +upstream logos and brand art have been removed and replaced with plain +placeholder marks. + +Third-party components keep their own licenses (see pnpm-lock.yaml and the +`pnpm compliance:licenses` script). The HashiCorp Design System packages +(@hashicorp/design-system-components, -tokens, @hashicorp/flight-icons) are +consumed unmodified from the public npm registry under their own licenses. diff --git a/README.md b/README.md index 67b51b8ea..118b66abd 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,41 @@ -# Boundary UI Monorepo -![](boundary.png) - -![Validate Monorepo](https://github.com/hashicorp/boundary-ui/workflows/Validate%20Monorepo/badge.svg) +# Threshold UI Monorepo This monorepo contains multiple projects, including UIs and addons, used by -Boundary. +Threshold (the admin web UI and the desktop client). + +## About this fork + +This repository is a community fork of +[hashicorp/boundary-ui](https://github.com/hashicorp/boundary-ui), rebranded +for the Threshold project (a community fork of Boundary CE). It is licensed +under the upstream Business Source License 1.1 (see [LICENSE](LICENSE) and +[NOTICE](NOTICE)) and is **not affiliated with, endorsed by, or sponsored by +HashiCorp or IBM**. + +What changed relative to upstream: + +- User-visible product name is Threshold (window titles, menus, about dialog, + installer/package names, app id `net.anhonesthost.cybercove.threshold`). + API paths, field names, protocol strings and environment variable names are + unchanged for compatibility with the server. The desktop client's persisted + settings are copied from the former "Boundary" user-data directory on first + launch. +- The desktop client looks for a `threshold` CLI first, then `boundary`. +- HashiCorp/IBM logos and brand art were removed and replaced with plain + placeholder marks. +- Nothing contacts HashiCorp services by default. The in-app updater, the + "unsupported controller" release-metadata lookup, and the CLI bundling + download are disabled until you configure your own hosts: + `THRESHOLD_UPDATE_FEED_URL` (desktop build, updater feed), + `THRESHOLD_RELEASES_METADATA_URL` / `THRESHOLD_RELEASES_PAGE_URL` + (desktop build, release links) and `THRESHOLD_CLI_RELEASES_URL` / + `THRESHOLD_CLI_ARCHIVE_PREFIX` (used with `SETUP_CLI=true` to bundle a CLI). +- Documentation links still point at the upstream Boundary documentation, + which is user-initiated only. +- Upstream HashiCorp-internal GitHub workflows and release metadata were + removed; CI lives in `.gitea/workflows/ci.yml`. + +Upstream history, CHANGELOGs and copyright headers are preserved. This top-level repository provides limited common tasks, such as installation and commit assistance. However, most tasks must be executed from within a diff --git a/addons/api/package.json b/addons/api/package.json index 4d013f02b..df2f4815b 100644 --- a/addons/api/package.json +++ b/addons/api/package.json @@ -1,9 +1,9 @@ { "name": "api", "version": "0.0.0", - "description": "API data layer for Boundary.", + "description": "API data layer for Threshold.", "license": "BUSL-1.1", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "keywords": [ "ember-addon" ], diff --git a/addons/auth/package.json b/addons/auth/package.json index 6eccd796e..4b04e6612 100644 --- a/addons/auth/package.json +++ b/addons/auth/package.json @@ -1,9 +1,9 @@ { "name": "auth", "version": "0.0.0", - "description": "Authentication layer for Boundary.", + "description": "Authentication layer for Threshold.", "license": "BUSL-1.1", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "keywords": [ "ember-addon" ], diff --git a/addons/core/public/logo-app-background.svg b/addons/core/public/logo-app-background.svg index 489ba32c2..1c576a30e 100644 --- a/addons/core/public/logo-app-background.svg +++ b/addons/core/public/logo-app-background.svg @@ -1,12 +1,6 @@ - - - - - - - - - - + + + + diff --git a/addons/core/public/logo-app-full.svg b/addons/core/public/logo-app-full.svg index 2d64e2942..7b50731c2 100644 --- a/addons/core/public/logo-app-full.svg +++ b/addons/core/public/logo-app-full.svg @@ -1,69 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + Threshold diff --git a/addons/core/public/logo-app.svg b/addons/core/public/logo-app.svg index 3e65e7870..2500a9631 100644 --- a/addons/core/public/logo-app.svg +++ b/addons/core/public/logo-app.svg @@ -1,71 +1,7 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/addons/core/public/logo-company.svg b/addons/core/public/logo-company.svg index 92ce7776e..9a7826aa8 100644 --- a/addons/core/public/logo-company.svg +++ b/addons/core/public/logo-company.svg @@ -1,24 +1,4 @@ - - - - - - - - - - - - + + + diff --git a/addons/core/translations/en-us.yaml b/addons/core/translations/en-us.yaml index 9f66ac696..c168734fe 100644 --- a/addons/core/translations/en-us.yaml +++ b/addons/core/translations/en-us.yaml @@ -27,7 +27,7 @@ titles: action: Action documentation: Documentation abandon-confirm: Discard unsaved changes? - welcome-to-boundary: Welcome to Boundary + welcome-to-boundary: Welcome to Threshold label: Label value: Value no-results: No Results @@ -84,27 +84,27 @@ onboarding: target-port: Default Port target-setup-info: We’ll set up scopes for you descriptions: - setup-first-target: In Boundary, a “target” defines a server that your users will connect to. We can help you set up your first target for proof-of-concept testing, or you can skip this step if you don’t want to do it right now. + setup-first-target: In Threshold, a “target” defines a server that your users will connect to. We can help you set up your first target for proof-of-concept testing, or you can skip this step if you don’t want to do it right now. target-address: Host name or IP address. target-port: The default port on which to connect. target-setup-info: Targets live in projects, and projects live in orgs. We will create these example scopes for you but they can be edited or deleted later. success: titles: connect: Connect to your target - desktop: Using Boundary Desktop + desktop: Using Threshold Desktop developers: Developers controller: Controller URL creation-success: We have created your scopes and target descriptions: - download: Download the Boundary Desktop app to browse and connect to targets (available for Windows, Mac, and Linux) - developers: You can also connect to targets using the Boundary CLI or API. - controller: Use this URL to sign in to Boundary - role: You can now connect to the target with the Boundary Desktop app, command-line (CLI) or API. Boundary grants access to resources based on roles, and we have added you to the `demo` role to give you access to this target. Make sure to add this role to any new users if you want them to access it too. + download: Download the Threshold Desktop app to browse and connect to targets (available for Windows, Mac, and Linux) + developers: You can also connect to targets using the Threshold CLI or API. + controller: Use this URL to sign in to Threshold + role: You can now connect to the target with the Threshold Desktop app, command-line (CLI) or API. Threshold grants access to resources based on roles, and we have added you to the `demo` role to give you access to this target. Make sure to add this role to any new users if you want them to access it too. links: - install: Install the Boundary Desktop app - learn: Learn about Boundary Desktop app - cli: Learn about Boundary command-line (CLI) - api: Learn about Boundary API + install: Install the Threshold Desktop app + learn: Learn about Threshold Desktop app + cli: Learn about Threshold command-line (CLI) + api: Learn about Threshold API unsupported-controller: title: Unsupported controller version description: @@ -120,7 +120,7 @@ settings: cli: CLI cache-daemon: Cache Daemon client-agent: - title: Boundary Client Agent + title: Threshold Client Agent description: Required to use Transparent Sessions client: Client version: Version @@ -130,7 +130,7 @@ settings: self-managed: Self-managed server: title: Server - description: Boundary connects you to targets using this server managed by your organization. + description: Threshold connects you to targets using this server managed by your organization. logs: title: Logs logging-level: Logging level @@ -145,7 +145,7 @@ settings: client-agent: There may be a problem with the client agent preferred-clients: title: Preferred Clients - description: Select the applications for Boundary to use when opening these target types. + description: Select the applications for Threshold to use when opening these target types. table: header: protocol: Protocol diff --git a/addons/core/translations/form/en-us.yaml b/addons/core/translations/form/en-us.yaml index 9867688d1..6d609e7cc 100644 --- a/addons/core/translations/form/en-us.yaml +++ b/addons/core/translations/form/en-us.yaml @@ -55,7 +55,7 @@ session_id: label: Session ID worker_release_version: label: Release Version - help: The version of the Boundary binary the worker is running. + help: The version of the Threshold binary the worker is running. worker_authorized_actions: label: Authorized Actions worker_last_seen: @@ -70,12 +70,12 @@ grant_scope: help: Specify the scope to which this role applies. cluster-url: label: Cluster URL - description: The Boundary URL to which to connect (e.g. protocol://host:port) + description: The Threshold URL to which to connect (e.g. protocol://host:port) proxy_url: label: Proxy URL issuer: label: Issuer - help: The issuer URL. Boundary expects only the schema, host, and port and will strip off ".well-known/openid-configuration" if present. This will be used for configuration discovery as well as for validation of the "iss" claim. + help: The issuer URL. Threshold expects only the schema, host, and port and will strip off ".well-known/openid-configuration" if present. This will be used for configuration discovery as well as for validation of the "iss" claim. client_id: label: Client ID help: An OAuth 2.0 Client Identifier valid at the Authorization Server. @@ -159,7 +159,7 @@ secret_access_key: help: The secret access key generated by AWS for the IAM user to use with this AWS Host Catalog. secret: label: Client Secret Value - help: The client secret value generated by Azure for Boundary to use for authentication. + help: The client secret value generated by Azure for Threshold to use for authentication. disable_credential_rotation: label: Disable credential rotation help: Azure host catalogs do not yet support credential rotation. @@ -173,7 +173,7 @@ ip_addresses: help: Read-only public and private IP addresses given by the plugin host catalog provider sync-interval: label: Sync Interval - help: Number of seconds between the time Boundary syncs hosts in this set. + help: Number of seconds between the time Threshold syncs hosts in this set. tags: label: Tags secret-editor: @@ -184,6 +184,6 @@ created: label: Created other_fields: label: Other Fields - help: This information is provided by the server and cannot be edited in Boundary + help: This information is provided by the server and cannot be edited in Threshold worker_filter: label: Worker Filter diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml index b8b6c9e67..5538dcedd 100644 --- a/addons/core/translations/resources/en-us.yaml +++ b/addons/core/translations/resources/en-us.yaml @@ -4,7 +4,7 @@ account: title: Account title_plural: Accounts - description: An account allows a user to log into Boundary with a particular auth method. Users may have multiple accounts for different auth methods. + description: An account allows a user to log into Threshold with a particular auth method. Users may have multiple accounts for different auth methods. messages: welcome: title: Welcome to Accounts @@ -167,13 +167,13 @@ auth-method: help: This group includes inputs for configuring the LDAP server itself, such as the server name, port, and authentication settings. authenticated-search: title: Authenticated search - help: Used when Boundary authenticates to the LDAP server. + help: Used when Threshold authenticates to the LDAP server. anonymous-search: title: Anonymous search help: Allows you to bind anonymously to the directory when searching for user entries. user-entries: title: User entries - help: Before authenticating an end user, Boundary must first find the end user’s entry in the directory. + help: Before authenticating an end user, Threshold must first find the end user’s entry in the directory. group-entries: title: Group entries help: After authenticating an end user, we need to find out which groups the user is a member of. The configuration for this can vary depending on your LDAP server and your directory schema. @@ -239,7 +239,7 @@ host-catalog: help: AWS region of the hosts to be added to this AWS Host Catalog. azure_client_id: label: Client/Application ID - help: The client (application) ID of an Azure service principal that Boundary will use to authenticate and discover hosts from Azure. + help: The client (application) ID of an Azure service principal that Threshold will use to authenticate and discover hosts from Azure. worker_filter: help: Insert a worker filter in order to select the correct worker. project_id: @@ -302,7 +302,7 @@ host: title: Host title_plural: Hosts no_name_title: Unnamed Host - description: A host is a resource that may be accessed by a Boundary target. + description: A host is a resource that may be accessed by a Threshold target. details: Host Details messages: welcome: @@ -323,7 +323,7 @@ session: title: Session title_plural: Sessions active_plural: Active Sessions - description: A session is a connection to a target initiated through Boundary. + description: A session is a connection to a target initiated through Threshold. remaining: remaining status: active: Active @@ -344,7 +344,7 @@ session: title: Connected description: You can now access {targetDisplayName} stop-sessions-and-signout: - title: Sign out of Boundary? + title: Sign out of Threshold? description: Signing out will stop all active and pending target sessions. Are you sure you want to sign out? stop-sessions-before-quit: title: Close sessions before quitting? @@ -539,7 +539,7 @@ storage-bucket: help: Filters to the worker(s) that can handle requests for this storage bucket. disable_credential_rotation: label: Disable credential rotation - help: Disabling credential rotation could allow entities outside of Boundary to know the client secret in use. + help: Disabling credential rotation could allow entities outside of Threshold to know the client secret in use. questions: delete-storage-bucket: title: Delete associated recordings? @@ -560,7 +560,7 @@ project: user: title: User title_plural: Users - description: Users are entities authorized to access Boundary. Users may be assigned to roles as principals, thus receiving role grants. + description: Users are entities authorized to access Threshold. Users may be assigned to roles as principals, thus receiving role grants. messages: welcome: title: Welcome to Users @@ -634,7 +634,7 @@ role: templates: global-admin: name: Global Admin - description: Full administrative access to all resources in Boundary + description: Full administrative access to all resources in Threshold org-access: name: Org Access description: Administrative access to perform actions on an org scope, but not the resources the org contains @@ -805,10 +805,10 @@ role: add-worker-tags: Add tags to a worker set-worker-tags: Set the full list of tags on a worker remove-worker-tags: Remove tags from a worker - reinitialize-certificate-authority: Reinitialize the certificate authority that is used to authorize Boundary workers + reinitialize-certificate-authority: Reinitialize the certificate authority that is used to authorize Threshold workers create:controller-led: Create a worker via controller-led workflow create:worker-led: Create a worker via worker-led workflow - read-certificate-authority: Read the certificate authority that is used to authorize Boundary workers + read-certificate-authority: Read the certificate authority that is used to authorize Threshold workers set-password: Set a password on an account, without requiring the current password change-password: Change the password on an account authenticate: Authenticate to an auth method @@ -846,7 +846,7 @@ role: list-exports: List all export jobs for session recordings export: Export a session recording export:cancel: Cancel an in-progress session recording export - monthly-active-users: Display the number of monthly active Boundary users to help predict billing + monthly-active-users: Display the number of monthly active Threshold users to help predict billing no-actions: No actions available for this resource type. invalid-id-or-type: Invalid ID and type. No actions available. no-type-detected: No resource type detected. @@ -936,7 +936,7 @@ target: title: Welcome to Targets none: title: No Targets Available - description: No Targets to display yet. Contact your Boundary admin if you don't see a Target you expect access to. + description: No Targets to display yet. Contact your Threshold admin if you don't see a Target you expect access to. connection-success: title: Successfully Connected connection-details: @@ -1053,10 +1053,10 @@ target: description: Select injected Application credential sources to assign to this target. alert: title: Cannot connect to this target without injected application credentials - description: Injected application credentials are used by Boundary to sign in to remote resources without showing them to the end-user. + description: Injected application credentials are used by Threshold to sign in to remote resources without showing them to the end-user. action: Add injected application credentials workers: - description: You can customize how your workers route traffic to this target by setting up a filter that matches specific worker tags. If your target is in a private network, we recommend setting up an egress filter to specify a worker inside the network so that Boundary can access the host. Ingress and egress filters are allowed to select the same worker. + description: You can customize how your workers route traffic to this target by setting up a filter that matches specific worker tags. If your target is in a private network, we recommend setting up an egress filter to specify a worker inside the network so that Threshold can access the host. Ingress and egress filters are allowed to select the same worker. messages: none: description: You haven't added an {type} worker filter yet. @@ -1082,7 +1082,7 @@ target: description: Specify workers that have access to the target (such as within a private network). edit-ingress-worker-filter: title: Edit Ingress Worker Filter - description: Specify workers Boundary should use to start the route to this target. + description: Specify workers Threshold should use to start the route to this target. worker-filter: description: The worker filter format for this target. accordion-label: @@ -1098,7 +1098,7 @@ credential-store: titles: new: New Credential Store worker-filter: - description: A filter used to control which PKI workers can handle Vault requests, allowing the use of private Vault instances with Boundary. + description: A filter used to control which PKI workers can handle Vault requests, allowing the use of private Vault instances with Threshold. messages: none: description: You haven't added a worker filter yet. @@ -1342,20 +1342,20 @@ worker: view_more: View more tags form: cluster_id: - label: Boundary Cluster ID + label: Threshold Cluster ID help: The cluster ID is the UUID in the HCP Boundary Controller URL. ip_address: label: Worker public address help: Public IP or address. initial_upstreams: label: Initial Upstreams - help: A list of hosts/IP addresses and optionally ports for reaching Boundary cluster. The port will default to :9201 if not specified. + help: A list of hosts/IP addresses and optionally ports for reaching Threshold cluster. The port will default to :9201 if not specified. config_file_path: label: Config file path help: The path on your server where you will store your configuration file. worker_tags: label: Worker Tags - help: Boundary can use tags to define key-value pairs which targets can use to determine where they should route connections. + help: Threshold can use tags to define key-value pairs which targets can use to determine where they should route connections. local_session_recording_storage: label: Local Session Recording Storage help: To record sessions using this worker, specify a local storage path and ensure that it is provisioned with sufficient capacity. In progress recordings are stored locally until they complete, and then moved to the remote storage bucket associated with their target. @@ -1371,8 +1371,8 @@ worker: create_config: 'Open the file with a text editor, such as Vi. Paste the following configuration into the worker config file:' save_config: Save the configuration in your pki-worker.hcl file. 2: - title: 2. Install & start Boundary on your server - run_command: 'Run this command on your server to install Boundary:' + title: 2. Install & start Threshold on your server + run_command: 'Run this command on your server to install Threshold:' copy_registration_request: When the server starts, it will print details related to this worker. Copy the value for 3: title: 3. Confirm the worker when they connect diff --git a/addons/rose/package.json b/addons/rose/package.json index 0dc1882eb..068428376 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -1,9 +1,9 @@ { "name": "rose", "version": "0.0.0", - "description": "Styles and components for Boundary.", + "description": "Styles and components for Threshold.", "license": "BUSL-1.1", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "keywords": [ "ember-addon" ], diff --git a/boundary.png b/boundary.png deleted file mode 100644 index 422535b74..000000000 Binary files a/boundary.png and /dev/null differ diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 1da8500f9..1c395aaff 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -2,7 +2,7 @@ "name": "e2e-tests", "version": "0.0.0", "description": "End to end tests for boundary UI", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "license": "BUSL-1.1", "private": true, "type": "module", diff --git a/package.json b/package.json index a5fb48069..7bea3af55 100755 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "private": true, - "description": "Monorepo for Boundary UIs and addons.", + "description": "Monorepo for Threshold UIs and addons.", "license": "BUSL-1.1", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "scripts": { "build": "pnpm build:ui:admin", "build:ui:admin": "pnpm run --filter admin build", diff --git a/ui/admin/app/components/form/worker/create-worker-led/index.js b/ui/admin/app/components/form/worker/create-worker-led/index.js index 2b3146c1a..0486f6405 100644 --- a/ui/admin/app/components/form/worker/create-worker-led/index.js +++ b/ui/admin/app/components/form/worker/create-worker-led/index.js @@ -114,16 +114,16 @@ ${listenerText} */ get installBoundaryText() { const configPath = this.configFilePath || ''; - const ossContent = `curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - ;\\ -sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" ;\\ -sudo apt-get update && sudo apt-get install boundary ;\\ -boundary server -config="${configPath}/pki-worker.hcl"`; + // Threshold: install the `threshold` package from your Threshold package + // repository (the package also provides a `boundary` command alias). No + // HashiCorp package or release host is referenced. + const ossContent = `sudo apt-get update && sudo apt-get install threshold ;\\ +threshold server -config="${configPath}/pki-worker.hcl"`; - const hcpContent = `sudo apt-get update && sudo apt-get install jq unzip ;\\ -wget -q "$(curl -fsSL "https://api.releases.hashicorp.com/v1/releases/boundary/latest?license_class=enterprise" \ -| jq -r '.builds[] | select(.arch == "amd64" and .os == "linux") | .url')" ;\\ -unzip *.zip ;\\ -./boundary server -config="${configPath}/pki-worker.hcl"`; + // HCP-cluster workers are an HCP (HashiCorp Cloud Platform) feature; the + // generic instructions apply. Place the downloaded threshold binary in + // the working directory before running. + const hcpContent = `./threshold server -config="${configPath}/pki-worker.hcl"`; return this.features.isEnabled('byow-pki-hcp-cluster-id') ? hcpContent diff --git a/ui/admin/app/index.html b/ui/admin/app/index.html index dc48df89a..e8ac2fb45 100644 --- a/ui/admin/app/index.html +++ b/ui/admin/app/index.html @@ -8,8 +8,8 @@ - Admin - + Threshold Admin + diff --git a/ui/admin/app/templates/account/change-password.hbs b/ui/admin/app/templates/account/change-password.hbs index c75e69b98..dcef13a7b 100644 --- a/ui/admin/app/templates/account/change-password.hbs +++ b/ui/admin/app/templates/account/change-password.hbs @@ -11,7 +11,7 @@ <:header> - + {{t 'actions.change-password' }} diff --git a/ui/admin/app/templates/application.hbs b/ui/admin/app/templates/application.hbs index a93d7bb8e..5af4b5f15 100644 --- a/ui/admin/app/templates/application.hbs +++ b/ui/admin/app/templates/application.hbs @@ -17,8 +17,8 @@ > <:logo> <:header> - + {{t 'onboarding.add-target.titles.have-a-target' }} diff --git a/ui/admin/app/templates/onboarding/success.hbs b/ui/admin/app/templates/onboarding/success.hbs index 2acb74f7a..f342d9af5 100644 --- a/ui/admin/app/templates/onboarding/success.hbs +++ b/ui/admin/app/templates/onboarding/success.hbs @@ -8,7 +8,7 @@ <:header> - + {{t 'onboarding.success.titles.connect' }} diff --git a/ui/admin/app/templates/scopes/scope/authenticate.hbs b/ui/admin/app/templates/scopes/scope/authenticate.hbs index 67aee5c37..8fe384e67 100644 --- a/ui/admin/app/templates/scopes/scope/authenticate.hbs +++ b/ui/admin/app/templates/scopes/scope/authenticate.hbs @@ -15,7 +15,7 @@ {{else}} <:header> - + {{t 'actions.authenticate' }} diff --git a/ui/admin/config/environment.js b/ui/admin/config/environment.js index 640aeb024..a0a5adfa6 100644 --- a/ui/admin/config/environment.js +++ b/ui/admin/config/environment.js @@ -12,7 +12,7 @@ const { licensedFeatures, } = require('./features'); -const APP_NAME = process.env.APP_NAME || 'Boundary'; +const APP_NAME = process.env.APP_NAME || 'Threshold'; const API_HOST = process.env.API_HOST || ''; const ENABLE_A11Y_AUDIT = process.env.ENABLE_A11Y_AUDIT || false; const COLOR_THEME = process.env.COLOR_THEME ?? 'light'; @@ -52,7 +52,7 @@ module.exports = function (environment) { }, appName: APP_NAME, - companyName: 'HashiCorp', + companyName: 'CyberCove LLC', oidcPollingTimeoutSeconds: 1, @@ -147,7 +147,8 @@ module.exports = function (environment) { alias: '/docs/concepts/aliases', 'alias.single-word-aliases': '/docs/targets/configuration#single-word-aliases-and-transparent-sessions', - 'support-page': 'https://support.hashicorp.com/hc/en-us', + 'support-page': + 'https://repo.anhonesthost.net/CyberCoveLLC/threshold-ui/issues', }, }, diff --git a/ui/admin/package.json b/ui/admin/package.json index 9604e8fe1..6f92e53ee 100644 --- a/ui/admin/package.json +++ b/ui/admin/package.json @@ -2,9 +2,9 @@ "name": "admin", "version": "0.0.0", "private": true, - "description": "Admin UI for Boundary.", + "description": "Admin UI for Threshold.", "license": "BUSL-1.1", - "author": "HashiCorp", + "author": "CyberCove LLC (fork of HashiCorp Boundary UI)", "directories": { "doc": "doc", "test": "tests" diff --git a/ui/admin/tests/acceptance/workers/create-test.js b/ui/admin/tests/acceptance/workers/create-test.js index ec1842e6f..1fbc2c6f1 100644 --- a/ui/admin/tests/acceptance/workers/create-test.js +++ b/ui/admin/tests/acceptance/workers/create-test.js @@ -76,7 +76,7 @@ module('Acceptance | workers | create', function (hooks) { const labels = findAll(selectors.WORKER_CREATE_SECTION_FORM_LABEL); - assert.dom(labels[0]).hasText('Boundary Cluster ID (Optional)'); + assert.dom(labels[0]).hasText('Threshold Cluster ID (Optional)'); assert.dom(labels[2]).doesNotIncludeText('Initial Upstreams'); }); @@ -100,7 +100,7 @@ module('Acceptance | workers | create', function (hooks) { const labels = findAll(selectors.WORKER_CREATE_SECTION_FORM_LABEL); assert.false(featuresService.isEnabled('byow-pki-hcp-cluster-id')); - assert.dom(labels[0]).doesNotIncludeText('Boundary Cluster ID'); + assert.dom(labels[0]).doesNotIncludeText('Threshold Cluster ID'); assert.dom(labels[2]).hasText('Initial Upstreams (Optional)'); }); @@ -126,14 +126,10 @@ module('Acceptance | workers | create', function (hooks) { assert.false(featuresService.isEnabled('byow-pki-hcp-cluster-id')); assert .dom(createSection[1]) - .includesText( - 'curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - ;', - ); + .includesText('sudo apt-get install threshold ;'); assert .dom(createSection[1]) - .doesNotIncludeText( - 'wget -q "$(curl -fsSL "https://api.releases.hashicorp.com/v1/releases/boundary/latest?license_class=enterprise"', - ); + .doesNotIncludeText('./threshold server -config='); }); test('download and install step shows correct hcp instructions', async function (assert) { @@ -156,16 +152,10 @@ module('Acceptance | workers | create', function (hooks) { const createSection = findAll(selectors.WORKER_CREATE_SECTION); + assert.dom(createSection[1]).includesText('./threshold server -config='); assert .dom(createSection[1]) - .includesText( - 'wget -q "$(curl -fsSL "https://api.releases.hashicorp.com/v1/releases/boundary/latest?license_class=enterprise"', - ); - assert - .dom(createSection[1]) - .doesNotIncludeText( - 'curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - ;', - ); + .doesNotIncludeText('sudo apt-get install threshold ;'); }); test('Users can navigate to new workers route with proper authorization', async function (assert) { diff --git a/ui/desktop/app/components/settings-card/application/index.hbs b/ui/desktop/app/components/settings-card/application/index.hbs index b93a1e895..54e208f67 100644 --- a/ui/desktop/app/components/settings-card/application/index.hbs +++ b/ui/desktop/app/components/settings-card/application/index.hbs @@ -3,7 +3,7 @@ SPDX-License-Identifier: BUSL-1.1 }} - + <:body>
diff --git a/ui/desktop/app/routes/scopes.js b/ui/desktop/app/routes/scopes.js index 63606337e..39227141c 100644 --- a/ui/desktop/app/routes/scopes.js +++ b/ui/desktop/app/routes/scopes.js @@ -6,6 +6,7 @@ import Route from '@ember/routing/route'; import { service } from '@ember/service'; import { TrackedArray } from 'tracked-built-ins'; +import config from 'desktop/config/environment'; export default class ScopesRoute extends Route { // =services @@ -62,12 +63,16 @@ export default class ScopesRoute extends Route { let downloadError = false; if (!this.isPaginationSupported) { - const metaDataUrl = - 'https://api.releases.hashicorp.com/v1/releases/boundary-desktop/1.7.1'; + // Threshold has no default release metadata API (the upstream + // HashiCorp releases API is intentionally not contacted). When + // `config.releases.metadataUrl` is empty we skip the request and direct + // the user to the releases page instead. + const metaDataUrl = config.releases?.metadataUrl; const { isWindows, isMac, isLinux } = await window.desktop.system.checkOS(); try { + if (!metaDataUrl) throw new Error('No release metadata URL'); const metaDataResponse = await fetch(metaDataUrl); const metaData = await metaDataResponse.json(); @@ -87,6 +92,7 @@ export default class ScopesRoute extends Route { } } + controller.set('releasesPageUrl', config.releases?.releasesPageUrl); controller.set('downloadLink', downloadLink); controller.set('downloadError', downloadError); } diff --git a/ui/desktop/app/templates/application.hbs b/ui/desktop/app/templates/application.hbs index ad5daf4c7..d58dbf52c 100644 --- a/ui/desktop/app/templates/application.hbs +++ b/ui/desktop/app/templates/application.hbs @@ -15,8 +15,8 @@ > <:logo>