mirror of
https://github.com/coder/coder.git
synced 2025-07-08 11:39:50 +00:00
Merge remote-tracking branch 'origin/main' into jjs/presets
This commit is contained in:
1
.github/.linkspector.yml
vendored
1
.github/.linkspector.yml
vendored
@ -20,5 +20,6 @@ ignorePatterns:
|
|||||||
- pattern: "www.emacswiki.org"
|
- pattern: "www.emacswiki.org"
|
||||||
- pattern: "linux.die.net/man"
|
- pattern: "linux.die.net/man"
|
||||||
- pattern: "www.gnu.org"
|
- pattern: "www.gnu.org"
|
||||||
|
- pattern: "wiki.ubuntu.com"
|
||||||
aliveStatusCodes:
|
aliveStatusCodes:
|
||||||
- 200
|
- 200
|
||||||
|
15
.github/dependabot.yaml
vendored
15
.github/dependabot.yaml
vendored
@ -9,21 +9,6 @@ updates:
|
|||||||
labels: []
|
labels: []
|
||||||
commit-message:
|
commit-message:
|
||||||
prefix: "ci"
|
prefix: "ci"
|
||||||
ignore:
|
|
||||||
# These actions deliver the latest versions by updating the major
|
|
||||||
# release tag, so ignore minor and patch versions
|
|
||||||
- dependency-name: "actions/*"
|
|
||||||
update-types:
|
|
||||||
- version-update:semver-minor
|
|
||||||
- version-update:semver-patch
|
|
||||||
- dependency-name: "Apple-Actions/import-codesign-certs"
|
|
||||||
update-types:
|
|
||||||
- version-update:semver-minor
|
|
||||||
- version-update:semver-patch
|
|
||||||
- dependency-name: "marocchino/sticky-pull-request-comment"
|
|
||||||
update-types:
|
|
||||||
- version-update:semver-minor
|
|
||||||
- version-update:semver-patch
|
|
||||||
groups:
|
groups:
|
||||||
github-actions:
|
github-actions:
|
||||||
patterns:
|
patterns:
|
||||||
|
61
.github/workflows/ci.yaml
vendored
61
.github/workflows/ci.yaml
vendored
@ -39,7 +39,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
# For pull requests it's not necessary to checkout the code
|
# For pull requests it's not necessary to checkout the code
|
||||||
@ -122,7 +122,7 @@ jobs:
|
|||||||
# runs-on: ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-8' || 'ubuntu-latest' }}
|
# runs-on: ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-8' || 'ubuntu-latest' }}
|
||||||
# steps:
|
# steps:
|
||||||
# - name: Checkout
|
# - name: Checkout
|
||||||
# uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
# uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
# with:
|
# with:
|
||||||
# fetch-depth: 1
|
# fetch-depth: 1
|
||||||
# # See: https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#commits-made-by-this-action-do-not-trigger-new-workflow-runs
|
# # See: https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#commits-made-by-this-action-do-not-trigger-new-workflow-runs
|
||||||
@ -160,7 +160,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -232,7 +232,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -396,7 +396,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -452,7 +452,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -509,7 +509,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -546,7 +546,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -584,7 +584,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -632,7 +632,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -658,7 +658,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -690,7 +690,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
@ -733,7 +733,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Playwright Failed Tests
|
- name: Upload Playwright Failed Tests
|
||||||
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork
|
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: failed-test-videos${{ matrix.variant.premium && '-premium' || '' }}
|
name: failed-test-videos${{ matrix.variant.premium && '-premium' || '' }}
|
||||||
path: ./site/test-results/**/*.webm
|
path: ./site/test-results/**/*.webm
|
||||||
@ -741,7 +741,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload pprof dumps
|
- name: Upload pprof dumps
|
||||||
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork
|
if: always() && github.actor != 'dependabot[bot]' && runner.os == 'Linux' && !github.event.pull_request.head.repo.fork
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: debug-pprof-dumps${{ matrix.variant.premium && '-premium' || '' }}
|
name: debug-pprof-dumps${{ matrix.variant.premium && '-premium' || '' }}
|
||||||
path: ./site/test-results/**/debug-pprof-*.txt
|
path: ./site/test-results/**/debug-pprof-*.txt
|
||||||
@ -759,7 +759,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
# Required by Chromatic for build-over-build history, otherwise we
|
# Required by Chromatic for build-over-build history, otherwise we
|
||||||
# only get 1 commit on shallow checkout.
|
# only get 1 commit on shallow checkout.
|
||||||
@ -836,7 +836,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
# 0 is required here for version.sh to work.
|
# 0 is required here for version.sh to work.
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@ -940,13 +940,9 @@ jobs:
|
|||||||
if: needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
|
if: needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
|
||||||
runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
|
runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
# Harden Runner doesn't work on macOS
|
||||||
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
|
|
||||||
with:
|
|
||||||
egress-policy: audit
|
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -957,6 +953,11 @@ jobs:
|
|||||||
echo "$(brew --prefix gnu-getopt)/bin" >> $GITHUB_PATH
|
echo "$(brew --prefix gnu-getopt)/bin" >> $GITHUB_PATH
|
||||||
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Switch XCode Version
|
||||||
|
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||||
|
with:
|
||||||
|
xcode-version: "16.0.0"
|
||||||
|
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: ./.github/actions/setup-go
|
uses: ./.github/actions/setup-go
|
||||||
|
|
||||||
@ -999,7 +1000,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
if: ${{ github.repository_owner == 'coder' && github.ref == 'refs/heads/main' }}
|
if: ${{ github.repository_owner == 'coder' && github.ref == 'refs/heads/main' }}
|
||||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: dylibs
|
name: dylibs
|
||||||
path: |
|
path: |
|
||||||
@ -1032,7 +1033,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -1139,7 +1140,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
if: github.ref == 'refs/heads/main'
|
if: github.ref == 'refs/heads/main'
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: coder
|
name: coder
|
||||||
path: |
|
path: |
|
||||||
@ -1168,7 +1169,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -1230,7 +1231,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -1265,7 +1266,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
# We need golang to run the migration main.go
|
# We need golang to run the migration main.go
|
||||||
|
2
.github/workflows/docker-base.yaml
vendored
2
.github/workflows/docker-base.yaml
vendored
@ -43,7 +43,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Docker login
|
- name: Docker login
|
||||||
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
|
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
|
||||||
|
4
.github/workflows/docs-ci.yaml
vendored
4
.github/workflows/docs-ci.yaml
vendored
@ -20,12 +20,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: ./.github/actions/setup-node
|
uses: ./.github/actions/setup-node
|
||||||
|
|
||||||
- uses: tj-actions/changed-files@d6e91a2266cdb9d62096cebf1e8546899c6aa18f # v45.0.6
|
- uses: tj-actions/changed-files@dcc7a0cba800f454d79fff4b993e8c3555bcc0a8 # v45.0.7
|
||||||
id: changed-files
|
id: changed-files
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
|
4
.github/workflows/dogfood.yaml
vendored
4
.github/workflows/dogfood.yaml
vendored
@ -32,7 +32,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Setup Nix
|
- name: Setup Nix
|
||||||
uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
|
uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
|
||||||
@ -100,7 +100,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Setup Terraform
|
- name: Setup Terraform
|
||||||
uses: ./.github/actions/setup-tf
|
uses: ./.github/actions/setup-tf
|
||||||
|
2
.github/workflows/nightly-gauntlet.yaml
vendored
2
.github/workflows/nightly-gauntlet.yaml
vendored
@ -31,7 +31,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
|
8
.github/workflows/pr-deploy.yaml
vendored
8
.github/workflows/pr-deploy.yaml
vendored
@ -44,7 +44,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Check if PR is open
|
- name: Check if PR is open
|
||||||
id: check_pr
|
id: check_pr
|
||||||
@ -79,7 +79,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ jobs:
|
|||||||
kubectl create namespace "pr${{ env.PR_NUMBER }}"
|
kubectl create namespace "pr${{ env.PR_NUMBER }}"
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Check and Create Certificate
|
- name: Check and Create Certificate
|
||||||
if: needs.get_info.outputs.NEW == 'true' || github.event.inputs.deploy == 'true'
|
if: needs.get_info.outputs.NEW == 'true' || github.event.inputs.deploy == 'true'
|
||||||
|
25
.github/workflows/release.yaml
vendored
25
.github/workflows/release.yaml
vendored
@ -36,13 +36,9 @@ jobs:
|
|||||||
build-dylib:
|
build-dylib:
|
||||||
runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
|
runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
# Harden Runner doesn't work on macOS.
|
||||||
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
|
|
||||||
with:
|
|
||||||
egress-policy: audit
|
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -61,6 +57,11 @@ jobs:
|
|||||||
echo "$(brew --prefix gnu-getopt)/bin" >> $GITHUB_PATH
|
echo "$(brew --prefix gnu-getopt)/bin" >> $GITHUB_PATH
|
||||||
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
echo "$(brew --prefix make)/libexec/gnubin" >> $GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Switch XCode Version
|
||||||
|
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
|
||||||
|
with:
|
||||||
|
xcode-version: "16.0.0"
|
||||||
|
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: ./.github/actions/setup-go
|
uses: ./.github/actions/setup-go
|
||||||
|
|
||||||
@ -100,7 +101,7 @@ jobs:
|
|||||||
AC_CERTIFICATE_PASSWORD_FILE: /tmp/apple_cert_password.txt
|
AC_CERTIFICATE_PASSWORD_FILE: /tmp/apple_cert_password.txt
|
||||||
|
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: dylibs
|
name: dylibs
|
||||||
path: |
|
path: |
|
||||||
@ -134,7 +135,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -217,7 +218,7 @@ jobs:
|
|||||||
|
|
||||||
# Necessary for signing Windows binaries.
|
# Necessary for signing Windows binaries.
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0
|
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: "zulu"
|
||||||
java-version: "11.0"
|
java-version: "11.0"
|
||||||
@ -484,7 +485,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload artifacts to actions (if dry-run)
|
- name: Upload artifacts to actions (if dry-run)
|
||||||
if: ${{ inputs.dry_run }}
|
if: ${{ inputs.dry_run }}
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: release-artifacts
|
name: release-artifacts
|
||||||
path: |
|
path: |
|
||||||
@ -602,7 +603,7 @@ jobs:
|
|||||||
GH_TOKEN: ${{ secrets.CDRCI_GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.CDRCI_GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -687,7 +688,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
|
4
.github/workflows/scorecard.yml
vendored
4
.github/workflows/scorecard.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ jobs:
|
|||||||
|
|
||||||
# Upload the results as artifacts.
|
# Upload the results as artifacts.
|
||||||
- name: "Upload artifact"
|
- name: "Upload artifact"
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: SARIF file
|
name: SARIF file
|
||||||
path: results.sarif
|
path: results.sarif
|
||||||
|
6
.github/workflows/security.yaml
vendored
6
.github/workflows/security.yaml
vendored
@ -32,7 +32,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Setup Go
|
- name: Setup Go
|
||||||
uses: ./.github/actions/setup-go
|
uses: ./.github/actions/setup-go
|
||||||
@ -72,7 +72,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ jobs:
|
|||||||
category: "Trivy"
|
category: "Trivy"
|
||||||
|
|
||||||
- name: Upload Trivy scan results as an artifact
|
- name: Upload Trivy scan results as an artifact
|
||||||
uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
|
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
|
||||||
with:
|
with:
|
||||||
name: trivy
|
name: trivy
|
||||||
path: trivy-results.sarif
|
path: trivy-results.sarif
|
||||||
|
4
.github/workflows/stale.yaml
vendored
4
.github/workflows/stale.yaml
vendored
@ -23,7 +23,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: stale
|
- name: stale
|
||||||
uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0
|
uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
|
||||||
with:
|
with:
|
||||||
stale-issue-label: "stale"
|
stale-issue-label: "stale"
|
||||||
stale-pr-label: "stale"
|
stale-pr-label: "stale"
|
||||||
@ -101,7 +101,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: Run delete-old-branches-action
|
- name: Run delete-old-branches-action
|
||||||
uses: beatlabs/delete-old-branches-action@6e94df089372a619c01ae2c2f666bf474f890911 # v0.0.10
|
uses: beatlabs/delete-old-branches-action@6e94df089372a619c01ae2c2f666bf474f890911 # v0.0.10
|
||||||
with:
|
with:
|
||||||
|
2
.github/workflows/weekly-docs.yaml
vendored
2
.github/workflows/weekly-docs.yaml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|
||||||
- name: Check Markdown links
|
- name: Check Markdown links
|
||||||
uses: umbrelladocs/action-linkspector@de84085e0f51452a470558693d7d308fbb2fa261 # v1.2.5
|
uses: umbrelladocs/action-linkspector@de84085e0f51452a470558693d7d308fbb2fa261 # v1.2.5
|
||||||
|
@ -159,7 +159,7 @@ func (r *RootCmd) ping() *serpent.Command {
|
|||||||
LocalNetInfo: ni,
|
LocalNetInfo: ni,
|
||||||
Verbose: r.verbose,
|
Verbose: r.verbose,
|
||||||
PingP2P: didP2p,
|
PingP2P: didP2p,
|
||||||
TroubleshootingURL: appearanceConfig.DocsURL + "/networking/troubleshooting",
|
TroubleshootingURL: appearanceConfig.DocsURL + "/admin/networking/troubleshooting",
|
||||||
}
|
}
|
||||||
|
|
||||||
awsRanges, err := cliutil.FetchAWSIPRanges(diagCtx, cliutil.AWSIPRangesURL)
|
awsRanges, err := cliutil.FetchAWSIPRanges(diagCtx, cliutil.AWSIPRangesURL)
|
||||||
|
@ -11,7 +11,7 @@ OPTIONS:
|
|||||||
-O, --org string, $CODER_ORGANIZATION
|
-O, --org string, $CODER_ORGANIZATION
|
||||||
Select which organization (uuid or name) to use.
|
Select which organization (uuid or name) to use.
|
||||||
|
|
||||||
-c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|organization|queue] (default: created at,id,organization,status,type,queue,tags)
|
-c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|template version name|template id|template name|template display name|workspace id|workspace name|organization|queue] (default: created at,id,organization,status,type,queue,tags)
|
||||||
Columns to display in table output.
|
Columns to display in table output.
|
||||||
|
|
||||||
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
|
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
|
||||||
|
@ -18,6 +18,12 @@
|
|||||||
"template_version_id": "============[version ID]============"
|
"template_version_id": "============[version ID]============"
|
||||||
},
|
},
|
||||||
"type": "template_version_import",
|
"type": "template_version_import",
|
||||||
|
"metadata": {
|
||||||
|
"template_version_name": "===========[version name]===========",
|
||||||
|
"template_id": "===========[template ID]============",
|
||||||
|
"template_name": "test-template",
|
||||||
|
"template_display_name": ""
|
||||||
|
},
|
||||||
"organization_name": "Coder"
|
"organization_name": "Coder"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -39,6 +45,14 @@
|
|||||||
"workspace_build_id": "========[workspace build ID]========"
|
"workspace_build_id": "========[workspace build ID]========"
|
||||||
},
|
},
|
||||||
"type": "workspace_build",
|
"type": "workspace_build",
|
||||||
|
"metadata": {
|
||||||
|
"template_version_name": "===========[version name]===========",
|
||||||
|
"template_id": "===========[template ID]============",
|
||||||
|
"template_name": "test-template",
|
||||||
|
"template_display_name": "",
|
||||||
|
"workspace_id": "===========[workspace ID]===========",
|
||||||
|
"workspace_name": "test-workspace"
|
||||||
|
},
|
||||||
"organization_name": "Coder"
|
"organization_name": "Coder"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
28
coderd/apidoc/docs.go
generated
28
coderd/apidoc/docs.go
generated
@ -13226,6 +13226,9 @@ const docTemplate = `{
|
|||||||
"input": {
|
"input": {
|
||||||
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
|
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
|
||||||
|
},
|
||||||
"organization_id": {
|
"organization_id": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uuid"
|
"format": "uuid"
|
||||||
@ -13321,6 +13324,31 @@ const docTemplate = `{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"codersdk.ProvisionerJobMetadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"template_display_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"template_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"template_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"template_version_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"workspace_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"workspace_name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"codersdk.ProvisionerJobStatus": {
|
"codersdk.ProvisionerJobStatus": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
28
coderd/apidoc/swagger.json
generated
28
coderd/apidoc/swagger.json
generated
@ -11945,6 +11945,9 @@
|
|||||||
"input": {
|
"input": {
|
||||||
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
|
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
|
||||||
|
},
|
||||||
"organization_id": {
|
"organization_id": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uuid"
|
"format": "uuid"
|
||||||
@ -12034,6 +12037,31 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"codersdk.ProvisionerJobMetadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"template_display_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"template_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"template_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"template_version_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"workspace_id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid"
|
||||||
|
},
|
||||||
|
"workspace_name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"codersdk.ProvisionerJobStatus": {
|
"codersdk.ProvisionerJobStatus": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
|
@ -4176,6 +4176,45 @@ func (q *FakeQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePosition
|
|||||||
QueuePosition: rowQP.QueuePosition,
|
QueuePosition: rowQP.QueuePosition,
|
||||||
QueueSize: rowQP.QueueSize,
|
QueueSize: rowQP.QueueSize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start add metadata.
|
||||||
|
var input codersdk.ProvisionerJobInput
|
||||||
|
err := json.Unmarshal([]byte(job.Input), &input)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
templateVersionID := input.TemplateVersionID
|
||||||
|
if input.WorkspaceBuildID != nil {
|
||||||
|
workspaceBuild, err := q.getWorkspaceBuildByIDNoLock(ctx, *input.WorkspaceBuildID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
workspace, err := q.getWorkspaceByIDNoLock(ctx, workspaceBuild.WorkspaceID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
row.WorkspaceID = uuid.NullUUID{UUID: workspace.ID, Valid: true}
|
||||||
|
row.WorkspaceName = workspace.Name
|
||||||
|
if templateVersionID == nil {
|
||||||
|
templateVersionID = &workspaceBuild.TemplateVersionID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if templateVersionID != nil {
|
||||||
|
templateVersion, err := q.getTemplateVersionByIDNoLock(ctx, *templateVersionID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
row.TemplateVersionName = templateVersion.Name
|
||||||
|
template, err := q.getTemplateByIDNoLock(ctx, templateVersion.TemplateID.UUID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
row.TemplateID = uuid.NullUUID{UUID: template.ID, Valid: true}
|
||||||
|
row.TemplateName = template.Name
|
||||||
|
row.TemplateDisplayName = template.DisplayName
|
||||||
|
}
|
||||||
|
// End add metadata.
|
||||||
|
|
||||||
if row.QueuePosition > 0 {
|
if row.QueuePosition > 0 {
|
||||||
var availableWorkers []database.ProvisionerDaemon
|
var availableWorkers []database.ProvisionerDaemon
|
||||||
for _, daemon := range q.provisionerDaemons {
|
for _, daemon := range q.provisionerDaemons {
|
||||||
|
@ -6431,13 +6431,29 @@ SELECT
|
|||||||
AND pj.organization_id = pd.organization_id
|
AND pj.organization_id = pd.organization_id
|
||||||
AND pj.provisioner = ANY(pd.provisioners)
|
AND pj.provisioner = ANY(pd.provisioners)
|
||||||
AND provisioner_tagset_contains(pd.tags, pj.tags)
|
AND provisioner_tagset_contains(pd.tags, pj.tags)
|
||||||
) AS available_workers
|
) AS available_workers,
|
||||||
|
-- Include template and workspace information.
|
||||||
|
COALESCE(tv.name, '') AS template_version_name,
|
||||||
|
t.id AS template_id,
|
||||||
|
COALESCE(t.name, '') AS template_name,
|
||||||
|
COALESCE(t.display_name, '') AS template_display_name,
|
||||||
|
w.id AS workspace_id,
|
||||||
|
COALESCE(w.name, '') AS workspace_name
|
||||||
FROM
|
FROM
|
||||||
provisioner_jobs pj
|
provisioner_jobs pj
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
queue_position qp ON qp.id = pj.id
|
queue_position qp ON qp.id = pj.id
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
queue_size qs ON TRUE
|
queue_size qs ON TRUE
|
||||||
|
LEFT JOIN
|
||||||
|
workspace_builds wb ON wb.id = CASE WHEN pj.input ? 'workspace_build_id' THEN (pj.input->>'workspace_build_id')::uuid END
|
||||||
|
LEFT JOIN
|
||||||
|
workspaces w ON wb.workspace_id = w.id
|
||||||
|
LEFT JOIN
|
||||||
|
-- We should always have a template version, either explicitly or implicitly via workspace build.
|
||||||
|
template_versions tv ON tv.id = CASE WHEN pj.input ? 'template_version_id' THEN (pj.input->>'template_version_id')::uuid ELSE wb.template_version_id END
|
||||||
|
LEFT JOIN
|
||||||
|
templates t ON tv.template_id = t.id
|
||||||
WHERE
|
WHERE
|
||||||
($1::uuid IS NULL OR pj.organization_id = $1)
|
($1::uuid IS NULL OR pj.organization_id = $1)
|
||||||
AND (COALESCE(array_length($2::uuid[], 1), 0) = 0 OR pj.id = ANY($2::uuid[]))
|
AND (COALESCE(array_length($2::uuid[], 1), 0) = 0 OR pj.id = ANY($2::uuid[]))
|
||||||
@ -6445,7 +6461,13 @@ WHERE
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
pj.id,
|
pj.id,
|
||||||
qp.queue_position,
|
qp.queue_position,
|
||||||
qs.count
|
qs.count,
|
||||||
|
tv.name,
|
||||||
|
t.id,
|
||||||
|
t.name,
|
||||||
|
t.display_name,
|
||||||
|
w.id,
|
||||||
|
w.name
|
||||||
ORDER BY
|
ORDER BY
|
||||||
pj.created_at DESC
|
pj.created_at DESC
|
||||||
LIMIT
|
LIMIT
|
||||||
@ -6464,6 +6486,12 @@ type GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow
|
|||||||
QueuePosition int64 `db:"queue_position" json:"queue_position"`
|
QueuePosition int64 `db:"queue_position" json:"queue_position"`
|
||||||
QueueSize int64 `db:"queue_size" json:"queue_size"`
|
QueueSize int64 `db:"queue_size" json:"queue_size"`
|
||||||
AvailableWorkers []uuid.UUID `db:"available_workers" json:"available_workers"`
|
AvailableWorkers []uuid.UUID `db:"available_workers" json:"available_workers"`
|
||||||
|
TemplateVersionName string `db:"template_version_name" json:"template_version_name"`
|
||||||
|
TemplateID uuid.NullUUID `db:"template_id" json:"template_id"`
|
||||||
|
TemplateName string `db:"template_name" json:"template_name"`
|
||||||
|
TemplateDisplayName string `db:"template_display_name" json:"template_display_name"`
|
||||||
|
WorkspaceID uuid.NullUUID `db:"workspace_id" json:"workspace_id"`
|
||||||
|
WorkspaceName string `db:"workspace_name" json:"workspace_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(ctx context.Context, arg GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams) ([]GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow, error) {
|
func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner(ctx context.Context, arg GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerParams) ([]GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow, error) {
|
||||||
@ -6503,6 +6531,12 @@ func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionA
|
|||||||
&i.QueuePosition,
|
&i.QueuePosition,
|
||||||
&i.QueueSize,
|
&i.QueueSize,
|
||||||
pq.Array(&i.AvailableWorkers),
|
pq.Array(&i.AvailableWorkers),
|
||||||
|
&i.TemplateVersionName,
|
||||||
|
&i.TemplateID,
|
||||||
|
&i.TemplateName,
|
||||||
|
&i.TemplateDisplayName,
|
||||||
|
&i.WorkspaceID,
|
||||||
|
&i.WorkspaceName,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -130,13 +130,29 @@ SELECT
|
|||||||
AND pj.organization_id = pd.organization_id
|
AND pj.organization_id = pd.organization_id
|
||||||
AND pj.provisioner = ANY(pd.provisioners)
|
AND pj.provisioner = ANY(pd.provisioners)
|
||||||
AND provisioner_tagset_contains(pd.tags, pj.tags)
|
AND provisioner_tagset_contains(pd.tags, pj.tags)
|
||||||
) AS available_workers
|
) AS available_workers,
|
||||||
|
-- Include template and workspace information.
|
||||||
|
COALESCE(tv.name, '') AS template_version_name,
|
||||||
|
t.id AS template_id,
|
||||||
|
COALESCE(t.name, '') AS template_name,
|
||||||
|
COALESCE(t.display_name, '') AS template_display_name,
|
||||||
|
w.id AS workspace_id,
|
||||||
|
COALESCE(w.name, '') AS workspace_name
|
||||||
FROM
|
FROM
|
||||||
provisioner_jobs pj
|
provisioner_jobs pj
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
queue_position qp ON qp.id = pj.id
|
queue_position qp ON qp.id = pj.id
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
queue_size qs ON TRUE
|
queue_size qs ON TRUE
|
||||||
|
LEFT JOIN
|
||||||
|
workspace_builds wb ON wb.id = CASE WHEN pj.input ? 'workspace_build_id' THEN (pj.input->>'workspace_build_id')::uuid END
|
||||||
|
LEFT JOIN
|
||||||
|
workspaces w ON wb.workspace_id = w.id
|
||||||
|
LEFT JOIN
|
||||||
|
-- We should always have a template version, either explicitly or implicitly via workspace build.
|
||||||
|
template_versions tv ON tv.id = CASE WHEN pj.input ? 'template_version_id' THEN (pj.input->>'template_version_id')::uuid ELSE wb.template_version_id END
|
||||||
|
LEFT JOIN
|
||||||
|
templates t ON tv.template_id = t.id
|
||||||
WHERE
|
WHERE
|
||||||
(sqlc.narg('organization_id')::uuid IS NULL OR pj.organization_id = @organization_id)
|
(sqlc.narg('organization_id')::uuid IS NULL OR pj.organization_id = @organization_id)
|
||||||
AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pj.id = ANY(@ids::uuid[]))
|
AND (COALESCE(array_length(@ids::uuid[], 1), 0) = 0 OR pj.id = ANY(@ids::uuid[]))
|
||||||
@ -144,7 +160,13 @@ WHERE
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
pj.id,
|
pj.id,
|
||||||
qp.queue_position,
|
qp.queue_position,
|
||||||
qs.count
|
qs.count,
|
||||||
|
tv.name,
|
||||||
|
t.id,
|
||||||
|
t.name,
|
||||||
|
t.display_name,
|
||||||
|
w.id,
|
||||||
|
w.name
|
||||||
ORDER BY
|
ORDER BY
|
||||||
pj.created_at DESC
|
pj.created_at DESC
|
||||||
LIMIT
|
LIMIT
|
||||||
|
@ -101,7 +101,7 @@ func (api *API) handleAuthAndFetchProvisionerJobs(rw http.ResponseWriter, r *htt
|
|||||||
|
|
||||||
qp := r.URL.Query()
|
qp := r.URL.Query()
|
||||||
p := httpapi.NewQueryParamParser()
|
p := httpapi.NewQueryParamParser()
|
||||||
limit := p.PositiveInt32(qp, 0, "limit")
|
limit := p.PositiveInt32(qp, 50, "limit")
|
||||||
status := p.Strings(qp, nil, "status")
|
status := p.Strings(qp, nil, "status")
|
||||||
p.ErrorExcessParams(qp)
|
p.ErrorExcessParams(qp)
|
||||||
if len(p.Errors) > 0 {
|
if len(p.Errors) > 0 {
|
||||||
@ -388,6 +388,16 @@ func convertProvisionerJobWithQueuePosition(pj database.GetProvisionerJobsByOrga
|
|||||||
QueueSize: pj.QueueSize,
|
QueueSize: pj.QueueSize,
|
||||||
})
|
})
|
||||||
job.AvailableWorkers = pj.AvailableWorkers
|
job.AvailableWorkers = pj.AvailableWorkers
|
||||||
|
job.Metadata = &codersdk.ProvisionerJobMetadata{
|
||||||
|
TemplateVersionName: pj.TemplateVersionName,
|
||||||
|
TemplateID: pj.TemplateID.UUID,
|
||||||
|
TemplateName: pj.TemplateName,
|
||||||
|
TemplateDisplayName: pj.TemplateDisplayName,
|
||||||
|
WorkspaceName: pj.WorkspaceName,
|
||||||
|
}
|
||||||
|
if pj.WorkspaceID.Valid {
|
||||||
|
job.Metadata.WorkspaceID = &pj.WorkspaceID.UUID
|
||||||
|
}
|
||||||
return job
|
return job
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/coder/coder/v2/coderd/coderdtest"
|
"github.com/coder/coder/v2/coderd/coderdtest"
|
||||||
@ -63,7 +64,16 @@ func TestProvisionerJobs(t *testing.T) {
|
|||||||
TemplateVersionID: version.ID,
|
TemplateVersionID: version.ID,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Add more jobs than the default limit.
|
||||||
|
for range 60 {
|
||||||
|
dbgen.ProvisionerJob(t, db, nil, database.ProvisionerJob{
|
||||||
|
OrganizationID: owner.OrganizationID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
t.Run("Single", func(t *testing.T) {
|
t.Run("Single", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
t.Run("Workspace", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
t.Run("OK", func(t *testing.T) {
|
t.Run("OK", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -72,6 +82,36 @@ func TestProvisionerJobs(t *testing.T) {
|
|||||||
job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, job.ID)
|
job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, job.ID)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, job.ID, job2.ID)
|
require.Equal(t, job.ID, job2.ID)
|
||||||
|
|
||||||
|
// Verify that job metadata is correct.
|
||||||
|
assert.Equal(t, job2.Metadata, &codersdk.ProvisionerJobMetadata{
|
||||||
|
TemplateVersionName: version.Name,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
TemplateName: template.Name,
|
||||||
|
TemplateDisplayName: template.DisplayName,
|
||||||
|
WorkspaceID: &w.ID,
|
||||||
|
WorkspaceName: w.Name,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
t.Run("Template Import", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
t.Run("OK", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||||
|
// Note this calls the single job endpoint.
|
||||||
|
job2, err := templateAdminClient.OrganizationProvisionerJob(ctx, owner.OrganizationID, version.Job.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, version.Job.ID, job2.ID)
|
||||||
|
|
||||||
|
// Verify that job metadata is correct.
|
||||||
|
assert.Equal(t, job2.Metadata, &codersdk.ProvisionerJobMetadata{
|
||||||
|
TemplateVersionName: version.Name,
|
||||||
|
TemplateID: template.ID,
|
||||||
|
TemplateName: template.Name,
|
||||||
|
TemplateDisplayName: template.DisplayName,
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
t.Run("Missing", func(t *testing.T) {
|
t.Run("Missing", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
@ -82,12 +122,12 @@ func TestProvisionerJobs(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("All", func(t *testing.T) {
|
t.Run("Default limit", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
ctx := testutil.Context(t, testutil.WaitMedium)
|
ctx := testutil.Context(t, testutil.WaitMedium)
|
||||||
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
|
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, jobs, 3)
|
require.Len(t, jobs, 50)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Status", func(t *testing.T) {
|
t.Run("Status", func(t *testing.T) {
|
||||||
|
@ -131,6 +131,16 @@ type ProvisionerJobInput struct {
|
|||||||
Error string `json:"error,omitempty" table:"-"`
|
Error string `json:"error,omitempty" table:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProvisionerJobMetadata contains metadata for the job.
|
||||||
|
type ProvisionerJobMetadata struct {
|
||||||
|
TemplateVersionName string `json:"template_version_name" table:"template version name"`
|
||||||
|
TemplateID uuid.UUID `json:"template_id" format:"uuid" table:"template id"`
|
||||||
|
TemplateName string `json:"template_name" table:"template name"`
|
||||||
|
TemplateDisplayName string `json:"template_display_name" table:"template display name"`
|
||||||
|
WorkspaceID *uuid.UUID `json:"workspace_id,omitempty" format:"uuid" table:"workspace id"`
|
||||||
|
WorkspaceName string `json:"workspace_name,omitempty" table:"workspace name"`
|
||||||
|
}
|
||||||
|
|
||||||
// ProvisionerJobType represents the type of job.
|
// ProvisionerJobType represents the type of job.
|
||||||
type ProvisionerJobType string
|
type ProvisionerJobType string
|
||||||
|
|
||||||
@ -172,6 +182,7 @@ type ProvisionerJob struct {
|
|||||||
Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
|
Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
|
||||||
Type ProvisionerJobType `json:"type" table:"type"`
|
Type ProvisionerJobType `json:"type" table:"type"`
|
||||||
AvailableWorkers []uuid.UUID `json:"available_workers,omitempty" format:"uuid" table:"available workers"`
|
AvailableWorkers []uuid.UUID `json:"available_workers,omitempty" format:"uuid" table:"available workers"`
|
||||||
|
Metadata *ProvisionerJobMetadata `json:"metadata,omitempty" table:"metadata,recursive_inline"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProvisionerJobLog represents the provisioner log entry annotated with source and level.
|
// ProvisionerJobLog represents the provisioner log entry annotated with source and level.
|
||||||
|
@ -119,12 +119,6 @@ their organization. Users can be in multiple organizations.
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Beta
|
|
||||||
|
|
||||||
Organizations is in beta. If you encounter any issues, please
|
|
||||||
[file an issue](https://github.com/coder/internal/issues/new?title=request%28orgs%29%3A+request+title+here&labels=["customer-feedback"]&body=please+enter+your+issue+or+request+here)
|
|
||||||
or contact your account team.
|
|
||||||
|
|
||||||
## Next steps
|
## Next steps
|
||||||
|
|
||||||
- [Organizations - best practices](../../tutorials/best-practices/organizations.md)
|
- [Organizations - best practices](../../tutorials/best-practices/organizations.md)
|
||||||
|
@ -104,8 +104,8 @@ coder:
|
|||||||
|
|
||||||
# (Optional) For production deployments the access URL should be set.
|
# (Optional) For production deployments the access URL should be set.
|
||||||
# If you're just trying Coder, access the dashboard via the service IP.
|
# If you're just trying Coder, access the dashboard via the service IP.
|
||||||
- name: CODER_ACCESS_URL
|
# - name: CODER_ACCESS_URL
|
||||||
value: "https://coder.example.com"
|
# value: "https://coder.example.com"
|
||||||
|
|
||||||
#tls:
|
#tls:
|
||||||
# secretNames:
|
# secretNames:
|
||||||
|
@ -5,8 +5,6 @@ welcome!
|
|||||||
|
|
||||||
| Platform Name | Status | Documentation |
|
| Platform Name | Status | Documentation |
|
||||||
|-----------------------------------------------------------------------------------|------------|----------------------------------------------------------------------------------------------|
|
|-----------------------------------------------------------------------------------|------------|----------------------------------------------------------------------------------------------|
|
||||||
| AWS EC2 | Official | [Guide: AWS](../cloud/ec2.md) |
|
|
||||||
| Google Compute Engine | Official | [Guide: Google Compute Engine](../cloud/compute-engine.md) |
|
|
||||||
| Azure AKS | Unofficial | [GitHub: coder-aks](https://github.com/ericpaulsen/coder-aks) |
|
| Azure AKS | Unofficial | [GitHub: coder-aks](https://github.com/ericpaulsen/coder-aks) |
|
||||||
| Terraform (GKE, AKS, LKE, DOKS, IBMCloud K8s, OVHCloud K8s, Scaleway K8s Kapsule) | Unofficial | [GitHub: coder-oss-terraform](https://github.com/ElliotG/coder-oss-tf) |
|
| Terraform (GKE, AKS, LKE, DOKS, IBMCloud K8s, OVHCloud K8s, Scaleway K8s Kapsule) | Unofficial | [GitHub: coder-oss-terraform](https://github.com/ElliotG/coder-oss-tf) |
|
||||||
| Fly.io | Unofficial | [Blog: Run Coder on Fly.io](https://coder.com/blog/remote-developer-environments-on-fly-io) |
|
| Fly.io | Unofficial | [Blog: Run Coder on Fly.io](https://coder.com/blog/remote-developer-environments-on-fly-io) |
|
||||||
|
@ -291,7 +291,7 @@
|
|||||||
{
|
{
|
||||||
"title": "Organizations",
|
"title": "Organizations",
|
||||||
"path": "./admin/users/organizations.md",
|
"path": "./admin/users/organizations.md",
|
||||||
"state": ["premium", "beta"]
|
"state": ["premium"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Quotas",
|
"title": "Quotas",
|
||||||
|
47
docs/reference/api/builds.md
generated
47
docs/reference/api/builds.md
generated
@ -50,6 +50,14 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -255,6 +263,14 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild} \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -902,6 +918,14 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/sta
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1180,6 +1204,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1363,6 +1395,13 @@ Status Code **200**
|
|||||||
| `»»» error` | string | false | | |
|
| `»»» error` | string | false | | |
|
||||||
| `»»» template_version_id` | string(uuid) | false | | |
|
| `»»» template_version_id` | string(uuid) | false | | |
|
||||||
| `»»» workspace_build_id` | string(uuid) | false | | |
|
| `»»» workspace_build_id` | string(uuid) | false | | |
|
||||||
|
| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
|
||||||
|
| `»»» template_display_name` | string | false | | |
|
||||||
|
| `»»» template_id` | string(uuid) | false | | |
|
||||||
|
| `»»» template_name` | string | false | | |
|
||||||
|
| `»»» template_version_name` | string | false | | |
|
||||||
|
| `»»» workspace_id` | string(uuid) | false | | |
|
||||||
|
| `»»» workspace_name` | string | false | | |
|
||||||
| `»» organization_id` | string(uuid) | false | | |
|
| `»» organization_id` | string(uuid) | false | | |
|
||||||
| `»» queue_position` | integer | false | | |
|
| `»» queue_position` | integer | false | | |
|
||||||
| `»» queue_size` | integer | false | | |
|
| `»» queue_size` | integer | false | | |
|
||||||
@ -1605,6 +1644,14 @@ curl -X POST http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
|
25
docs/reference/api/organizations.md
generated
25
docs/reference/api/organizations.md
generated
@ -405,6 +405,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -431,7 +439,7 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
|
|||||||
Status Code **200**
|
Status Code **200**
|
||||||
|
|
||||||
| Name | Type | Required | Restrictions | Description |
|
| Name | Type | Required | Restrictions | Description |
|
||||||
|--------------------------|--------------------------------------------------------------------------|----------|--------------|-------------|
|
|----------------------------|------------------------------------------------------------------------------|----------|--------------|-------------|
|
||||||
| `[array item]` | array | false | | |
|
| `[array item]` | array | false | | |
|
||||||
| `» available_workers` | array | false | | |
|
| `» available_workers` | array | false | | |
|
||||||
| `» canceled_at` | string(date-time) | false | | |
|
| `» canceled_at` | string(date-time) | false | | |
|
||||||
@ -445,6 +453,13 @@ Status Code **200**
|
|||||||
| `»» error` | string | false | | |
|
| `»» error` | string | false | | |
|
||||||
| `»» template_version_id` | string(uuid) | false | | |
|
| `»» template_version_id` | string(uuid) | false | | |
|
||||||
| `»» workspace_build_id` | string(uuid) | false | | |
|
| `»» workspace_build_id` | string(uuid) | false | | |
|
||||||
|
| `» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
|
||||||
|
| `»» template_display_name` | string | false | | |
|
||||||
|
| `»» template_id` | string(uuid) | false | | |
|
||||||
|
| `»» template_name` | string | false | | |
|
||||||
|
| `»» template_version_name` | string | false | | |
|
||||||
|
| `»» workspace_id` | string(uuid) | false | | |
|
||||||
|
| `»» workspace_name` | string | false | | |
|
||||||
| `» organization_id` | string(uuid) | false | | |
|
| `» organization_id` | string(uuid) | false | | |
|
||||||
| `» queue_position` | integer | false | | |
|
| `» queue_position` | integer | false | | |
|
||||||
| `» queue_size` | integer | false | | |
|
| `» queue_size` | integer | false | | |
|
||||||
@ -513,6 +528,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
|
67
docs/reference/api/schemas.md
generated
67
docs/reference/api/schemas.md
generated
@ -4636,6 +4636,14 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -4653,7 +4661,7 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
|
|||||||
### Properties
|
### Properties
|
||||||
|
|
||||||
| Name | Type | Required | Restrictions | Description |
|
| Name | Type | Required | Restrictions | Description |
|
||||||
|---------------------|----------------------------------------------------------------|----------|--------------|-------------|
|
|---------------------|--------------------------------------------------------------------|----------|--------------|-------------|
|
||||||
| `available_workers` | array of string | false | | |
|
| `available_workers` | array of string | false | | |
|
||||||
| `canceled_at` | string | false | | |
|
| `canceled_at` | string | false | | |
|
||||||
| `completed_at` | string | false | | |
|
| `completed_at` | string | false | | |
|
||||||
@ -4663,6 +4671,7 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
|
|||||||
| `file_id` | string | false | | |
|
| `file_id` | string | false | | |
|
||||||
| `id` | string | false | | |
|
| `id` | string | false | | |
|
||||||
| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
|
| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
|
||||||
|
| `metadata` | [codersdk.ProvisionerJobMetadata](#codersdkprovisionerjobmetadata) | false | | |
|
||||||
| `organization_id` | string | false | | |
|
| `organization_id` | string | false | | |
|
||||||
| `queue_position` | integer | false | | |
|
| `queue_position` | integer | false | | |
|
||||||
| `queue_size` | integer | false | | |
|
| `queue_size` | integer | false | | |
|
||||||
@ -4737,6 +4746,30 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
|
|||||||
| `log_level` | `warn` |
|
| `log_level` | `warn` |
|
||||||
| `log_level` | `error` |
|
| `log_level` | `error` |
|
||||||
|
|
||||||
|
## codersdk.ProvisionerJobMetadata
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
|
||||||
|
| Name | Type | Required | Restrictions | Description |
|
||||||
|
|-------------------------|--------|----------|--------------|-------------|
|
||||||
|
| `template_display_name` | string | false | | |
|
||||||
|
| `template_id` | string | false | | |
|
||||||
|
| `template_name` | string | false | | |
|
||||||
|
| `template_version_name` | string | false | | |
|
||||||
|
| `workspace_id` | string | false | | |
|
||||||
|
| `workspace_name` | string | false | | |
|
||||||
|
|
||||||
## codersdk.ProvisionerJobStatus
|
## codersdk.ProvisionerJobStatus
|
||||||
|
|
||||||
```json
|
```json
|
||||||
@ -6135,6 +6168,14 @@ Restarts will only happen on weekdays in this list on weeks which line up with W
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -7200,6 +7241,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -7942,6 +7991,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -8606,6 +8663,14 @@ If the schedule is empty, the user will be updated to use the default schedule.|
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
|
90
docs/reference/api/templates.md
generated
90
docs/reference/api/templates.md
generated
@ -462,6 +462,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/templat
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -550,6 +558,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/templat
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -662,6 +678,14 @@ curl -X POST http://coder-server:8080/api/v2/organizations/{organization}/templa
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1202,6 +1226,14 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1243,7 +1275,7 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions \
|
|||||||
Status Code **200**
|
Status Code **200**
|
||||||
|
|
||||||
| Name | Type | Required | Restrictions | Description |
|
| Name | Type | Required | Restrictions | Description |
|
||||||
|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `[array item]` | array | false | | |
|
| `[array item]` | array | false | | |
|
||||||
| `» archived` | boolean | false | | |
|
| `» archived` | boolean | false | | |
|
||||||
| `» created_at` | string(date-time) | false | | |
|
| `» created_at` | string(date-time) | false | | |
|
||||||
@ -1265,6 +1297,13 @@ Status Code **200**
|
|||||||
| `»»» error` | string | false | | |
|
| `»»» error` | string | false | | |
|
||||||
| `»»» template_version_id` | string(uuid) | false | | |
|
| `»»» template_version_id` | string(uuid) | false | | |
|
||||||
| `»»» workspace_build_id` | string(uuid) | false | | |
|
| `»»» workspace_build_id` | string(uuid) | false | | |
|
||||||
|
| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
|
||||||
|
| `»»» template_display_name` | string | false | | |
|
||||||
|
| `»»» template_id` | string(uuid) | false | | |
|
||||||
|
| `»»» template_name` | string | false | | |
|
||||||
|
| `»»» template_version_name` | string | false | | |
|
||||||
|
| `»»» workspace_id` | string(uuid) | false | | |
|
||||||
|
| `»»» workspace_name` | string | false | | |
|
||||||
| `»» organization_id` | string(uuid) | false | | |
|
| `»» organization_id` | string(uuid) | false | | |
|
||||||
| `»» queue_position` | integer | false | | |
|
| `»» queue_position` | integer | false | | |
|
||||||
| `»» queue_size` | integer | false | | |
|
| `»» queue_size` | integer | false | | |
|
||||||
@ -1462,6 +1501,14 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions/{templ
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1503,7 +1550,7 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions/{templ
|
|||||||
Status Code **200**
|
Status Code **200**
|
||||||
|
|
||||||
| Name | Type | Required | Restrictions | Description |
|
| Name | Type | Required | Restrictions | Description |
|
||||||
|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `[array item]` | array | false | | |
|
| `[array item]` | array | false | | |
|
||||||
| `» archived` | boolean | false | | |
|
| `» archived` | boolean | false | | |
|
||||||
| `» created_at` | string(date-time) | false | | |
|
| `» created_at` | string(date-time) | false | | |
|
||||||
@ -1525,6 +1572,13 @@ Status Code **200**
|
|||||||
| `»»» error` | string | false | | |
|
| `»»» error` | string | false | | |
|
||||||
| `»»» template_version_id` | string(uuid) | false | | |
|
| `»»» template_version_id` | string(uuid) | false | | |
|
||||||
| `»»» workspace_build_id` | string(uuid) | false | | |
|
| `»»» workspace_build_id` | string(uuid) | false | | |
|
||||||
|
| `»» metadata` | [codersdk.ProvisionerJobMetadata](schemas.md#codersdkprovisionerjobmetadata) | false | | |
|
||||||
|
| `»»» template_display_name` | string | false | | |
|
||||||
|
| `»»» template_id` | string(uuid) | false | | |
|
||||||
|
| `»»» template_name` | string | false | | |
|
||||||
|
| `»»» template_version_name` | string | false | | |
|
||||||
|
| `»»» workspace_id` | string(uuid) | false | | |
|
||||||
|
| `»»» workspace_name` | string | false | | |
|
||||||
| `»» organization_id` | string(uuid) | false | | |
|
| `»» organization_id` | string(uuid) | false | | |
|
||||||
| `»» queue_position` | integer | false | | |
|
| `»» queue_position` | integer | false | | |
|
||||||
| `»» queue_size` | integer | false | | |
|
| `»» queue_size` | integer | false | | |
|
||||||
@ -1612,6 +1666,14 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion} \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1709,6 +1771,14 @@ curl -X PATCH http://coder-server:8080/api/v2/templateversions/{templateversion}
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1896,6 +1966,14 @@ curl -X POST http://coder-server:8080/api/v2/templateversions/{templateversion}/
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1959,6 +2037,14 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion}/d
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
|
48
docs/reference/api/workspaces.md
generated
48
docs/reference/api/workspaces.md
generated
@ -91,6 +91,14 @@ of the template will be used.
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -332,6 +340,14 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -597,6 +613,14 @@ of the template will be used.
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -841,6 +865,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1079,6 +1111,14 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace} \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
@ -1436,6 +1476,14 @@ curl -X PUT http://coder-server:8080/api/v2/workspaces/{workspace}/dormant \
|
|||||||
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
|
||||||
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
"workspace_build_id": "badaf2eb-96c5-4050-9f1d-db2d39ca5478"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"template_display_name": "string",
|
||||||
|
"template_id": "c6d67e98-83ea-49f0-8812-e4abae2b68bc",
|
||||||
|
"template_name": "string",
|
||||||
|
"template_version_name": "string",
|
||||||
|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9",
|
||||||
|
"workspace_name": "string"
|
||||||
|
},
|
||||||
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
"organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
|
||||||
"queue_position": 0,
|
"queue_position": 0,
|
||||||
"queue_size": 0,
|
"queue_size": 0,
|
||||||
|
4
docs/reference/cli/provisioner_jobs_list.md
generated
4
docs/reference/cli/provisioner_jobs_list.md
generated
@ -46,8 +46,8 @@ Select which organization (uuid or name) to use.
|
|||||||
### -c, --column
|
### -c, --column
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| Type | <code>[id\|created at\|started at\|completed at\|canceled at\|error\|error code\|status\|worker id\|file id\|tags\|queue position\|queue size\|organization id\|template version id\|workspace build id\|type\|available workers\|organization\|queue]</code> |
|
| Type | <code>[id\|created at\|started at\|completed at\|canceled at\|error\|error code\|status\|worker id\|file id\|tags\|queue position\|queue size\|organization id\|template version id\|workspace build id\|type\|available workers\|template version name\|template id\|template name\|template display name\|workspace id\|workspace name\|organization\|queue]</code> |
|
||||||
| Default | <code>created at,id,organization,status,type,queue,tags</code> |
|
| Default | <code>created at,id,organization,status,type,queue,tags</code> |
|
||||||
|
|
||||||
Columns to display in table output.
|
Columns to display in table output.
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Organizations - best practices
|
# Organizations - best practices
|
||||||
|
|
||||||
December 9, 2024
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Coder [Organizations](../../admin/users/organizations.md) allow administrators
|
Coder [Organizations](../../admin/users/organizations.md) allow administrators
|
||||||
@ -80,10 +78,8 @@ cannot access. Instead, the control plane sends simple "provisioner jobs" to the
|
|||||||
provisioner and the provisioner is responsible for executing the Terraform.
|
provisioner and the provisioner is responsible for executing the Terraform.
|
||||||
|
|
||||||
There are planned improvements to the troubleshooting provisioners process.
|
There are planned improvements to the troubleshooting provisioners process.
|
||||||
Follow these GitHub issues for more details:
|
Follow this GitHub issue for more details:
|
||||||
|
|
||||||
- [coder/coder#15048](https://github.com/coder/coder/issues/15048)
|
|
||||||
- [coder/coder#15087](https://github.com/coder/coder/issues/15087)
|
|
||||||
- [coder/coder#15192](https://github.com/coder/coder/issues/15192)
|
- [coder/coder#15192](https://github.com/coder/coder/issues/15192)
|
||||||
|
|
||||||
## Identity Provider (SSO) Sync
|
## Identity Provider (SSO) Sync
|
||||||
|
@ -27,11 +27,6 @@ Use the Coder CLI to log in and configure SSH, then connect to your workspace wi
|
|||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
> **Important:** If you plan to use the built-in PostgreSQL database, you will
|
|
||||||
> need to ensure that the
|
|
||||||
> [Visual C++ Runtime](https://learn.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist#latest-microsoft-visual-c-redistributable-version)
|
|
||||||
> is installed.
|
|
||||||
|
|
||||||
Use [GitHub releases](https://github.com/coder/coder/releases) to download the
|
Use [GitHub releases](https://github.com/coder/coder/releases) to download the
|
||||||
Windows installer (`.msi`) or standalone binary (`.exe`).
|
Windows installer (`.msi`) or standalone binary (`.exe`).
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ OPTIONS:
|
|||||||
-O, --org string, $CODER_ORGANIZATION
|
-O, --org string, $CODER_ORGANIZATION
|
||||||
Select which organization (uuid or name) to use.
|
Select which organization (uuid or name) to use.
|
||||||
|
|
||||||
-c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|organization|queue] (default: created at,id,organization,status,type,queue,tags)
|
-c, --column [id|created at|started at|completed at|canceled at|error|error code|status|worker id|file id|tags|queue position|queue size|organization id|template version id|workspace build id|type|available workers|template version name|template id|template name|template display name|workspace id|workspace name|organization|queue] (default: created at,id,organization,status,type,queue,tags)
|
||||||
Columns to display in table output.
|
Columns to display in table output.
|
||||||
|
|
||||||
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
|
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
|
||||||
|
106
go.mod
106
go.mod
@ -71,6 +71,7 @@ require (
|
|||||||
github.com/adrg/xdg v0.5.0
|
github.com/adrg/xdg v0.5.0
|
||||||
github.com/ammario/tlru v0.4.0
|
github.com/ammario/tlru v0.4.0
|
||||||
github.com/andybalholm/brotli v1.1.1
|
github.com/andybalholm/brotli v1.1.1
|
||||||
|
github.com/aquasecurity/trivy-iac v0.8.0
|
||||||
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2
|
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2
|
||||||
github.com/awalterschulze/gographviz v2.0.3+incompatible
|
github.com/awalterschulze/gographviz v2.0.3+incompatible
|
||||||
github.com/aws/smithy-go v1.22.2
|
github.com/aws/smithy-go v1.22.2
|
||||||
@ -101,6 +102,7 @@ require (
|
|||||||
github.com/creack/pty v1.1.21
|
github.com/creack/pty v1.1.21
|
||||||
github.com/dave/dst v0.27.2
|
github.com/dave/dst v0.27.2
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
|
||||||
|
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e
|
||||||
github.com/elastic/go-sysinfo v1.15.0
|
github.com/elastic/go-sysinfo v1.15.0
|
||||||
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21
|
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21
|
||||||
github.com/emersion/go-smtp v0.21.2
|
github.com/emersion/go-smtp v0.21.2
|
||||||
@ -150,7 +152,7 @@ require (
|
|||||||
github.com/mocktools/go-smtp-mock/v2 v2.4.0
|
github.com/mocktools/go-smtp-mock/v2 v2.4.0
|
||||||
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a
|
github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a
|
||||||
github.com/natefinch/atomic v1.0.1
|
github.com/natefinch/atomic v1.0.1
|
||||||
github.com/open-policy-agent/opa v1.0.0
|
github.com/open-policy-agent/opa v1.1.0
|
||||||
github.com/ory/dockertest/v3 v3.11.0
|
github.com/ory/dockertest/v3 v3.11.0
|
||||||
github.com/pion/udp v0.1.4
|
github.com/pion/udp v0.1.4
|
||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
|
||||||
@ -174,13 +176,14 @@ require (
|
|||||||
github.com/unrolled/secure v1.17.0
|
github.com/unrolled/secure v1.17.0
|
||||||
github.com/valyala/fasthttp v1.58.0
|
github.com/valyala/fasthttp v1.58.0
|
||||||
github.com/wagslane/go-password-validator v0.3.0
|
github.com/wagslane/go-password-validator v0.3.0
|
||||||
|
github.com/zclconf/go-cty-yaml v1.1.0
|
||||||
go.mozilla.org/pkcs7 v0.9.0
|
go.mozilla.org/pkcs7 v0.9.0
|
||||||
go.nhat.io/otelsql v0.15.0
|
go.nhat.io/otelsql v0.15.0
|
||||||
go.opentelemetry.io/otel v1.33.0
|
go.opentelemetry.io/otel v1.34.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
|
||||||
go.opentelemetry.io/otel/sdk v1.33.0
|
go.opentelemetry.io/otel/sdk v1.34.0
|
||||||
go.opentelemetry.io/otel/trace v1.33.0
|
go.opentelemetry.io/otel/trace v1.34.0
|
||||||
go.uber.org/atomic v1.11.0
|
go.uber.org/atomic v1.11.0
|
||||||
go.uber.org/goleak v1.3.1-0.20240429205332-517bace7cc29
|
go.uber.org/goleak v1.3.1-0.20240429205332-517bace7cc29
|
||||||
go.uber.org/mock v0.5.0
|
go.uber.org/mock v0.5.0
|
||||||
@ -189,10 +192,10 @@ require (
|
|||||||
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa
|
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa
|
||||||
golang.org/x/mod v0.23.0
|
golang.org/x/mod v0.23.0
|
||||||
golang.org/x/net v0.34.0
|
golang.org/x/net v0.34.0
|
||||||
golang.org/x/oauth2 v0.25.0
|
golang.org/x/oauth2 v0.26.0
|
||||||
golang.org/x/sync v0.10.0
|
golang.org/x/sync v0.11.0
|
||||||
golang.org/x/sys v0.29.1-0.20250107080300-1c14dcadc3ab
|
golang.org/x/sys v0.30.0
|
||||||
golang.org/x/term v0.28.0
|
golang.org/x/term v0.29.0
|
||||||
golang.org/x/text v0.21.0 // indirect
|
golang.org/x/text v0.21.0 // indirect
|
||||||
golang.org/x/tools v0.29.0
|
golang.org/x/tools v0.29.0
|
||||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
|
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
|
||||||
@ -218,11 +221,18 @@ require (
|
|||||||
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
|
||||||
github.com/DataDog/appsec-internal-go v1.9.0 // indirect
|
github.com/DataDog/appsec-internal-go v1.9.0 // indirect
|
||||||
github.com/DataDog/datadog-agent/pkg/obfuscate v0.58.0 // indirect
|
github.com/DataDog/datadog-agent/pkg/obfuscate v0.58.0 // indirect
|
||||||
|
github.com/DataDog/datadog-agent/pkg/proto v0.58.0 // indirect
|
||||||
github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.58.0 // indirect
|
github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.58.0 // indirect
|
||||||
|
github.com/DataDog/datadog-agent/pkg/trace v0.58.0 // indirect
|
||||||
|
github.com/DataDog/datadog-agent/pkg/util/log v0.58.0 // indirect
|
||||||
|
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.58.0 // indirect
|
||||||
github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
|
github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
|
||||||
github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect
|
github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect
|
||||||
|
github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20241206090539-a14610dc22b6 // indirect
|
||||||
|
github.com/DataDog/go-sqllexer v0.0.14 // indirect
|
||||||
github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect
|
github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect
|
||||||
github.com/DataDog/gostackparse v0.7.0 // indirect
|
github.com/DataDog/gostackparse v0.7.0 // indirect
|
||||||
|
github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 // indirect
|
||||||
github.com/DataDog/sketches-go v1.4.5 // indirect
|
github.com/DataDog/sketches-go v1.4.5 // indirect
|
||||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||||
@ -235,6 +245,7 @@ require (
|
|||||||
github.com/alecthomas/chroma/v2 v2.15.0 // indirect
|
github.com/alecthomas/chroma/v2 v2.15.0 // indirect
|
||||||
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // indirect
|
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // indirect
|
||||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
|
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
|
||||||
|
github.com/apparentlymart/go-cidr v1.1.0 // indirect
|
||||||
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
|
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
|
||||||
github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c // indirect
|
github.com/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c // indirect
|
||||||
github.com/atotto/clipboard v0.1.4 // indirect
|
github.com/atotto/clipboard v0.1.4 // indirect
|
||||||
@ -257,12 +268,14 @@ require (
|
|||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bep/godartsass/v2 v2.3.2 // indirect
|
github.com/bep/godartsass/v2 v2.3.2 // indirect
|
||||||
github.com/bep/golibsass v1.2.0 // indirect
|
github.com/bep/golibsass v1.2.0 // indirect
|
||||||
|
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
|
||||||
github.com/charmbracelet/x/ansi v0.4.5 // indirect
|
github.com/charmbracelet/x/ansi v0.4.5 // indirect
|
||||||
github.com/charmbracelet/x/term v0.2.0 // indirect
|
github.com/charmbracelet/x/term v0.2.0 // indirect
|
||||||
github.com/chromedp/sysutil v1.0.0 // indirect
|
github.com/chromedp/sysutil v1.0.0 // indirect
|
||||||
|
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
|
||||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||||
github.com/cloudflare/circl v1.3.7 // indirect
|
github.com/cloudflare/circl v1.3.7 // indirect
|
||||||
github.com/containerd/continuity v0.4.3 // indirect
|
github.com/containerd/continuity v0.4.4 // indirect
|
||||||
github.com/coreos/go-iptables v0.6.0 // indirect
|
github.com/coreos/go-iptables v0.6.0 // indirect
|
||||||
github.com/dlclark/regexp2 v1.11.4 // indirect
|
github.com/dlclark/regexp2 v1.11.4 // indirect
|
||||||
github.com/docker/cli v27.1.1+incompatible // indirect
|
github.com/docker/cli v27.1.1+incompatible // indirect
|
||||||
@ -298,10 +311,10 @@ require (
|
|||||||
github.com/gobwas/ws v1.4.0 // indirect
|
github.com/gobwas/ws v1.4.0 // indirect
|
||||||
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
github.com/godbus/dbus/v5 v5.1.0 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
|
github.com/gohugoio/hashstructure v0.3.0 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.4 // indirect
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/google/btree v1.1.2 // indirect
|
github.com/google/btree v1.1.2 // indirect
|
||||||
github.com/google/flatbuffers v23.1.21+incompatible // indirect
|
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/google/nftables v0.2.0 // indirect
|
github.com/google/nftables v0.2.0 // indirect
|
||||||
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect
|
github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect
|
||||||
@ -311,7 +324,7 @@ require (
|
|||||||
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
||||||
github.com/gorilla/css v1.0.1 // indirect
|
github.com/gorilla/css v1.0.1 // indirect
|
||||||
github.com/gorilla/mux v1.8.1 // indirect
|
github.com/gorilla/mux v1.8.1 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect
|
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect
|
||||||
@ -335,11 +348,13 @@ require (
|
|||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect
|
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // indirect
|
||||||
github.com/jsimonetti/rtnetlink v1.3.5 // indirect
|
github.com/jsimonetti/rtnetlink v1.3.5 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a // indirect
|
github.com/kortschak/wol v0.0.0-20200729010619-da482cc4850a // indirect
|
||||||
github.com/kr/fs v0.1.0 // indirect
|
github.com/kr/fs v0.1.0 // indirect
|
||||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
github.com/leodido/go-urn v1.4.0 // indirect
|
github.com/leodido/go-urn v1.4.0 // indirect
|
||||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||||
|
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-localereader v0.0.1 // indirect
|
github.com/mattn/go-localereader v0.0.1 // indirect
|
||||||
@ -357,6 +372,8 @@ require (
|
|||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||||
github.com/moby/term v0.5.0 // indirect
|
github.com/moby/term v0.5.0 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
||||||
github.com/muesli/cancelreader v0.2.2 // indirect
|
github.com/muesli/cancelreader v0.2.2 // indirect
|
||||||
github.com/muesli/reflow v0.3.0 // indirect
|
github.com/muesli/reflow v0.3.0 // indirect
|
||||||
@ -375,6 +392,7 @@ require (
|
|||||||
github.com/pion/transport/v3 v3.0.7 // indirect
|
github.com/pion/transport/v3 v3.0.7 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
|
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
|
||||||
github.com/prometheus/procfs v0.15.1 // indirect
|
github.com/prometheus/procfs v0.15.1 // indirect
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
||||||
github.com/riandyrn/otelchi v0.5.1 // indirect
|
github.com/riandyrn/otelchi v0.5.1 // indirect
|
||||||
@ -383,6 +401,8 @@ require (
|
|||||||
github.com/ryanuber/go-glob v1.0.0 // indirect
|
github.com/ryanuber/go-glob v1.0.0 // indirect
|
||||||
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
|
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
|
||||||
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
|
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
|
||||||
|
github.com/shirou/gopsutil/v3 v3.24.4 // indirect
|
||||||
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||||
github.com/spf13/cast v1.7.1 // indirect
|
github.com/spf13/cast v1.7.1 // indirect
|
||||||
@ -392,14 +412,17 @@ require (
|
|||||||
github.com/tailscale/golang-x-crypto v0.0.0-20230713185742-f0b76a10a08e // indirect
|
github.com/tailscale/golang-x-crypto v0.0.0-20230713185742-f0b76a10a08e // indirect
|
||||||
github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect
|
github.com/tailscale/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect
|
||||||
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85
|
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85
|
||||||
|
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
|
||||||
github.com/tailscale/wireguard-go v0.0.0-20231121184858-cc193a0b3272
|
github.com/tailscale/wireguard-go v0.0.0-20231121184858-cc193a0b3272
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1 // indirect
|
github.com/tchap/go-patricia/v2 v2.3.2 // indirect
|
||||||
github.com/tcnksm/go-httpstat v0.2.0 // indirect
|
github.com/tcnksm/go-httpstat v0.2.0 // indirect
|
||||||
github.com/tdewolff/parse/v2 v2.7.15 // indirect
|
github.com/tdewolff/parse/v2 v2.7.15 // indirect
|
||||||
github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 // indirect
|
github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 // indirect
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
github.com/tidwall/pretty v1.2.1 // indirect
|
github.com/tidwall/pretty v1.2.1 // indirect
|
||||||
github.com/tinylib/msgp v1.2.1 // indirect
|
github.com/tinylib/msgp v1.2.1 // indirect
|
||||||
|
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||||
|
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||||
github.com/u-root/uio v0.0.0-20240209044354-b3d14b93376a // indirect
|
github.com/u-root/uio v0.0.0-20240209044354-b3d14b93376a // indirect
|
||||||
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
|
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
|
||||||
github.com/vishvananda/netns v0.0.4 // indirect
|
github.com/vishvananda/netns v0.0.4 // indirect
|
||||||
@ -414,13 +437,21 @@ require (
|
|||||||
github.com/yashtewari/glob-intersection v0.2.0 // indirect
|
github.com/yashtewari/glob-intersection v0.2.0 // indirect
|
||||||
github.com/yuin/goldmark v1.7.8 // indirect
|
github.com/yuin/goldmark v1.7.8 // indirect
|
||||||
github.com/yuin/goldmark-emoji v1.0.4 // indirect
|
github.com/yuin/goldmark-emoji v1.0.4 // indirect
|
||||||
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||||
github.com/zclconf/go-cty v1.16.2
|
github.com/zclconf/go-cty v1.16.2
|
||||||
github.com/zeebo/errs v1.3.0 // indirect
|
github.com/zeebo/errs v1.3.0 // indirect
|
||||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
|
go.opentelemetry.io/collector/component v0.104.0 // indirect
|
||||||
|
go.opentelemetry.io/collector/config/configtelemetry v0.104.0 // indirect
|
||||||
|
go.opentelemetry.io/collector/pdata v1.11.0 // indirect
|
||||||
|
go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect
|
||||||
|
go.opentelemetry.io/collector/semconv v0.104.0 // indirect
|
||||||
go.opentelemetry.io/contrib v1.19.0 // indirect
|
go.opentelemetry.io/contrib v1.19.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.33.0 // indirect
|
go.opentelemetry.io/otel/metric v1.34.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.4.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
|
||||||
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
go4.org/mem v0.0.0-20220726221520-4f986261bf13 // indirect
|
go4.org/mem v0.0.0-20220726221520-4f986261bf13 // indirect
|
||||||
golang.org/x/time v0.9.0 // indirect
|
golang.org/x/time v0.9.0 // indirect
|
||||||
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2
|
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2
|
||||||
@ -428,48 +459,11 @@ require (
|
|||||||
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
|
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
|
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
howett.net/plist v1.0.0 // indirect
|
howett.net/plist v1.0.0 // indirect
|
||||||
kernel.org/pub/linux/libs/security/libcap/psx v1.2.73 // indirect
|
kernel.org/pub/linux/libs/security/libcap/psx v1.2.73 // indirect
|
||||||
sigs.k8s.io/yaml v1.4.0 // indirect
|
sigs.k8s.io/yaml v1.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/aquasecurity/trivy-iac v0.8.0
|
|
||||||
github.com/zclconf/go-cty-yaml v1.1.0
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/DataDog/datadog-agent/pkg/proto v0.58.0 // indirect
|
|
||||||
github.com/DataDog/datadog-agent/pkg/trace v0.58.0 // indirect
|
|
||||||
github.com/DataDog/datadog-agent/pkg/util/log v0.58.0 // indirect
|
|
||||||
github.com/DataDog/datadog-agent/pkg/util/scrubber v0.58.0 // indirect
|
|
||||||
github.com/DataDog/go-runtime-metrics-internal v0.0.4-0.20241206090539-a14610dc22b6 // indirect
|
|
||||||
github.com/DataDog/go-sqllexer v0.0.14 // indirect
|
|
||||||
github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.20.0 // indirect
|
|
||||||
github.com/apparentlymart/go-cidr v1.1.0 // indirect
|
|
||||||
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
|
|
||||||
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
|
|
||||||
github.com/gohugoio/hashstructure v0.3.0 // indirect
|
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
|
||||||
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
|
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
|
||||||
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
|
|
||||||
github.com/shirou/gopsutil/v3 v3.24.4 // indirect
|
|
||||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
|
||||||
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc // indirect
|
|
||||||
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
|
||||||
github.com/tklauser/numcpus v0.6.1 // indirect
|
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
|
||||||
go.opentelemetry.io/collector/component v0.104.0 // indirect
|
|
||||||
go.opentelemetry.io/collector/config/configtelemetry v0.104.0 // indirect
|
|
||||||
go.opentelemetry.io/collector/pdata v1.11.0 // indirect
|
|
||||||
go.opentelemetry.io/collector/pdata/pprofile v0.104.0 // indirect
|
|
||||||
go.opentelemetry.io/collector/semconv v0.104.0 // indirect
|
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
|
||||||
go.uber.org/zap v1.27.0 // indirect
|
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
|
||||||
)
|
|
||||||
|
92
go.sum
92
go.sum
@ -183,8 +183,6 @@ github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5 h1:BjkPE3785EwP
|
|||||||
github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5/go.mod h1:jtAfVaU/2cu1+wdSRPWE2c1N2qeAA3K4RH9pYgqwets=
|
github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5/go.mod h1:jtAfVaU/2cu1+wdSRPWE2c1N2qeAA3K4RH9pYgqwets=
|
||||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
|
||||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
@ -220,8 +218,6 @@ github.com/coder/bubbletea v1.2.2-0.20241212190825-007a1cdb2c41 h1:SBN/DA63+ZHwu
|
|||||||
github.com/coder/bubbletea v1.2.2-0.20241212190825-007a1cdb2c41/go.mod h1:I9ULxr64UaOSUv7hcb3nX4kowodJCVS7vt7VVJk/kW4=
|
github.com/coder/bubbletea v1.2.2-0.20241212190825-007a1cdb2c41/go.mod h1:I9ULxr64UaOSUv7hcb3nX4kowodJCVS7vt7VVJk/kW4=
|
||||||
github.com/coder/flog v1.1.0 h1:kbAes1ai8fIS5OeV+QAnKBQE22ty1jRF/mcAwHpLBa4=
|
github.com/coder/flog v1.1.0 h1:kbAes1ai8fIS5OeV+QAnKBQE22ty1jRF/mcAwHpLBa4=
|
||||||
github.com/coder/flog v1.1.0/go.mod h1:UQlQvrkJBvnRGo69Le8E24Tcl5SJleAAR7gYEHzAmdQ=
|
github.com/coder/flog v1.1.0/go.mod h1:UQlQvrkJBvnRGo69Le8E24Tcl5SJleAAR7gYEHzAmdQ=
|
||||||
github.com/coder/glog v1.0.1-0.20220322161911-7365fe7f2cd1 h1:UqBrPWSYvRI2s5RtOul20JukUEpu4ip9u7biBL+ntgk=
|
|
||||||
github.com/coder/glog v1.0.1-0.20220322161911-7365fe7f2cd1/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
|
|
||||||
github.com/coder/go-httpstat v0.0.0-20230801153223-321c88088322 h1:m0lPZjlQ7vdVpRBPKfYIFlmgevoTkBxB10wv6l2gOaU=
|
github.com/coder/go-httpstat v0.0.0-20230801153223-321c88088322 h1:m0lPZjlQ7vdVpRBPKfYIFlmgevoTkBxB10wv6l2gOaU=
|
||||||
github.com/coder/go-httpstat v0.0.0-20230801153223-321c88088322/go.mod h1:rOLFDDVKVFiDqZFXoteXc97YXx7kFi9kYqR+2ETPkLQ=
|
github.com/coder/go-httpstat v0.0.0-20230801153223-321c88088322/go.mod h1:rOLFDDVKVFiDqZFXoteXc97YXx7kFi9kYqR+2ETPkLQ=
|
||||||
github.com/coder/go-scim/pkg/v2 v2.0.0-20230221055123-1d63c1222136 h1:0RgB61LcNs24WOxc3PBvygSNTQurm0PYPujJjLLOzs0=
|
github.com/coder/go-scim/pkg/v2 v2.0.0-20230221055123-1d63c1222136 h1:0RgB61LcNs24WOxc3PBvygSNTQurm0PYPujJjLLOzs0=
|
||||||
@ -252,8 +248,8 @@ github.com/coder/wgtunnel v0.1.13-0.20240522110300-ade90dfb2da0 h1:C2/eCr+r0a5Au
|
|||||||
github.com/coder/wgtunnel v0.1.13-0.20240522110300-ade90dfb2da0/go.mod h1:qANbdpqyAGlo2bg+4gQKPj24H1ZWa3bQU2Q5/bV5B3Y=
|
github.com/coder/wgtunnel v0.1.13-0.20240522110300-ade90dfb2da0/go.mod h1:qANbdpqyAGlo2bg+4gQKPj24H1ZWa3bQU2Q5/bV5B3Y=
|
||||||
github.com/coder/wireguard-go v0.0.0-20240522052547-769cdd7f7818 h1:bNhUTaKl3q0bFn78bBRq7iIwo72kNTvUD9Ll5TTzDDk=
|
github.com/coder/wireguard-go v0.0.0-20240522052547-769cdd7f7818 h1:bNhUTaKl3q0bFn78bBRq7iIwo72kNTvUD9Ll5TTzDDk=
|
||||||
github.com/coder/wireguard-go v0.0.0-20240522052547-769cdd7f7818/go.mod h1:fAlLM6hUgnf4Sagxn2Uy5Us0PBgOYWz+63HwHUVGEbw=
|
github.com/coder/wireguard-go v0.0.0-20240522052547-769cdd7f7818/go.mod h1:fAlLM6hUgnf4Sagxn2Uy5Us0PBgOYWz+63HwHUVGEbw=
|
||||||
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
|
github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII=
|
||||||
github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
|
github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
|
||||||
github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk=
|
github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk=
|
||||||
github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
|
github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
|
||||||
github.com/coreos/go-oidc/v3 v3.12.0 h1:sJk+8G2qq94rDI6ehZ71Bol3oUHy63qNYmkiSjrc/Jo=
|
github.com/coreos/go-oidc/v3 v3.12.0 h1:sJk+8G2qq94rDI6ehZ71Bol3oUHy63qNYmkiSjrc/Jo=
|
||||||
@ -271,10 +267,12 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg=
|
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e h1:L+XrFvD0vBIBm+Wf9sFN6aU395t7JROoai0qXZraA4U=
|
||||||
github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw=
|
github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e/go.mod h1:SUxUaAK/0UG5lYyZR1L1nC4AaYYvSSYTWQSH3FPcxKU=
|
||||||
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
|
github.com/dgraph-io/badger/v4 v4.5.1 h1:7DCIXrQjo1LKmM96YD+hLVJ2EEsyyoWxJfpdd56HLps=
|
||||||
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
|
github.com/dgraph-io/badger/v4 v4.5.1/go.mod h1:qn3Be0j3TfV4kPbVoK0arXCD1/nr1ftth6sbL5jxdoA=
|
||||||
|
github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I=
|
||||||
|
github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4=
|
||||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
|
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
|
||||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||||
@ -456,14 +454,12 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
|
|||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
|
||||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8 h1:4txT5G2kqVAKMjzidIabL/8KqjIK71yj30YOeuxLn10=
|
github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8 h1:4txT5G2kqVAKMjzidIabL/8KqjIK71yj30YOeuxLn10=
|
||||||
github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
|
github.com/gomarkdown/markdown v0.0.0-20240930133441-72d49d9543d8/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
|
||||||
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
|
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
|
||||||
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
||||||
github.com/google/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA=
|
github.com/google/flatbuffers v24.12.23+incompatible h1:ubBKR94NR4pXUCY/MUsRVzd9umNW7ht7EG9hHfS9FX8=
|
||||||
github.com/google/flatbuffers v23.1.21+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
github.com/google/flatbuffers v24.12.23+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
@ -499,8 +495,8 @@ github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
|
|||||||
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
|
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
|
||||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ=
|
||||||
github.com/hairyhenderson/go-codeowners v0.7.0 h1:s0W4wF8bdsBEjTWzwzSlsatSthWtTAF2xLgo4a4RwAo=
|
github.com/hairyhenderson/go-codeowners v0.7.0 h1:s0W4wF8bdsBEjTWzwzSlsatSthWtTAF2xLgo4a4RwAo=
|
||||||
github.com/hairyhenderson/go-codeowners v0.7.0/go.mod h1:wUlNgQ3QjqC4z8DnM5nnCYVq/icpqXJyJOukKx5U8/Q=
|
github.com/hairyhenderson/go-codeowners v0.7.0/go.mod h1:wUlNgQ3QjqC4z8DnM5nnCYVq/icpqXJyJOukKx5U8/Q=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
@ -728,6 +724,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
|
|||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A=
|
github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A=
|
||||||
github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM=
|
github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM=
|
||||||
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||||
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek=
|
github.com/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek=
|
||||||
github.com/niklasfasching/go-org v1.7.0/go.mod h1:WuVm4d45oePiE0eX25GqTDQIt/qPW1T9DGkRscqLW5o=
|
github.com/niklasfasching/go-org v1.7.0/go.mod h1:WuVm4d45oePiE0eX25GqTDQIt/qPW1T9DGkRscqLW5o=
|
||||||
@ -737,8 +735,8 @@ github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
|
|||||||
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
|
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
|
||||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
github.com/open-policy-agent/opa v1.0.0 h1:fZsEwxg1knpPvUn0YDJuJZBcbVg4G3zKpWa3+CnYK+I=
|
github.com/open-policy-agent/opa v1.1.0 h1:HMz2evdEMTyNqtdLjmu3Vyx06BmhNYAx67Yz3Ll9q2s=
|
||||||
github.com/open-policy-agent/opa v1.0.0/go.mod h1:+JyoH12I0+zqyC1iX7a2tmoQlipwAEGvOhVJMhmy+rM=
|
github.com/open-policy-agent/opa v1.1.0/go.mod h1:T1pASQ1/vwfTa+e2fYcfpLCvWgYtqtiUv+IuA/dLPQs=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
|
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
|
||||||
@ -884,8 +882,10 @@ github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85 h1:zrsUcqrG2uQ
|
|||||||
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85/go.mod h1:NzVQi3Mleb+qzq8VmcWpSkcSYxXIg0DkI6XDzpVkhJ0=
|
github.com/tailscale/netlink v1.1.1-0.20211101221916-cabfb018fe85/go.mod h1:NzVQi3Mleb+qzq8VmcWpSkcSYxXIg0DkI6XDzpVkhJ0=
|
||||||
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA=
|
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc h1:24heQPtnFR+yfntqhI3oAu9i27nEojcQ4NuBQOo5ZFA=
|
||||||
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc=
|
github.com/tailscale/peercred v0.0.0-20250107143737-35a0c7bd7edc/go.mod h1:f93CXfllFsO9ZQVq+Zocb1Gp4G5Fz0b0rXHLOzt/Djc=
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes=
|
github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
|
||||||
github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
|
github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk=
|
||||||
|
github.com/tchap/go-patricia/v2 v2.3.2 h1:xTHFutuitO2zqKAQ5rCROYgUb7Or/+IC3fts9/Yc7nM=
|
||||||
|
github.com/tchap/go-patricia/v2 v2.3.2/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
|
||||||
github.com/tdewolff/minify/v2 v2.20.37 h1:Q97cx4STXCh1dlWDlNHZniE8BJ2EBL0+2b0n92BJQhw=
|
github.com/tdewolff/minify/v2 v2.20.37 h1:Q97cx4STXCh1dlWDlNHZniE8BJ2EBL0+2b0n92BJQhw=
|
||||||
github.com/tdewolff/minify/v2 v2.20.37/go.mod h1:L1VYef/jwKw6Wwyk5A+T0mBjjn3mMPgmjjA688RNsxU=
|
github.com/tdewolff/minify/v2 v2.20.37/go.mod h1:L1VYef/jwKw6Wwyk5A+T0mBjjn3mMPgmjjA688RNsxU=
|
||||||
github.com/tdewolff/parse/v2 v2.7.15 h1:hysDXtdGZIRF5UZXwpfn3ZWRbm+ru4l53/ajBRGpCTw=
|
github.com/tdewolff/parse/v2 v2.7.15 h1:hysDXtdGZIRF5UZXwpfn3ZWRbm+ru4l53/ajBRGpCTw=
|
||||||
@ -1000,33 +1000,33 @@ go.opentelemetry.io/contrib v1.19.0 h1:rnYI7OEPMWFeM4QCqWQ3InMJ0arWMR1i0Cx9A5hcj
|
|||||||
go.opentelemetry.io/contrib v1.19.0/go.mod h1:gIzjwWFoGazJmtCaDgViqOSJPde2mCWzv60o0bWPcZs=
|
go.opentelemetry.io/contrib v1.19.0/go.mod h1:gIzjwWFoGazJmtCaDgViqOSJPde2mCWzv60o0bWPcZs=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
|
||||||
go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
|
go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
|
||||||
go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw=
|
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
|
||||||
go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I=
|
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
|
||||||
go.opentelemetry.io/otel/exporters/prometheus v0.49.0 h1:Er5I1g/YhfYv9Affk9nJLfH/+qCCVVg1f2R9AbJfqDQ=
|
go.opentelemetry.io/otel/exporters/prometheus v0.49.0 h1:Er5I1g/YhfYv9Affk9nJLfH/+qCCVVg1f2R9AbJfqDQ=
|
||||||
go.opentelemetry.io/otel/exporters/prometheus v0.49.0/go.mod h1:KfQ1wpjf3zsHjzP149P4LyAwWRupc6c7t1ZJ9eXpKQM=
|
go.opentelemetry.io/otel/exporters/prometheus v0.49.0/go.mod h1:KfQ1wpjf3zsHjzP149P4LyAwWRupc6c7t1ZJ9eXpKQM=
|
||||||
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0 h1:FiOTYABOX4tdzi8A0+mtzcsTmi6WBOxk66u0f1Mj9Gs=
|
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0 h1:FiOTYABOX4tdzi8A0+mtzcsTmi6WBOxk66u0f1Mj9Gs=
|
||||||
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0/go.mod h1:xyo5rS8DgzV0Jtsht+LCEMwyiDbjpsxBpWETwFRF0/4=
|
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.33.0/go.mod h1:xyo5rS8DgzV0Jtsht+LCEMwyiDbjpsxBpWETwFRF0/4=
|
||||||
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0 h1:W5AWUn/IVe8RFb5pZx1Uh9Laf/4+Qmm4kJL5zPuvR+0=
|
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0 h1:W5AWUn/IVe8RFb5pZx1Uh9Laf/4+Qmm4kJL5zPuvR+0=
|
||||||
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0/go.mod h1:mzKxJywMNBdEX8TSJais3NnsVZUaJ+bAy6UxPTng2vk=
|
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.33.0/go.mod h1:mzKxJywMNBdEX8TSJais3NnsVZUaJ+bAy6UxPTng2vk=
|
||||||
go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ=
|
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
|
||||||
go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M=
|
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
|
||||||
go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
|
go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
|
||||||
go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM=
|
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
|
||||||
go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM=
|
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.33.0 h1:Gs5VK9/WUJhNXZgn8MR6ITatvAmKeIuCtNbsP3JkNqU=
|
go.opentelemetry.io/otel/sdk/metric v1.33.0 h1:Gs5VK9/WUJhNXZgn8MR6ITatvAmKeIuCtNbsP3JkNqU=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.33.0/go.mod h1:dL5ykHZmm1B1nVRk9dDjChwDmt81MjVp3gLkQRwKf/Q=
|
go.opentelemetry.io/otel/sdk/metric v1.33.0/go.mod h1:dL5ykHZmm1B1nVRk9dDjChwDmt81MjVp3gLkQRwKf/Q=
|
||||||
go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
|
go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
|
||||||
go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s=
|
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
|
||||||
go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck=
|
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
|
||||||
go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg=
|
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
|
||||||
go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY=
|
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
|
||||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||||
@ -1076,8 +1076,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
|||||||
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
||||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||||
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
|
golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE=
|
||||||
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -1085,8 +1085,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -1126,8 +1126,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.29.1-0.20250107080300-1c14dcadc3ab h1:BMkEEWYOjkvOX7+YKOGbp6jCyQ5pR2j0Ah47p1Vdsx4=
|
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||||
golang.org/x/sys v0.29.1-0.20250107080300-1c14dcadc3ab/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
@ -1135,8 +1135,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
|||||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||||
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
|
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
|
||||||
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
|
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
|
||||||
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
|
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
||||||
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
|
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
@ -1179,8 +1179,8 @@ google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAs
|
|||||||
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
||||||
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
|
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
|
||||||
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc=
|
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
|
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
|
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 h1:91mG8dNTpkC0uChJUQ9zCiRqx3GEEFOWaRZ0mI6Oj2I=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 h1:91mG8dNTpkC0uChJUQ9zCiRqx3GEEFOWaRZ0mI6Oj2I=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
|
||||||
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
tfjson "github.com/hashicorp/terraform-json"
|
tfjson "github.com/hashicorp/terraform-json"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
protobuf "google.golang.org/protobuf/proto"
|
protobuf "google.golang.org/protobuf/proto"
|
||||||
@ -924,7 +925,9 @@ func TestConvertResources(t *testing.T) {
|
|||||||
var resourcesMap []map[string]interface{}
|
var resourcesMap []map[string]interface{}
|
||||||
err = json.Unmarshal(data, &resourcesMap)
|
err = json.Unmarshal(data, &resourcesMap)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, expectedNoMetadataMap, resourcesMap)
|
if diff := cmp.Diff(expectedNoMetadataMap, resourcesMap); diff != "" {
|
||||||
|
require.Failf(t, "unexpected resources", "diff (-want +got):\n%s", diff)
|
||||||
|
}
|
||||||
|
|
||||||
expectedParams := expected.parameters
|
expectedParams := expected.parameters
|
||||||
if expectedParams == nil {
|
if expectedParams == nil {
|
||||||
@ -981,7 +984,9 @@ func TestConvertResources(t *testing.T) {
|
|||||||
var resourcesMap []map[string]interface{}
|
var resourcesMap []map[string]interface{}
|
||||||
err = json.Unmarshal(data, &resourcesMap)
|
err = json.Unmarshal(data, &resourcesMap)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, expectedMap, resourcesMap)
|
if diff := cmp.Diff(expectedMap, resourcesMap); diff != "" {
|
||||||
|
require.Failf(t, "unexpected resources", "diff (-want +got):\n%s", diff)
|
||||||
|
}
|
||||||
require.ElementsMatch(t, expected.externalAuthProviders, state.ExternalAuthProviders)
|
require.ElementsMatch(t, expected.externalAuthProviders, state.ExternalAuthProviders)
|
||||||
|
|
||||||
require.ElementsMatch(t, expected.Presets, state.Presets)
|
require.ElementsMatch(t, expected.Presets, state.Presets)
|
||||||
|
12
provisioner/terraform/testdata/generate.sh
vendored
12
provisioner/terraform/testdata/generate.sh
vendored
@ -55,11 +55,23 @@ run() {
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [[ " $* " == *" --help "* || " $* " == *" -h "* ]]; then
|
||||||
|
echo "Usage: $0 [module1 module2 ...]"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
declare -a jobs=()
|
declare -a jobs=()
|
||||||
|
if [[ $# -gt 0 ]]; then
|
||||||
|
for d in "$@"; do
|
||||||
|
run "$d" &
|
||||||
|
jobs+=($!)
|
||||||
|
done
|
||||||
|
else
|
||||||
for d in */; do
|
for d in */; do
|
||||||
run "$d" &
|
run "$d" &
|
||||||
jobs+=($!)
|
jobs+=($!)
|
||||||
done
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
err=0
|
err=0
|
||||||
for job in "${jobs[@]}"; do
|
for job in "${jobs[@]}"; do
|
||||||
|
@ -175,7 +175,7 @@ func Untar(directory string, r io.Reader) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
file, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode))
|
file, err := os.OpenFile(target, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.FileMode(header.Mode))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -184,18 +184,70 @@ func TestTar(t *testing.T) {
|
|||||||
|
|
||||||
func TestUntar(t *testing.T) {
|
func TestUntar(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
t.Run("Basic", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
|
log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
|
||||||
|
|
||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
file, err := os.CreateTemp(dir, "*.tf")
|
file, err := os.CreateTemp(dir, "*.tf")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_ = file.Close()
|
_ = file.Close()
|
||||||
|
|
||||||
archive := new(bytes.Buffer)
|
archive := new(bytes.Buffer)
|
||||||
err = provisionersdk.Tar(archive, log, dir, 1024)
|
err = provisionersdk.Tar(archive, log, dir, 1024)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
dir = t.TempDir()
|
dir = t.TempDir()
|
||||||
err = provisionersdk.Untar(dir, archive)
|
err = provisionersdk.Untar(dir, archive)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name())))
|
_, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name())))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Overwrite", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
|
||||||
|
|
||||||
|
dir1 := t.TempDir()
|
||||||
|
dir2 := t.TempDir()
|
||||||
|
|
||||||
|
// 1. Create directory with .tf file.
|
||||||
|
file, err := os.CreateTemp(dir1, "*.tf")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_ = file.Close()
|
||||||
|
|
||||||
|
err = os.WriteFile(file.Name(), []byte("# ab"), 0o600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
archive := new(bytes.Buffer)
|
||||||
|
|
||||||
|
// 2. Build tar archive.
|
||||||
|
err = provisionersdk.Tar(archive, log, dir1, 4096)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// 3. Untar to the second location.
|
||||||
|
err = provisionersdk.Untar(dir2, archive)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// 4. Modify the .tf file
|
||||||
|
err = os.WriteFile(file.Name(), []byte("# c"), 0o600)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// 5. Build tar archive with modified .tf file
|
||||||
|
err = provisionersdk.Tar(archive, log, dir1, 4096)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// 6. Untar to a second location.
|
||||||
|
err = provisionersdk.Untar(dir2, archive)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Verify if the file has been fully overwritten
|
||||||
|
content, err := os.ReadFile(filepath.Join(dir2, filepath.Base(file.Name())))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "# c", string(content))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
"@radix-ui/react-slider": "1.2.2",
|
"@radix-ui/react-slider": "1.2.2",
|
||||||
"@radix-ui/react-slot": "1.1.1",
|
"@radix-ui/react-slot": "1.1.1",
|
||||||
"@radix-ui/react-switch": "1.1.1",
|
"@radix-ui/react-switch": "1.1.1",
|
||||||
|
"@radix-ui/react-tooltip": "1.1.7",
|
||||||
"@radix-ui/react-visually-hidden": "1.1.0",
|
"@radix-ui/react-visually-hidden": "1.1.0",
|
||||||
"@tanstack/react-query-devtools": "4.35.3",
|
"@tanstack/react-query-devtools": "4.35.3",
|
||||||
"@xterm/addon-canvas": "0.7.0",
|
"@xterm/addon-canvas": "0.7.0",
|
||||||
|
36
site/pnpm-lock.yaml
generated
36
site/pnpm-lock.yaml
generated
@ -90,6 +90,9 @@ importers:
|
|||||||
'@radix-ui/react-switch':
|
'@radix-ui/react-switch':
|
||||||
specifier: 1.1.1
|
specifier: 1.1.1
|
||||||
version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-tooltip':
|
||||||
|
specifier: 1.1.7
|
||||||
|
version: 1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
'@radix-ui/react-visually-hidden':
|
'@radix-ui/react-visually-hidden':
|
||||||
specifier: 1.1.0
|
specifier: 1.1.0
|
||||||
version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@ -1917,6 +1920,19 @@ packages:
|
|||||||
'@types/react-dom':
|
'@types/react-dom':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@radix-ui/react-tooltip@1.1.7':
|
||||||
|
resolution: {integrity: sha512-ss0s80BC0+g0+Zc53MvilcnTYSOi4mSuFWBPYPuTOFGjx+pUU+ZrmamMNwS56t8MTFlniA5ocjd4jYm/CdhbOg==, tarball: https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.7.tgz}
|
||||||
|
peerDependencies:
|
||||||
|
'@types/react': '*'
|
||||||
|
'@types/react-dom': '*'
|
||||||
|
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
||||||
|
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@types/react':
|
||||||
|
optional: true
|
||||||
|
'@types/react-dom':
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@radix-ui/react-use-callback-ref@1.1.0':
|
'@radix-ui/react-use-callback-ref@1.1.0':
|
||||||
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==, tarball: https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz}
|
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==, tarball: https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -7975,6 +7991,26 @@ snapshots:
|
|||||||
'@types/react': 18.3.12
|
'@types/react': 18.3.12
|
||||||
'@types/react-dom': 18.3.1
|
'@types/react-dom': 18.3.1
|
||||||
|
|
||||||
|
'@radix-ui/react-tooltip@1.1.7(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||||
|
dependencies:
|
||||||
|
'@radix-ui/primitive': 1.1.1
|
||||||
|
'@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1)
|
||||||
|
'@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1)
|
||||||
|
'@radix-ui/react-dismissable-layer': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1)
|
||||||
|
'@radix-ui/react-popper': 1.2.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-portal': 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-primitive': 2.0.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
'@radix-ui/react-slot': 1.1.1(@types/react@18.3.12)(react@18.3.1)
|
||||||
|
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1)
|
||||||
|
'@radix-ui/react-visually-hidden': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
react: 18.3.1
|
||||||
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
|
optionalDependencies:
|
||||||
|
'@types/react': 18.3.12
|
||||||
|
'@types/react-dom': 18.3.1
|
||||||
|
|
||||||
'@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)':
|
'@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
|
@ -698,7 +698,7 @@ class ApiMethods {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const response = await this.axios.get<TypesGen.ProvisionerDaemon[]>(
|
const response = await this.axios.get<TypesGen.ProvisionerDaemon[]>(
|
||||||
`/api/v2/organizations/${organization}/provisionerdaemons?${params.toString()}`,
|
`/api/v2/organizations/${organization}/provisionerdaemons?${params}`,
|
||||||
);
|
);
|
||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
@ -787,19 +787,25 @@ class ApiMethods {
|
|||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
getIdpSyncClaimFieldValues = async (claimField: string) => {
|
getDeploymentIdpSyncFieldValues = async (
|
||||||
const response = await this.axios.get<string[]>(
|
field: string,
|
||||||
`/api/v2/settings/idpsync/field-values?claimField=${claimField}`,
|
): Promise<readonly string[]> => {
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.set("claimField", field);
|
||||||
|
const response = await this.axios.get<readonly string[]>(
|
||||||
|
`/api/v2/settings/idpsync/field-values?${params}`,
|
||||||
);
|
);
|
||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
getIdpSyncClaimFieldValuesByOrganization = async (
|
getOrganizationIdpSyncClaimFieldValues = async (
|
||||||
organization: string,
|
organization: string,
|
||||||
claimField: string,
|
field: string,
|
||||||
) => {
|
) => {
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.set("claimField", field);
|
||||||
const response = await this.axios.get<TypesGen.Response>(
|
const response = await this.axios.get<TypesGen.Response>(
|
||||||
`/api/v2/organizations/${organization}/settings/idpsync/field-values?claimField=${claimField}`,
|
`/api/v2/organizations/${organization}/settings/idpsync/field-values?${params}`,
|
||||||
);
|
);
|
||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
|
@ -29,3 +29,10 @@ export const deploymentSSHConfig = () => {
|
|||||||
queryFn: API.getDeploymentSSHConfig,
|
queryFn: API.getDeploymentSSHConfig,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const deploymentIdpSyncFieldValues = (field: string) => {
|
||||||
|
return {
|
||||||
|
queryKey: ["deployment", "idpSync", "fieldValues", field],
|
||||||
|
queryFn: () => API.getDeploymentIdpSyncFieldValues(field),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -341,32 +341,16 @@ export const organizationsPermissions = (
|
|||||||
|
|
||||||
export const getOrganizationIdpSyncClaimFieldValuesKey = (
|
export const getOrganizationIdpSyncClaimFieldValuesKey = (
|
||||||
organization: string,
|
organization: string,
|
||||||
claimField: string,
|
field: string,
|
||||||
) => [organization, claimField, "organizationIdpSyncClaimFieldValues"];
|
) => [organization, "idpSync", "fieldValues", field];
|
||||||
|
|
||||||
export const organizationIdpSyncClaimFieldValues = (
|
export const organizationIdpSyncClaimFieldValues = (
|
||||||
organization: string,
|
organization: string,
|
||||||
claimField: string,
|
field: string,
|
||||||
) => {
|
) => {
|
||||||
return {
|
return {
|
||||||
queryKey: getOrganizationIdpSyncClaimFieldValuesKey(
|
queryKey: getOrganizationIdpSyncClaimFieldValuesKey(organization, field),
|
||||||
organization,
|
|
||||||
claimField,
|
|
||||||
),
|
|
||||||
queryFn: () =>
|
queryFn: () =>
|
||||||
API.getIdpSyncClaimFieldValuesByOrganization(organization, claimField),
|
API.getOrganizationIdpSyncClaimFieldValues(organization, field),
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getIdpSyncClaimFieldValuesKey = (claimField: string) => [
|
|
||||||
claimField,
|
|
||||||
"idpSyncClaimFieldValues",
|
|
||||||
];
|
|
||||||
|
|
||||||
export const idpSyncClaimFieldValues = (claimField: string) => {
|
|
||||||
return {
|
|
||||||
queryKey: getIdpSyncClaimFieldValuesKey(claimField),
|
|
||||||
queryFn: () => API.getIdpSyncClaimFieldValues(claimField),
|
|
||||||
enabled: !!claimField,
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
11
site/src/api/typesGenerated.ts
generated
11
site/src/api/typesGenerated.ts
generated
@ -1651,6 +1651,7 @@ export interface ProvisionerJob {
|
|||||||
readonly input: ProvisionerJobInput;
|
readonly input: ProvisionerJobInput;
|
||||||
readonly type: ProvisionerJobType;
|
readonly type: ProvisionerJobType;
|
||||||
readonly available_workers?: readonly string[];
|
readonly available_workers?: readonly string[];
|
||||||
|
readonly metadata?: ProvisionerJobMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
// From codersdk/provisionerdaemons.go
|
// From codersdk/provisionerdaemons.go
|
||||||
@ -1670,6 +1671,16 @@ export interface ProvisionerJobLog {
|
|||||||
readonly output: string;
|
readonly output: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// From codersdk/provisionerdaemons.go
|
||||||
|
export interface ProvisionerJobMetadata {
|
||||||
|
readonly template_version_name: string;
|
||||||
|
readonly template_id: string;
|
||||||
|
readonly template_name: string;
|
||||||
|
readonly template_display_name: string;
|
||||||
|
readonly workspace_id?: string;
|
||||||
|
readonly workspace_name?: string;
|
||||||
|
}
|
||||||
|
|
||||||
// From codersdk/provisionerdaemons.go
|
// From codersdk/provisionerdaemons.go
|
||||||
export type ProvisionerJobStatus =
|
export type ProvisionerJobStatus =
|
||||||
| "canceled"
|
| "canceled"
|
||||||
|
132
site/src/components/Combobox/Combobox.stories.tsx
Normal file
132
site/src/components/Combobox/Combobox.stories.tsx
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
import type { Meta, StoryObj } from "@storybook/react";
|
||||||
|
import { expect, screen, userEvent, waitFor, within } from "@storybook/test";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { Combobox } from "./Combobox";
|
||||||
|
|
||||||
|
const options = ["Option 1", "Option 2", "Option 3", "Another Option"];
|
||||||
|
|
||||||
|
const ComboboxWithHooks = () => {
|
||||||
|
const [value, setValue] = useState("");
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
const [inputValue, setInputValue] = useState("");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Combobox
|
||||||
|
value={value}
|
||||||
|
options={options}
|
||||||
|
placeholder="Select option"
|
||||||
|
open={open}
|
||||||
|
onOpenChange={setOpen}
|
||||||
|
inputValue={inputValue}
|
||||||
|
onInputChange={setInputValue}
|
||||||
|
onSelect={setValue}
|
||||||
|
onKeyDown={(e) => {
|
||||||
|
if (e.key === "Enter" && inputValue && !options.includes(inputValue)) {
|
||||||
|
setValue(inputValue);
|
||||||
|
setInputValue("");
|
||||||
|
setOpen(false);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const meta: Meta<typeof Combobox> = {
|
||||||
|
title: "components/Combobox",
|
||||||
|
component: Combobox,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof Combobox>;
|
||||||
|
|
||||||
|
export const Default: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const OpenCombobox: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
|
||||||
|
await waitFor(() => expect(screen.getByRole("dialog")).toBeInTheDocument());
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const SelectOption: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
await userEvent.click(screen.getByText("Option 1"));
|
||||||
|
|
||||||
|
await waitFor(() =>
|
||||||
|
expect(canvas.getByRole("button")).toHaveTextContent("Option 1"),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const SearchAndFilter: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
await userEvent.type(screen.getByRole("combobox"), "Another");
|
||||||
|
await userEvent.click(
|
||||||
|
screen.getByRole("option", { name: "Another Option" }),
|
||||||
|
);
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(
|
||||||
|
screen.getByRole("option", { name: "Another Option" }),
|
||||||
|
).toBeInTheDocument();
|
||||||
|
expect(
|
||||||
|
screen.queryByRole("option", { name: "Option 1" }),
|
||||||
|
).not.toBeInTheDocument();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const EnterCustomValue: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
await userEvent.type(screen.getByRole("combobox"), "Custom Value{enter}");
|
||||||
|
|
||||||
|
await waitFor(() =>
|
||||||
|
expect(canvas.getByRole("button")).toHaveTextContent("Custom Value"),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NoResults: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
await userEvent.type(screen.getByRole("combobox"), "xyz");
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(screen.getByText("No results found")).toBeInTheDocument();
|
||||||
|
expect(screen.getByText("Enter custom value")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ClearSelectedOption: Story = {
|
||||||
|
render: () => <ComboboxWithHooks />,
|
||||||
|
play: async ({ canvasElement }) => {
|
||||||
|
const canvas = within(canvasElement);
|
||||||
|
|
||||||
|
await userEvent.click(canvas.getByRole("button"));
|
||||||
|
// First select an option
|
||||||
|
await userEvent.click(screen.getByRole("option", { name: "Option 1" }));
|
||||||
|
// Then clear it by selecting it again
|
||||||
|
await userEvent.click(screen.getByRole("option", { name: "Option 1" }));
|
||||||
|
|
||||||
|
await waitFor(() =>
|
||||||
|
expect(canvas.getByRole("button")).toHaveTextContent("Select option"),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
};
|
@ -18,7 +18,7 @@ import { cn } from "utils/cn";
|
|||||||
|
|
||||||
interface ComboboxProps {
|
interface ComboboxProps {
|
||||||
value: string;
|
value: string;
|
||||||
options?: string[];
|
options?: readonly string[];
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
open: boolean;
|
open: boolean;
|
||||||
onOpenChange: (open: boolean) => void;
|
onOpenChange: (open: boolean) => void;
|
||||||
|
28
site/src/components/Tooltip/Tooltip.stories.tsx
Normal file
28
site/src/components/Tooltip/Tooltip.stories.tsx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import type { Meta, StoryObj } from "@storybook/react";
|
||||||
|
import { Button } from "components/Button/Button";
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from "./Tooltip";
|
||||||
|
|
||||||
|
const meta: Meta<typeof TooltipProvider> = {
|
||||||
|
title: "components/Tooltip",
|
||||||
|
component: TooltipProvider,
|
||||||
|
args: {
|
||||||
|
children: (
|
||||||
|
<Tooltip open>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<Button variant="outline">Hover</Button>
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent>Add to library</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default meta;
|
||||||
|
type Story = StoryObj<typeof Tooltip>;
|
||||||
|
|
||||||
|
export const Default: Story = {};
|
34
site/src/components/Tooltip/Tooltip.tsx
Normal file
34
site/src/components/Tooltip/Tooltip.tsx
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
||||||
|
/**
|
||||||
|
* Copied from shadc/ui on 02/05/2025
|
||||||
|
* @see {@link https://ui.shadcn.com/docs/components/tooltip}
|
||||||
|
*/
|
||||||
|
import * as React from "react";
|
||||||
|
import { cn } from "utils/cn";
|
||||||
|
|
||||||
|
export const TooltipProvider = TooltipPrimitive.Provider;
|
||||||
|
|
||||||
|
export const Tooltip = TooltipPrimitive.Root;
|
||||||
|
|
||||||
|
export const TooltipTrigger = TooltipPrimitive.Trigger;
|
||||||
|
|
||||||
|
export const TooltipContent = React.forwardRef<
|
||||||
|
React.ElementRef<typeof TooltipPrimitive.Content>,
|
||||||
|
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
|
||||||
|
>(({ className, sideOffset = 4, ...props }, ref) => (
|
||||||
|
<TooltipPrimitive.Portal>
|
||||||
|
<TooltipPrimitive.Content
|
||||||
|
ref={ref}
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
className={cn(
|
||||||
|
"z-50 overflow-hidden rounded-md bg-surface-primary px-3 py-2 text-xs font-medium text-content-secondary",
|
||||||
|
"border border-solid border-border animate-in fade-in-0 zoom-in-95",
|
||||||
|
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
||||||
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2",
|
||||||
|
"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
</TooltipPrimitive.Portal>
|
||||||
|
));
|
@ -97,7 +97,6 @@ const DeploymentDropdownContent: FC<DeploymentDropdownProps> = ({
|
|||||||
onClick={onPopoverClose}
|
onClick={onPopoverClose}
|
||||||
>
|
>
|
||||||
Organizations
|
Organizations
|
||||||
<FeatureStageBadge contentType="beta" size="sm" showTooltip={false} />
|
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
{canViewAuditLog && (
|
{canViewAuditLog && (
|
||||||
|
@ -228,14 +228,7 @@ const AdminSettingsSub: FC<MobileMenuPermissions> = ({
|
|||||||
asChild
|
asChild
|
||||||
className={cn(itemStyles.default, itemStyles.sub)}
|
className={cn(itemStyles.default, itemStyles.sub)}
|
||||||
>
|
>
|
||||||
<Link to="/organizations">
|
<Link to="/organizations">Organizations</Link>
|
||||||
Organizations
|
|
||||||
<FeatureStageBadge
|
|
||||||
contentType="beta"
|
|
||||||
size="sm"
|
|
||||||
showTooltip={false}
|
|
||||||
/>
|
|
||||||
</Link>
|
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
)}
|
)}
|
||||||
{canViewAuditLog && (
|
{canViewAuditLog && (
|
||||||
|
@ -82,7 +82,6 @@ const OrganizationSettingsLayout: FC = () => {
|
|||||||
<BreadcrumbItem>
|
<BreadcrumbItem>
|
||||||
<BreadcrumbPage className="flex items-center gap-2">
|
<BreadcrumbPage className="flex items-center gap-2">
|
||||||
Organizations
|
Organizations
|
||||||
<FeatureStageBadge contentType="beta" size="sm" />
|
|
||||||
</BreadcrumbPage>
|
</BreadcrumbPage>
|
||||||
</BreadcrumbItem>
|
</BreadcrumbItem>
|
||||||
{organization && (
|
{organization && (
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { getErrorMessage } from "api/errors";
|
import { getErrorMessage } from "api/errors";
|
||||||
|
import { deploymentIdpSyncFieldValues } from "api/queries/deployment";
|
||||||
import {
|
import {
|
||||||
organizationIdpSyncSettings,
|
organizationIdpSyncSettings,
|
||||||
patchOrganizationSyncSettings,
|
patchOrganizationSyncSettings,
|
||||||
} from "api/queries/idpsync";
|
} from "api/queries/idpsync";
|
||||||
import { idpSyncClaimFieldValues } from "api/queries/organizations";
|
|
||||||
import { ChooseOne, Cond } from "components/Conditionals/ChooseOne";
|
import { ChooseOne, Cond } from "components/Conditionals/ChooseOne";
|
||||||
import { displayError } from "components/GlobalSnackbar/utils";
|
import { displayError } from "components/GlobalSnackbar/utils";
|
||||||
import { displaySuccess } from "components/GlobalSnackbar/utils";
|
import { displaySuccess } from "components/GlobalSnackbar/utils";
|
||||||
@ -21,26 +21,23 @@ import { ExportPolicyButton } from "./ExportPolicyButton";
|
|||||||
import IdpOrgSyncPageView from "./IdpOrgSyncPageView";
|
import IdpOrgSyncPageView from "./IdpOrgSyncPageView";
|
||||||
|
|
||||||
export const IdpOrgSyncPage: FC = () => {
|
export const IdpOrgSyncPage: FC = () => {
|
||||||
const [claimField, setClaimField] = useState("");
|
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
// IdP sync does not have its own entitlement and is based on templace_rbac
|
// IdP sync does not have its own entitlement and is based on templace_rbac
|
||||||
const { template_rbac: isIdpSyncEnabled } = useFeatureVisibility();
|
const { template_rbac: isIdpSyncEnabled } = useFeatureVisibility();
|
||||||
const { organizations } = useDashboard();
|
const { organizations } = useDashboard();
|
||||||
const {
|
const settingsQuery = useQuery(organizationIdpSyncSettings(isIdpSyncEnabled));
|
||||||
data: orgSyncSettingsData,
|
|
||||||
isLoading,
|
|
||||||
error,
|
|
||||||
} = useQuery({
|
|
||||||
...organizationIdpSyncSettings(isIdpSyncEnabled),
|
|
||||||
onSuccess: (data) => {
|
|
||||||
if (data?.field) {
|
|
||||||
setClaimField(data.field);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const { data: claimFieldValues } = useQuery(
|
const [field, setField] = useState("");
|
||||||
idpSyncClaimFieldValues(claimField),
|
useEffect(() => {
|
||||||
|
if (!settingsQuery.data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setField(settingsQuery.data.field);
|
||||||
|
}, [settingsQuery.data]);
|
||||||
|
|
||||||
|
const fieldValuesQuery = useQuery(
|
||||||
|
field ? deploymentIdpSyncFieldValues(field) : { enabled: false },
|
||||||
);
|
);
|
||||||
|
|
||||||
const patchOrganizationSyncSettingsMutation = useMutation(
|
const patchOrganizationSyncSettingsMutation = useMutation(
|
||||||
@ -58,14 +55,10 @@ export const IdpOrgSyncPage: FC = () => {
|
|||||||
}
|
}
|
||||||
}, [patchOrganizationSyncSettingsMutation.error]);
|
}, [patchOrganizationSyncSettingsMutation.error]);
|
||||||
|
|
||||||
if (isLoading) {
|
if (settingsQuery.isLoading) {
|
||||||
return <Loader />;
|
return <Loader />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSyncFieldChange = (value: string) => {
|
|
||||||
setClaimField(value);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Helmet>
|
<Helmet>
|
||||||
@ -84,7 +77,7 @@ export const IdpOrgSyncPage: FC = () => {
|
|||||||
</Link>
|
</Link>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<ExportPolicyButton syncSettings={orgSyncSettingsData} />
|
<ExportPolicyButton syncSettings={settingsQuery.data} />
|
||||||
</header>
|
</header>
|
||||||
<ChooseOne>
|
<ChooseOne>
|
||||||
<Cond condition={!isIdpSyncEnabled}>
|
<Cond condition={!isIdpSyncEnabled}>
|
||||||
@ -96,8 +89,10 @@ export const IdpOrgSyncPage: FC = () => {
|
|||||||
</Cond>
|
</Cond>
|
||||||
<Cond>
|
<Cond>
|
||||||
<IdpOrgSyncPageView
|
<IdpOrgSyncPageView
|
||||||
organizationSyncSettings={orgSyncSettingsData}
|
organizationSyncSettings={settingsQuery.data}
|
||||||
|
claimFieldValues={fieldValuesQuery.data}
|
||||||
organizations={organizations}
|
organizations={organizations}
|
||||||
|
onSyncFieldChange={setField}
|
||||||
onSubmit={async (data) => {
|
onSubmit={async (data) => {
|
||||||
try {
|
try {
|
||||||
await patchOrganizationSyncSettingsMutation.mutateAsync(data);
|
await patchOrganizationSyncSettingsMutation.mutateAsync(data);
|
||||||
@ -111,9 +106,7 @@ export const IdpOrgSyncPage: FC = () => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
onSyncFieldChange={handleSyncFieldChange}
|
error={settingsQuery.error || fieldValuesQuery.error}
|
||||||
claimFieldValues={claimFieldValues}
|
|
||||||
error={error || patchOrganizationSyncSettingsMutation.error}
|
|
||||||
/>
|
/>
|
||||||
</Cond>
|
</Cond>
|
||||||
</ChooseOne>
|
</ChooseOne>
|
||||||
|
@ -5,12 +5,19 @@ import {
|
|||||||
MockOrganization2,
|
MockOrganization2,
|
||||||
MockOrganizationSyncSettings,
|
MockOrganizationSyncSettings,
|
||||||
MockOrganizationSyncSettings2,
|
MockOrganizationSyncSettings2,
|
||||||
|
MockOrganizationSyncSettingsEmpty,
|
||||||
} from "testHelpers/entities";
|
} from "testHelpers/entities";
|
||||||
import { IdpOrgSyncPageView } from "./IdpOrgSyncPageView";
|
import { IdpOrgSyncPageView } from "./IdpOrgSyncPageView";
|
||||||
|
|
||||||
const meta: Meta<typeof IdpOrgSyncPageView> = {
|
const meta: Meta<typeof IdpOrgSyncPageView> = {
|
||||||
title: "pages/IdpOrgSyncPageView",
|
title: "pages/IdpOrgSyncPageView",
|
||||||
component: IdpOrgSyncPageView,
|
component: IdpOrgSyncPageView,
|
||||||
|
args: {
|
||||||
|
organizationSyncSettings: MockOrganizationSyncSettings2,
|
||||||
|
claimFieldValues: Object.keys(MockOrganizationSyncSettings2.mapping),
|
||||||
|
organizations: [MockOrganization, MockOrganization2],
|
||||||
|
error: undefined,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
@ -18,35 +25,29 @@ type Story = StoryObj<typeof IdpOrgSyncPageView>;
|
|||||||
|
|
||||||
export const Empty: Story = {
|
export const Empty: Story = {
|
||||||
args: {
|
args: {
|
||||||
organizationSyncSettings: {
|
organizationSyncSettings: MockOrganizationSyncSettingsEmpty,
|
||||||
field: "",
|
|
||||||
mapping: {},
|
|
||||||
organization_assign_default: true,
|
|
||||||
},
|
|
||||||
organizations: [MockOrganization, MockOrganization2],
|
|
||||||
error: undefined,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Default: Story = {
|
export const Default: Story = {};
|
||||||
args: {
|
|
||||||
organizationSyncSettings: MockOrganizationSyncSettings2,
|
|
||||||
organizations: [MockOrganization, MockOrganization2],
|
|
||||||
error: undefined,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export const HasError: Story = {
|
export const HasError: Story = {
|
||||||
args: {
|
args: {
|
||||||
...Default.args,
|
|
||||||
error: "This is a test error",
|
error: "This is a test error",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MissingGroups: Story = {
|
export const MissingGroups: Story = {
|
||||||
args: {
|
args: {
|
||||||
...Default.args,
|
|
||||||
organizationSyncSettings: MockOrganizationSyncSettings,
|
organizationSyncSettings: MockOrganizationSyncSettings,
|
||||||
|
claimFieldValues: Object.keys(MockOrganizationSyncSettings.mapping),
|
||||||
|
organizations: [],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const MissingClaim: Story = {
|
||||||
|
args: {
|
||||||
|
claimFieldValues: [],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { TooltipProvider } from "@radix-ui/react-tooltip";
|
||||||
import type {
|
import type {
|
||||||
Organization,
|
Organization,
|
||||||
OrganizationSyncSettings,
|
OrganizationSyncSettings,
|
||||||
@ -28,12 +29,8 @@ import {
|
|||||||
MultiSelectCombobox,
|
MultiSelectCombobox,
|
||||||
type Option,
|
type Option,
|
||||||
} from "components/MultiSelectCombobox/MultiSelectCombobox";
|
} from "components/MultiSelectCombobox/MultiSelectCombobox";
|
||||||
import {
|
|
||||||
Popover,
|
|
||||||
PopoverContent,
|
|
||||||
PopoverTrigger,
|
|
||||||
} from "components/Popover/Popover";
|
|
||||||
import { Spinner } from "components/Spinner/Spinner";
|
import { Spinner } from "components/Spinner/Spinner";
|
||||||
|
import { Stack } from "components/Stack/Stack";
|
||||||
import { Switch } from "components/Switch/Switch";
|
import { Switch } from "components/Switch/Switch";
|
||||||
import {
|
import {
|
||||||
Table,
|
Table,
|
||||||
@ -42,10 +39,14 @@ import {
|
|||||||
TableHeader,
|
TableHeader,
|
||||||
TableRow,
|
TableRow,
|
||||||
} from "components/Table/Table";
|
} from "components/Table/Table";
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from "components/Tooltip/Tooltip";
|
||||||
import { useFormik } from "formik";
|
import { useFormik } from "formik";
|
||||||
import { Check, ChevronDown, CornerDownLeft, Plus, Trash } from "lucide-react";
|
import { Plus, Trash, TriangleAlert } from "lucide-react";
|
||||||
import { type FC, type KeyboardEventHandler, useId, useState } from "react";
|
import { type FC, type KeyboardEventHandler, useId, useState } from "react";
|
||||||
import { cn } from "utils/cn";
|
|
||||||
import { docs } from "utils/docs";
|
import { docs } from "utils/docs";
|
||||||
import { isUUID } from "utils/uuid";
|
import { isUUID } from "utils/uuid";
|
||||||
import * as Yup from "yup";
|
import * as Yup from "yup";
|
||||||
@ -53,10 +54,10 @@ import { OrganizationPills } from "./OrganizationPills";
|
|||||||
|
|
||||||
interface IdpSyncPageViewProps {
|
interface IdpSyncPageViewProps {
|
||||||
organizationSyncSettings: OrganizationSyncSettings | undefined;
|
organizationSyncSettings: OrganizationSyncSettings | undefined;
|
||||||
|
claimFieldValues: readonly string[] | undefined;
|
||||||
organizations: readonly Organization[];
|
organizations: readonly Organization[];
|
||||||
onSubmit: (data: OrganizationSyncSettings) => void;
|
onSubmit: (data: OrganizationSyncSettings) => void;
|
||||||
onSyncFieldChange: (value: string) => void;
|
onSyncFieldChange: (value: string) => void;
|
||||||
claimFieldValues: string[] | undefined;
|
|
||||||
error?: unknown;
|
error?: unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,10 +85,10 @@ const validationSchema = Yup.object({
|
|||||||
|
|
||||||
export const IdpOrgSyncPageView: FC<IdpSyncPageViewProps> = ({
|
export const IdpOrgSyncPageView: FC<IdpSyncPageViewProps> = ({
|
||||||
organizationSyncSettings,
|
organizationSyncSettings,
|
||||||
|
claimFieldValues,
|
||||||
organizations,
|
organizations,
|
||||||
onSubmit,
|
onSubmit,
|
||||||
onSyncFieldChange,
|
onSyncFieldChange,
|
||||||
claimFieldValues,
|
|
||||||
error,
|
error,
|
||||||
}) => {
|
}) => {
|
||||||
const form = useFormik<OrganizationSyncSettings>({
|
const form = useFormik<OrganizationSyncSettings>({
|
||||||
@ -313,6 +314,7 @@ export const IdpOrgSyncPageView: FC<IdpSyncPageViewProps> = ({
|
|||||||
idpOrg={idpOrg}
|
idpOrg={idpOrg}
|
||||||
coderOrgs={getOrgNames(organizations)}
|
coderOrgs={getOrgNames(organizations)}
|
||||||
onDelete={handleDelete}
|
onDelete={handleDelete}
|
||||||
|
exists={claimFieldValues?.includes(idpOrg)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</IdpMappingTable>
|
</IdpMappingTable>
|
||||||
@ -398,18 +400,43 @@ const IdpMappingTable: FC<IdpMappingTableProps> = ({ isEmpty, children }) => {
|
|||||||
|
|
||||||
interface OrganizationRowProps {
|
interface OrganizationRowProps {
|
||||||
idpOrg: string;
|
idpOrg: string;
|
||||||
|
exists: boolean | undefined;
|
||||||
coderOrgs: readonly string[];
|
coderOrgs: readonly string[];
|
||||||
onDelete: (idpOrg: string) => void;
|
onDelete: (idpOrg: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OrganizationRow: FC<OrganizationRowProps> = ({
|
const OrganizationRow: FC<OrganizationRowProps> = ({
|
||||||
idpOrg,
|
idpOrg,
|
||||||
|
exists = true,
|
||||||
coderOrgs,
|
coderOrgs,
|
||||||
onDelete,
|
onDelete,
|
||||||
}) => {
|
}) => {
|
||||||
return (
|
return (
|
||||||
<TableRow data-testid={`idp-org-${idpOrg}`}>
|
<TableRow data-testid={`idp-org-${idpOrg}`}>
|
||||||
<TableCell>{idpOrg}</TableCell>
|
<TableCell>
|
||||||
|
<div className="flex flex-row items-center gap-2 text-content-primary">
|
||||||
|
{idpOrg}
|
||||||
|
{!exists && (
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<TriangleAlert className="size-icon-xs cursor-pointer text-content-warning" />
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent
|
||||||
|
align="start"
|
||||||
|
alignOffset={-8}
|
||||||
|
sideOffset={8}
|
||||||
|
className="p-2 text-xs text-content-secondary max-w-sm"
|
||||||
|
>
|
||||||
|
This value has not be seen in the specified claim field
|
||||||
|
before. You might want to check your IdP configuration and
|
||||||
|
ensure that this value is not misspelled.
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<OrganizationPills organizations={coderOrgs} />
|
<OrganizationPills organizations={coderOrgs} />
|
||||||
</TableCell>
|
</TableCell>
|
||||||
|
@ -39,7 +39,7 @@ export const Section: FC<SectionProps> = ({
|
|||||||
<div css={styles.header}>
|
<div css={styles.header}>
|
||||||
<div>
|
<div>
|
||||||
{title && (
|
{title && (
|
||||||
<Stack direction={"row"} alignItems="center">
|
<Stack direction="row" alignItems="center">
|
||||||
<h4
|
<h4
|
||||||
css={{
|
css={{
|
||||||
fontSize: 24,
|
fontSize: 24,
|
||||||
|
@ -2720,6 +2720,13 @@ export const MockOrganizationSyncSettings2: TypesGen.OrganizationSyncSettings =
|
|||||||
organization_assign_default: true,
|
organization_assign_default: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const MockOrganizationSyncSettingsEmpty: TypesGen.OrganizationSyncSettings =
|
||||||
|
{
|
||||||
|
field: "",
|
||||||
|
mapping: {},
|
||||||
|
organization_assign_default: true,
|
||||||
|
};
|
||||||
|
|
||||||
export const MockGroup: TypesGen.Group = {
|
export const MockGroup: TypesGen.Group = {
|
||||||
id: "fbd2116a-8961-4954-87ae-e4575bd29ce0",
|
id: "fbd2116a-8961-4954-87ae-e4575bd29ce0",
|
||||||
name: "Front-End",
|
name: "Front-End",
|
||||||
|
@ -33,6 +33,7 @@ module.exports = {
|
|||||||
success: "hsl(var(--content-success))",
|
success: "hsl(var(--content-success))",
|
||||||
danger: "hsl(var(--content-danger))",
|
danger: "hsl(var(--content-danger))",
|
||||||
link: "hsl(var(--content-link))",
|
link: "hsl(var(--content-link))",
|
||||||
|
warning: "hsl(var(--content-warning))",
|
||||||
},
|
},
|
||||||
surface: {
|
surface: {
|
||||||
primary: "hsl(var(--surface-primary))",
|
primary: "hsl(var(--surface-primary))",
|
||||||
|
@ -7,9 +7,10 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/coder/retry"
|
"github.com/dblohm7/wingoes/com"
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
"github.com/tailscale/wireguard-go/tun"
|
||||||
"golang.org/x/sys/windows"
|
"golang.org/x/sys/windows"
|
||||||
|
"golang.org/x/sys/windows/svc"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
"golang.zx2c4.com/wintun"
|
"golang.zx2c4.com/wintun"
|
||||||
"tailscale.com/net/dns"
|
"tailscale.com/net/dns"
|
||||||
@ -21,11 +22,27 @@ import (
|
|||||||
|
|
||||||
"cdr.dev/slog"
|
"cdr.dev/slog"
|
||||||
"github.com/coder/coder/v2/tailnet"
|
"github.com/coder/coder/v2/tailnet"
|
||||||
|
"github.com/coder/retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
const tunName = "Coder"
|
const tunName = "Coder"
|
||||||
|
|
||||||
func GetNetworkingStack(t *Tunnel, _ *StartRequest, logger slog.Logger) (NetworkStack, error) {
|
func GetNetworkingStack(t *Tunnel, _ *StartRequest, logger slog.Logger) (NetworkStack, error) {
|
||||||
|
// Initialize COM process-wide so Tailscale can make calls to the windows
|
||||||
|
// network APIs to read/write adapter state.
|
||||||
|
comProcessType := com.ConsoleApp
|
||||||
|
isSvc, err := svc.IsWindowsService()
|
||||||
|
if err != nil {
|
||||||
|
return NetworkStack{}, xerrors.Errorf("svc.IsWindowsService failed: %w", err)
|
||||||
|
}
|
||||||
|
if isSvc {
|
||||||
|
comProcessType = com.Service
|
||||||
|
}
|
||||||
|
if err := com.StartRuntime(comProcessType); err != nil {
|
||||||
|
return NetworkStack{}, xerrors.Errorf("could not initialize COM: com.StartRuntime(%d): %w", comProcessType, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the name and GUID for the TUN interface.
|
||||||
tun.WintunTunnelType = tunName
|
tun.WintunTunnelType = tunName
|
||||||
guid, err := windows.GUIDFromString("{0ed1515d-04a4-4c46-abae-11ad07cf0e6d}")
|
guid, err := windows.GUIDFromString("{0ed1515d-04a4-4c46-abae-11ad07cf0e6d}")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user