diff --git a/.github/.linkspector.yml b/.github/.linkspector.yml
index 3e19913c4b..13a675813f 100644
--- a/.github/.linkspector.yml
+++ b/.github/.linkspector.yml
@@ -20,5 +20,6 @@ ignorePatterns:
- pattern: "www.emacswiki.org"
- pattern: "linux.die.net/man"
- pattern: "www.gnu.org"
+ - pattern: "wiki.ubuntu.com"
aliveStatusCodes:
- 200
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
index 68539f0f40..f9c5410df0 100644
--- a/.github/dependabot.yaml
+++ b/.github/dependabot.yaml
@@ -9,21 +9,6 @@ updates:
labels: []
commit-message:
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:
github-actions:
patterns:
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index ea23582c33..7e1d811e08 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -39,7 +39,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
# 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' }}
# steps:
# - name: Checkout
- # uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ # uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# with:
# 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
@@ -160,7 +160,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -232,7 +232,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -295,7 +295,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -336,7 +336,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -396,7 +396,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -452,7 +452,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -509,7 +509,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -546,7 +546,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -584,7 +584,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -632,7 +632,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -658,7 +658,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -690,7 +690,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
@@ -733,7 +733,7 @@ jobs:
- name: Upload Playwright Failed Tests
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:
name: failed-test-videos${{ matrix.variant.premium && '-premium' || '' }}
path: ./site/test-results/**/*.webm
@@ -741,7 +741,7 @@ jobs:
- name: Upload pprof dumps
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:
name: debug-pprof-dumps${{ matrix.variant.premium && '-premium' || '' }}
path: ./site/test-results/**/debug-pprof-*.txt
@@ -759,7 +759,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
# Required by Chromatic for build-over-build history, otherwise we
# only get 1 commit on shallow checkout.
@@ -836,7 +836,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
# 0 is required here for version.sh to work.
fetch-depth: 0
@@ -940,13 +940,9 @@ jobs:
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' }}
steps:
- - name: Harden Runner
- uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
- with:
- egress-policy: audit
-
+ # Harden Runner doesn't work on macOS
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -957,6 +953,11 @@ jobs:
echo "$(brew --prefix gnu-getopt)/bin" >> $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
uses: ./.github/actions/setup-go
@@ -999,7 +1000,7 @@ jobs:
- name: Upload build artifacts
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:
name: dylibs
path: |
@@ -1032,7 +1033,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -1139,7 +1140,7 @@ jobs:
- name: Upload build artifacts
if: github.ref == 'refs/heads/main'
- uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
+ uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: coder
path: |
@@ -1168,7 +1169,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -1230,7 +1231,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -1265,7 +1266,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
# We need golang to run the migration main.go
diff --git a/.github/workflows/docker-base.yaml b/.github/workflows/docker-base.yaml
index 7a5135a4cb..13e916629f 100644
--- a/.github/workflows/docker-base.yaml
+++ b/.github/workflows/docker-base.yaml
@@ -43,7 +43,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Docker login
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
diff --git a/.github/workflows/docs-ci.yaml b/.github/workflows/docs-ci.yaml
index 601f13e756..ef7114a8e2 100644
--- a/.github/workflows/docs-ci.yaml
+++ b/.github/workflows/docs-ci.yaml
@@ -20,12 +20,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: 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
with:
files: |
diff --git a/.github/workflows/dogfood.yaml b/.github/workflows/dogfood.yaml
index cdb026484d..71e9d6e969 100644
--- a/.github/workflows/dogfood.yaml
+++ b/.github/workflows/dogfood.yaml
@@ -32,7 +32,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Nix
uses: DeterminateSystems/nix-installer-action@e50d5f73bfe71c2dd0aa4218de8f4afa59f8f81d # v16
@@ -100,7 +100,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Terraform
uses: ./.github/actions/setup-tf
diff --git a/.github/workflows/nightly-gauntlet.yaml b/.github/workflows/nightly-gauntlet.yaml
index 2aba755daa..461c1979b3 100644
--- a/.github/workflows/nightly-gauntlet.yaml
+++ b/.github/workflows/nightly-gauntlet.yaml
@@ -31,7 +31,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
diff --git a/.github/workflows/pr-deploy.yaml b/.github/workflows/pr-deploy.yaml
index 89d1982222..4912593f8c 100644
--- a/.github/workflows/pr-deploy.yaml
+++ b/.github/workflows/pr-deploy.yaml
@@ -44,7 +44,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check if PR is open
id: check_pr
@@ -79,7 +79,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -223,7 +223,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -325,7 +325,7 @@ jobs:
kubectl create namespace "pr${{ env.PR_NUMBER }}"
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check and Create Certificate
if: needs.get_info.outputs.NEW == 'true' || github.event.inputs.deploy == 'true'
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 45dba12409..3a32b58f62 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -36,13 +36,9 @@ jobs:
build-dylib:
runs-on: ${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
steps:
- - name: Harden Runner
- uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
- with:
- egress-policy: audit
-
+ # Harden Runner doesn't work on macOS.
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -61,6 +57,11 @@ jobs:
echo "$(brew --prefix gnu-getopt)/bin" >> $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
uses: ./.github/actions/setup-go
@@ -100,7 +101,7 @@ jobs:
AC_CERTIFICATE_PASSWORD_FILE: /tmp/apple_cert_password.txt
- name: Upload build artifacts
- uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
+ uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: dylibs
path: |
@@ -134,7 +135,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -217,7 +218,7 @@ jobs:
# Necessary for signing Windows binaries.
- name: Setup Java
- uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0
+ uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
with:
distribution: "zulu"
java-version: "11.0"
@@ -484,7 +485,7 @@ jobs:
- name: Upload artifacts to actions (if dry-run)
if: ${{ inputs.dry_run }}
- uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
+ uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: release-artifacts
path: |
@@ -602,7 +603,7 @@ jobs:
GH_TOKEN: ${{ secrets.CDRCI_GITHUB_TOKEN }}
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -687,7 +688,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index d62069b39f..83e8efce4d 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -25,7 +25,7 @@ jobs:
egress-policy: audit
- name: "Checkout code"
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
@@ -39,7 +39,7 @@ jobs:
# Upload the results as artifacts.
- name: "Upload artifact"
- uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1
+ uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: SARIF file
path: results.sarif
diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml
index d0465b9a42..9e241d6e81 100644
--- a/.github/workflows/security.yaml
+++ b/.github/workflows/security.yaml
@@ -32,7 +32,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Go
uses: ./.github/actions/setup-go
@@ -72,7 +72,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
@@ -150,7 +150,7 @@ jobs:
category: "Trivy"
- 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:
name: trivy
path: trivy-results.sarif
diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml
index c96028b8a6..52507f16a9 100644
--- a/.github/workflows/stale.yaml
+++ b/.github/workflows/stale.yaml
@@ -23,7 +23,7 @@ jobs:
egress-policy: audit
- name: stale
- uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0
+ uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0
with:
stale-issue-label: "stale"
stale-pr-label: "stale"
@@ -101,7 +101,7 @@ jobs:
egress-policy: audit
- name: Checkout repository
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run delete-old-branches-action
uses: beatlabs/delete-old-branches-action@6e94df089372a619c01ae2c2f666bf474f890911 # v0.0.10
with:
diff --git a/.github/workflows/weekly-docs.yaml b/.github/workflows/weekly-docs.yaml
index 581b0126f1..d7e64b7946 100644
--- a/.github/workflows/weekly-docs.yaml
+++ b/.github/workflows/weekly-docs.yaml
@@ -26,7 +26,7 @@ jobs:
egress-policy: audit
- name: Checkout
- uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Check Markdown links
uses: umbrelladocs/action-linkspector@de84085e0f51452a470558693d7d308fbb2fa261 # v1.2.5
diff --git a/cli/ping.go b/cli/ping.go
index 0e219d5762..19191b9291 100644
--- a/cli/ping.go
+++ b/cli/ping.go
@@ -159,7 +159,7 @@ func (r *RootCmd) ping() *serpent.Command {
LocalNetInfo: ni,
Verbose: r.verbose,
PingP2P: didP2p,
- TroubleshootingURL: appearanceConfig.DocsURL + "/networking/troubleshooting",
+ TroubleshootingURL: appearanceConfig.DocsURL + "/admin/networking/troubleshooting",
}
awsRanges, err := cliutil.FetchAWSIPRanges(diagCtx, cliutil.AWSIPRangesURL)
diff --git a/cli/testdata/coder_provisioner_jobs_list_--help.golden b/cli/testdata/coder_provisioner_jobs_list_--help.golden
index 585e918c23..bd29b7560e 100644
--- a/cli/testdata/coder_provisioner_jobs_list_--help.golden
+++ b/cli/testdata/coder_provisioner_jobs_list_--help.golden
@@ -11,7 +11,7 @@ OPTIONS:
-O, --org string, $CODER_ORGANIZATION
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.
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
diff --git a/cli/testdata/coder_provisioner_jobs_list_--output_json.golden b/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
index a19683573b..9e1f56ba7b 100644
--- a/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
+++ b/cli/testdata/coder_provisioner_jobs_list_--output_json.golden
@@ -18,6 +18,12 @@
"template_version_id": "============[version ID]============"
},
"type": "template_version_import",
+ "metadata": {
+ "template_version_name": "===========[version name]===========",
+ "template_id": "===========[template ID]============",
+ "template_name": "test-template",
+ "template_display_name": ""
+ },
"organization_name": "Coder"
},
{
@@ -39,6 +45,14 @@
"workspace_build_id": "========[workspace build ID]========"
},
"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"
}
]
diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go
index dbace5445f..5afc914097 100644
--- a/coderd/apidoc/docs.go
+++ b/coderd/apidoc/docs.go
@@ -13226,6 +13226,9 @@ const docTemplate = `{
"input": {
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
},
+ "metadata": {
+ "$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
+ },
"organization_id": {
"type": "string",
"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": {
"type": "string",
"enum": [
diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json
index 31dd166505..2aaa3a1259 100644
--- a/coderd/apidoc/swagger.json
+++ b/coderd/apidoc/swagger.json
@@ -11945,6 +11945,9 @@
"input": {
"$ref": "#/definitions/codersdk.ProvisionerJobInput"
},
+ "metadata": {
+ "$ref": "#/definitions/codersdk.ProvisionerJobMetadata"
+ },
"organization_id": {
"type": "string",
"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": {
"type": "string",
"enum": [
diff --git a/coderd/database/dbmem/dbmem.go b/coderd/database/dbmem/dbmem.go
index 1a01800b92..ada4174a31 100644
--- a/coderd/database/dbmem/dbmem.go
+++ b/coderd/database/dbmem/dbmem.go
@@ -4176,6 +4176,45 @@ func (q *FakeQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePosition
QueuePosition: rowQP.QueuePosition,
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 {
var availableWorkers []database.ProvisionerDaemon
for _, daemon := range q.provisionerDaemons {
diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go
index e28b9881ab..4f255840ca 100644
--- a/coderd/database/queries.sql.go
+++ b/coderd/database/queries.sql.go
@@ -6431,13 +6431,29 @@ SELECT
AND pj.organization_id = pd.organization_id
AND pj.provisioner = ANY(pd.provisioners)
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
provisioner_jobs pj
LEFT JOIN
queue_position qp ON qp.id = pj.id
LEFT JOIN
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
($1::uuid IS NULL OR pj.organization_id = $1)
AND (COALESCE(array_length($2::uuid[], 1), 0) = 0 OR pj.id = ANY($2::uuid[]))
@@ -6445,7 +6461,13 @@ WHERE
GROUP BY
pj.id,
qp.queue_position,
- qs.count
+ qs.count,
+ tv.name,
+ t.id,
+ t.name,
+ t.display_name,
+ w.id,
+ w.name
ORDER BY
pj.created_at DESC
LIMIT
@@ -6460,10 +6482,16 @@ type GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerPar
}
type GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow struct {
- ProvisionerJob ProvisionerJob `db:"provisioner_job" json:"provisioner_job"`
- QueuePosition int64 `db:"queue_position" json:"queue_position"`
- QueueSize int64 `db:"queue_size" json:"queue_size"`
- AvailableWorkers []uuid.UUID `db:"available_workers" json:"available_workers"`
+ ProvisionerJob ProvisionerJob `db:"provisioner_job" json:"provisioner_job"`
+ QueuePosition int64 `db:"queue_position" json:"queue_position"`
+ QueueSize int64 `db:"queue_size" json:"queue_size"`
+ 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) {
@@ -6503,6 +6531,12 @@ func (q *sqlQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePositionA
&i.QueuePosition,
&i.QueueSize,
pq.Array(&i.AvailableWorkers),
+ &i.TemplateVersionName,
+ &i.TemplateID,
+ &i.TemplateName,
+ &i.TemplateDisplayName,
+ &i.WorkspaceID,
+ &i.WorkspaceName,
); err != nil {
return nil, err
}
diff --git a/coderd/database/queries/provisionerjobs.sql b/coderd/database/queries/provisionerjobs.sql
index e7078dcfbf..bac03f1b42 100644
--- a/coderd/database/queries/provisionerjobs.sql
+++ b/coderd/database/queries/provisionerjobs.sql
@@ -130,13 +130,29 @@ SELECT
AND pj.organization_id = pd.organization_id
AND pj.provisioner = ANY(pd.provisioners)
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
provisioner_jobs pj
LEFT JOIN
queue_position qp ON qp.id = pj.id
LEFT JOIN
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
(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[]))
@@ -144,7 +160,13 @@ WHERE
GROUP BY
pj.id,
qp.queue_position,
- qs.count
+ qs.count,
+ tv.name,
+ t.id,
+ t.name,
+ t.display_name,
+ w.id,
+ w.name
ORDER BY
pj.created_at DESC
LIMIT
diff --git a/coderd/provisionerjobs.go b/coderd/provisionerjobs.go
index 591c60855a..b8eccdb9c4 100644
--- a/coderd/provisionerjobs.go
+++ b/coderd/provisionerjobs.go
@@ -101,7 +101,7 @@ func (api *API) handleAuthAndFetchProvisionerJobs(rw http.ResponseWriter, r *htt
qp := r.URL.Query()
p := httpapi.NewQueryParamParser()
- limit := p.PositiveInt32(qp, 0, "limit")
+ limit := p.PositiveInt32(qp, 50, "limit")
status := p.Strings(qp, nil, "status")
p.ErrorExcessParams(qp)
if len(p.Errors) > 0 {
@@ -388,6 +388,16 @@ func convertProvisionerJobWithQueuePosition(pj database.GetProvisionerJobsByOrga
QueueSize: pj.QueueSize,
})
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
}
diff --git a/coderd/provisionerjobs_test.go b/coderd/provisionerjobs_test.go
index a8fd4f2a96..ba5f31e689 100644
--- a/coderd/provisionerjobs_test.go
+++ b/coderd/provisionerjobs_test.go
@@ -8,6 +8,7 @@ import (
"time"
"github.com/google/uuid"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -63,15 +64,54 @@ func TestProvisionerJobs(t *testing.T) {
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.Parallel()
- t.Run("OK", func(t *testing.T) {
+ t.Run("Workspace", 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, job.ID)
- require.NoError(t, err)
- require.Equal(t, job.ID, job2.ID)
+ 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, job.ID)
+ require.NoError(t, err)
+ 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.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()
ctx := testutil.Context(t, testutil.WaitMedium)
jobs, err := templateAdminClient.OrganizationProvisionerJobs(ctx, owner.OrganizationID, nil)
require.NoError(t, err)
- require.Len(t, jobs, 3)
+ require.Len(t, jobs, 50)
})
t.Run("Status", func(t *testing.T) {
diff --git a/codersdk/provisionerdaemons.go b/codersdk/provisionerdaemons.go
index 98c3252dc8..5a93ba9fca 100644
--- a/codersdk/provisionerdaemons.go
+++ b/codersdk/provisionerdaemons.go
@@ -131,6 +131,16 @@ type ProvisionerJobInput struct {
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.
type ProvisionerJobType string
@@ -155,23 +165,24 @@ func JobIsMissingParameterErrorCode(code JobErrorCode) bool {
// ProvisionerJob describes the job executed by the provisioning daemon.
type ProvisionerJob struct {
- ID uuid.UUID `json:"id" format:"uuid" table:"id"`
- CreatedAt time.Time `json:"created_at" format:"date-time" table:"created at"`
- StartedAt *time.Time `json:"started_at,omitempty" format:"date-time" table:"started at"`
- CompletedAt *time.Time `json:"completed_at,omitempty" format:"date-time" table:"completed at"`
- CanceledAt *time.Time `json:"canceled_at,omitempty" format:"date-time" table:"canceled at"`
- Error string `json:"error,omitempty" table:"error"`
- ErrorCode JobErrorCode `json:"error_code,omitempty" enums:"REQUIRED_TEMPLATE_VARIABLES" table:"error code"`
- Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"`
- WorkerID *uuid.UUID `json:"worker_id,omitempty" format:"uuid" table:"worker id"`
- FileID uuid.UUID `json:"file_id" format:"uuid" table:"file id"`
- Tags map[string]string `json:"tags" table:"tags"`
- QueuePosition int `json:"queue_position" table:"queue position"`
- QueueSize int `json:"queue_size" table:"queue size"`
- OrganizationID uuid.UUID `json:"organization_id" format:"uuid" table:"organization id"`
- Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
- Type ProvisionerJobType `json:"type" table:"type"`
- AvailableWorkers []uuid.UUID `json:"available_workers,omitempty" format:"uuid" table:"available workers"`
+ ID uuid.UUID `json:"id" format:"uuid" table:"id"`
+ CreatedAt time.Time `json:"created_at" format:"date-time" table:"created at"`
+ StartedAt *time.Time `json:"started_at,omitempty" format:"date-time" table:"started at"`
+ CompletedAt *time.Time `json:"completed_at,omitempty" format:"date-time" table:"completed at"`
+ CanceledAt *time.Time `json:"canceled_at,omitempty" format:"date-time" table:"canceled at"`
+ Error string `json:"error,omitempty" table:"error"`
+ ErrorCode JobErrorCode `json:"error_code,omitempty" enums:"REQUIRED_TEMPLATE_VARIABLES" table:"error code"`
+ Status ProvisionerJobStatus `json:"status" enums:"pending,running,succeeded,canceling,canceled,failed" table:"status"`
+ WorkerID *uuid.UUID `json:"worker_id,omitempty" format:"uuid" table:"worker id"`
+ FileID uuid.UUID `json:"file_id" format:"uuid" table:"file id"`
+ Tags map[string]string `json:"tags" table:"tags"`
+ QueuePosition int `json:"queue_position" table:"queue position"`
+ QueueSize int `json:"queue_size" table:"queue size"`
+ OrganizationID uuid.UUID `json:"organization_id" format:"uuid" table:"organization id"`
+ Input ProvisionerJobInput `json:"input" table:"input,recursive_inline"`
+ Type ProvisionerJobType `json:"type" table:"type"`
+ 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.
diff --git a/docs/admin/users/organizations.md b/docs/admin/users/organizations.md
index e91c8ee9fd..5a4b805f7c 100644
--- a/docs/admin/users/organizations.md
+++ b/docs/admin/users/organizations.md
@@ -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
- [Organizations - best practices](../../tutorials/best-practices/organizations.md)
diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md
index 7ca8670767..04e136f16b 100644
--- a/docs/install/kubernetes.md
+++ b/docs/install/kubernetes.md
@@ -104,8 +104,8 @@ coder:
# (Optional) For production deployments the access URL should be set.
# If you're just trying Coder, access the dashboard via the service IP.
- - name: CODER_ACCESS_URL
- value: "https://coder.example.com"
+ # - name: CODER_ACCESS_URL
+ # value: "https://coder.example.com"
#tls:
# secretNames:
diff --git a/docs/install/other/index.md b/docs/install/other/index.md
index 3809d86812..f727e5c34b 100644
--- a/docs/install/other/index.md
+++ b/docs/install/other/index.md
@@ -5,8 +5,6 @@ welcome!
| 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) |
| 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) |
diff --git a/docs/manifest.json b/docs/manifest.json
index 871f300f36..3b49c2321c 100644
--- a/docs/manifest.json
+++ b/docs/manifest.json
@@ -291,7 +291,7 @@
{
"title": "Organizations",
"path": "./admin/users/organizations.md",
- "state": ["premium", "beta"]
+ "state": ["premium"]
},
{
"title": "Quotas",
diff --git a/docs/reference/api/builds.md b/docs/reference/api/builds.md
index 8c17b95a4b..73fd35bb4f 100644
--- a/docs/reference/api/builds.md
+++ b/docs/reference/api/builds.md
@@ -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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -1363,6 +1395,13 @@ Status Code **200**
| `»»» error` | string | false | | |
| `»»» template_version_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 | | |
| `»» queue_position` | 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",
"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",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/organizations.md b/docs/reference/api/organizations.md
index 32789743af..52442b6258 100644
--- a/docs/reference/api/organizations.md
+++ b/docs/reference/api/organizations.md
@@ -405,6 +405,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -430,30 +438,37 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|--------------------------|--------------------------------------------------------------------------|----------|--------------|-------------|
-| `[array item]` | array | false | | |
-| `» available_workers` | array | false | | |
-| `» canceled_at` | string(date-time) | false | | |
-| `» completed_at` | string(date-time) | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» error` | string | false | | |
-| `» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `» file_id` | string(uuid) | false | | |
-| `» id` | string(uuid) | false | | |
-| `» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»» error` | string | false | | |
-| `»» template_version_id` | string(uuid) | false | | |
-| `»» workspace_build_id` | string(uuid) | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» queue_position` | integer | false | | |
-| `» queue_size` | integer | false | | |
-| `» started_at` | string(date-time) | false | | |
-| `» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `» tags` | object | false | | |
-| `»» [any property]` | string | false | | |
-| `» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `» worker_id` | string(uuid) | false | | |
+| Name | Type | Required | Restrictions | Description |
+|----------------------------|------------------------------------------------------------------------------|----------|--------------|-------------|
+| `[array item]` | array | false | | |
+| `» available_workers` | array | false | | |
+| `» canceled_at` | string(date-time) | false | | |
+| `» completed_at` | string(date-time) | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» error` | string | false | | |
+| `» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `» file_id` | string(uuid) | false | | |
+| `» id` | string(uuid) | false | | |
+| `» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»» error` | string | false | | |
+| `»» template_version_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 | | |
+| `» queue_position` | integer | false | | |
+| `» queue_size` | integer | false | | |
+| `» started_at` | string(date-time) | false | | |
+| `» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `» tags` | object | false | | |
+| `»» [any property]` | string | false | | |
+| `» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `» worker_id` | string(uuid) | false | | |
#### Enumerated Values
@@ -513,6 +528,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/provisi
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/schemas.md b/docs/reference/api/schemas.md
index 1b3adb8f14..ac402d1f9f 100644
--- a/docs/reference/api/schemas.md
+++ b/docs/reference/api/schemas.md
@@ -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",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -4652,26 +4660,27 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
### Properties
-| Name | Type | Required | Restrictions | Description |
-|---------------------|----------------------------------------------------------------|----------|--------------|-------------|
-| `available_workers` | array of string | false | | |
-| `canceled_at` | string | false | | |
-| `completed_at` | string | false | | |
-| `created_at` | string | false | | |
-| `error` | string | false | | |
-| `error_code` | [codersdk.JobErrorCode](#codersdkjoberrorcode) | false | | |
-| `file_id` | string | false | | |
-| `id` | string | false | | |
-| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
-| `organization_id` | string | false | | |
-| `queue_position` | integer | false | | |
-| `queue_size` | integer | false | | |
-| `started_at` | string | false | | |
-| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | |
-| `tags` | object | false | | |
-| » `[any property]` | string | false | | |
-| `type` | [codersdk.ProvisionerJobType](#codersdkprovisionerjobtype) | false | | |
-| `worker_id` | string | false | | |
+| Name | Type | Required | Restrictions | Description |
+|---------------------|--------------------------------------------------------------------|----------|--------------|-------------|
+| `available_workers` | array of string | false | | |
+| `canceled_at` | string | false | | |
+| `completed_at` | string | false | | |
+| `created_at` | string | false | | |
+| `error` | string | false | | |
+| `error_code` | [codersdk.JobErrorCode](#codersdkjoberrorcode) | false | | |
+| `file_id` | string | false | | |
+| `id` | string | false | | |
+| `input` | [codersdk.ProvisionerJobInput](#codersdkprovisionerjobinput) | false | | |
+| `metadata` | [codersdk.ProvisionerJobMetadata](#codersdkprovisionerjobmetadata) | false | | |
+| `organization_id` | string | false | | |
+| `queue_position` | integer | false | | |
+| `queue_size` | integer | false | | |
+| `started_at` | string | false | | |
+| `status` | [codersdk.ProvisionerJobStatus](#codersdkprovisionerjobstatus) | false | | |
+| `tags` | object | false | | |
+| » `[any property]` | string | false | | |
+| `type` | [codersdk.ProvisionerJobType](#codersdkprovisionerjobtype) | false | | |
+| `worker_id` | string | false | | |
#### Enumerated Values
@@ -4737,6 +4746,30 @@ Git clone makes use of this by parsing the URL from: 'Username for "https://gith
| `log_level` | `warn` |
| `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
```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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/templates.md b/docs/reference/api/templates.md
index a0b9d4b430..b5c1221412 100644
--- a/docs/reference/api/templates.md
+++ b/docs/reference/api/templates.md
@@ -462,6 +462,14 @@ curl -X GET http://coder-server:8080/api/v2/organizations/{organization}/templat
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -1242,49 +1274,56 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions \
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `[array item]` | array | false | | |
-| `» archived` | boolean | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
-| `»» avatar_url` | string(uri) | false | | |
-| `»» id` | string(uuid) | true | | |
-| `»» username` | string | true | | |
-| `» id` | string(uuid) | false | | |
-| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
-| `»» available_workers` | array | false | | |
-| `»» canceled_at` | string(date-time) | false | | |
-| `»» completed_at` | string(date-time) | false | | |
-| `»» created_at` | string(date-time) | false | | |
-| `»» error` | string | false | | |
-| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `»» file_id` | string(uuid) | false | | |
-| `»» id` | string(uuid) | false | | |
-| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»»» error` | string | false | | |
-| `»»» template_version_id` | string(uuid) | false | | |
-| `»»» workspace_build_id` | string(uuid) | false | | |
-| `»» organization_id` | string(uuid) | false | | |
-| `»» queue_position` | integer | false | | |
-| `»» queue_size` | integer | false | | |
-| `»» started_at` | string(date-time) | false | | |
-| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `»» tags` | object | false | | |
-| `»»» [any property]` | string | false | | |
-| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `»» worker_id` | string(uuid) | false | | |
-| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
-| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
-| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
-| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
-| `» message` | string | false | | |
-| `» name` | string | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» readme` | string | false | | |
-| `» template_id` | string(uuid) | false | | |
-| `» updated_at` | string(date-time) | false | | |
-| `» warnings` | array | false | | |
+| Name | Type | Required | Restrictions | Description |
+|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `[array item]` | array | false | | |
+| `» archived` | boolean | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
+| `»» avatar_url` | string(uri) | false | | |
+| `»» id` | string(uuid) | true | | |
+| `»» username` | string | true | | |
+| `» id` | string(uuid) | false | | |
+| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
+| `»» available_workers` | array | false | | |
+| `»» canceled_at` | string(date-time) | false | | |
+| `»» completed_at` | string(date-time) | false | | |
+| `»» created_at` | string(date-time) | false | | |
+| `»» error` | string | false | | |
+| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `»» file_id` | string(uuid) | false | | |
+| `»» id` | string(uuid) | false | | |
+| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»»» error` | string | false | | |
+| `»»» template_version_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 | | |
+| `»» queue_position` | integer | false | | |
+| `»» queue_size` | integer | false | | |
+| `»» started_at` | string(date-time) | false | | |
+| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `»» tags` | object | false | | |
+| `»»» [any property]` | string | false | | |
+| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `»» worker_id` | string(uuid) | false | | |
+| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
+| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
+| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
+| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
+| `» message` | string | false | | |
+| `» name` | string | false | | |
+| `» organization_id` | string(uuid) | false | | |
+| `» readme` | string | false | | |
+| `» template_id` | string(uuid) | false | | |
+| `» updated_at` | string(date-time) | false | | |
+| `» warnings` | array | false | | |
#### Enumerated Values
@@ -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",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -1502,49 +1549,56 @@ curl -X GET http://coder-server:8080/api/v2/templates/{template}/versions/{templ
Status Code **200**
-| Name | Type | Required | Restrictions | Description |
-|---------------------------|--------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `[array item]` | array | false | | |
-| `» archived` | boolean | false | | |
-| `» created_at` | string(date-time) | false | | |
-| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
-| `»» avatar_url` | string(uri) | false | | |
-| `»» id` | string(uuid) | true | | |
-| `»» username` | string | true | | |
-| `» id` | string(uuid) | false | | |
-| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
-| `»» available_workers` | array | false | | |
-| `»» canceled_at` | string(date-time) | false | | |
-| `»» completed_at` | string(date-time) | false | | |
-| `»» created_at` | string(date-time) | false | | |
-| `»» error` | string | false | | |
-| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
-| `»» file_id` | string(uuid) | false | | |
-| `»» id` | string(uuid) | false | | |
-| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
-| `»»» error` | string | false | | |
-| `»»» template_version_id` | string(uuid) | false | | |
-| `»»» workspace_build_id` | string(uuid) | false | | |
-| `»» organization_id` | string(uuid) | false | | |
-| `»» queue_position` | integer | false | | |
-| `»» queue_size` | integer | false | | |
-| `»» started_at` | string(date-time) | false | | |
-| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
-| `»» tags` | object | false | | |
-| `»»» [any property]` | string | false | | |
-| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
-| `»» worker_id` | string(uuid) | false | | |
-| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
-| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
-| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
-| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
-| `» message` | string | false | | |
-| `» name` | string | false | | |
-| `» organization_id` | string(uuid) | false | | |
-| `» readme` | string | false | | |
-| `» template_id` | string(uuid) | false | | |
-| `» updated_at` | string(date-time) | false | | |
-| `» warnings` | array | false | | |
+| Name | Type | Required | Restrictions | Description |
+|-----------------------------|------------------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `[array item]` | array | false | | |
+| `» archived` | boolean | false | | |
+| `» created_at` | string(date-time) | false | | |
+| `» created_by` | [codersdk.MinimalUser](schemas.md#codersdkminimaluser) | false | | |
+| `»» avatar_url` | string(uri) | false | | |
+| `»» id` | string(uuid) | true | | |
+| `»» username` | string | true | | |
+| `» id` | string(uuid) | false | | |
+| `» job` | [codersdk.ProvisionerJob](schemas.md#codersdkprovisionerjob) | false | | |
+| `»» available_workers` | array | false | | |
+| `»» canceled_at` | string(date-time) | false | | |
+| `»» completed_at` | string(date-time) | false | | |
+| `»» created_at` | string(date-time) | false | | |
+| `»» error` | string | false | | |
+| `»» error_code` | [codersdk.JobErrorCode](schemas.md#codersdkjoberrorcode) | false | | |
+| `»» file_id` | string(uuid) | false | | |
+| `»» id` | string(uuid) | false | | |
+| `»» input` | [codersdk.ProvisionerJobInput](schemas.md#codersdkprovisionerjobinput) | false | | |
+| `»»» error` | string | false | | |
+| `»»» template_version_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 | | |
+| `»» queue_position` | integer | false | | |
+| `»» queue_size` | integer | false | | |
+| `»» started_at` | string(date-time) | false | | |
+| `»» status` | [codersdk.ProvisionerJobStatus](schemas.md#codersdkprovisionerjobstatus) | false | | |
+| `»» tags` | object | false | | |
+| `»»» [any property]` | string | false | | |
+| `»» type` | [codersdk.ProvisionerJobType](schemas.md#codersdkprovisionerjobtype) | false | | |
+| `»» worker_id` | string(uuid) | false | | |
+| `» matched_provisioners` | [codersdk.MatchedProvisioners](schemas.md#codersdkmatchedprovisioners) | false | | |
+| `»» available` | integer | false | | Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped. |
+| `»» count` | integer | false | | Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags. |
+| `»» most_recently_seen` | string(date-time) | false | | Most recently seen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null. |
+| `» message` | string | false | | |
+| `» name` | string | false | | |
+| `» organization_id` | string(uuid) | false | | |
+| `» readme` | string | false | | |
+| `» template_id` | string(uuid) | false | | |
+| `» updated_at` | string(date-time) | false | | |
+| `» warnings` | array | false | | |
#### Enumerated Values
@@ -1612,6 +1666,14 @@ curl -X GET http://coder-server:8080/api/v2/templateversions/{templateversion} \
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/api/workspaces.md b/docs/reference/api/workspaces.md
index e39e553927..680dec178b 100644
--- a/docs/reference/api/workspaces.md
+++ b/docs/reference/api/workspaces.md
@@ -91,6 +91,14 @@ of the template will be used.
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
@@ -597,6 +613,14 @@ of the template will be used.
"template_version_id": "0ba39c92-1f1b-4c32-aa3e-9925d7713eb1",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 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",
"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",
"queue_position": 0,
"queue_size": 0,
diff --git a/docs/reference/cli/provisioner_jobs_list.md b/docs/reference/cli/provisioner_jobs_list.md
index 03e187b1c6..ed16448459 100644
--- a/docs/reference/cli/provisioner_jobs_list.md
+++ b/docs/reference/cli/provisioner_jobs_list.md
@@ -45,10 +45,10 @@ Select which organization (uuid or name) to use.
### -c, --column
-| | |
-|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Type | [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
|
+| | |
+|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Type | [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.
diff --git a/docs/tutorials/best-practices/organizations.md b/docs/tutorials/best-practices/organizations.md
index 5771df3e0b..7228f8a300 100644
--- a/docs/tutorials/best-practices/organizations.md
+++ b/docs/tutorials/best-practices/organizations.md
@@ -1,7 +1,5 @@
# Organizations - best practices
-December 9, 2024
-
---
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.
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)
## Identity Provider (SSO) Sync
diff --git a/docs/user-guides/workspace-access/zed.md b/docs/user-guides/workspace-access/zed.md
index 14a02e08a6..2bcb4f12a2 100644
--- a/docs/user-guides/workspace-access/zed.md
+++ b/docs/user-guides/workspace-access/zed.md
@@ -27,11 +27,6 @@ Use the Coder CLI to log in and configure SSH, then connect to your workspace wi
### 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
Windows installer (`.msi`) or standalone binary (`.exe`).
diff --git a/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden b/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
index 585e918c23..bd29b7560e 100644
--- a/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
+++ b/enterprise/cli/testdata/coder_provisioner_jobs_list_--help.golden
@@ -11,7 +11,7 @@ OPTIONS:
-O, --org string, $CODER_ORGANIZATION
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.
-l, --limit int, $CODER_PROVISIONER_JOB_LIST_LIMIT (default: 50)
diff --git a/go.mod b/go.mod
index ca15ea8d31..9aa8df2514 100644
--- a/go.mod
+++ b/go.mod
@@ -71,6 +71,7 @@ require (
github.com/adrg/xdg v0.5.0
github.com/ammario/tlru v0.4.0
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/awalterschulze/gographviz v2.0.3+incompatible
github.com/aws/smithy-go v1.22.2
@@ -101,6 +102,7 @@ require (
github.com/creack/pty v1.1.21
github.com/dave/dst v0.27.2
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/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21
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/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a
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/pion/udp v0.1.4
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
@@ -174,13 +176,14 @@ require (
github.com/unrolled/secure v1.17.0
github.com/valyala/fasthttp v1.58.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.nhat.io/otelsql v0.15.0
- go.opentelemetry.io/otel v1.33.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0
- go.opentelemetry.io/otel/sdk v1.33.0
- go.opentelemetry.io/otel/trace v1.33.0
+ go.opentelemetry.io/otel v1.34.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0
+ go.opentelemetry.io/otel/sdk v1.34.0
+ go.opentelemetry.io/otel/trace v1.34.0
go.uber.org/atomic v1.11.0
go.uber.org/goleak v1.3.1-0.20240429205332-517bace7cc29
go.uber.org/mock v0.5.0
@@ -189,10 +192,10 @@ require (
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa
golang.org/x/mod v0.23.0
golang.org/x/net v0.34.0
- golang.org/x/oauth2 v0.25.0
- golang.org/x/sync v0.10.0
- golang.org/x/sys v0.29.1-0.20250107080300-1c14dcadc3ab
- golang.org/x/term v0.28.0
+ golang.org/x/oauth2 v0.26.0
+ golang.org/x/sync v0.11.0
+ golang.org/x/sys v0.30.0
+ golang.org/x/term v0.29.0
golang.org/x/text v0.21.0 // indirect
golang.org/x/tools v0.29.0
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/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/proto 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/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/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/KyleBanks/depth v1.2.1 // 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/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // 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/armon/go-radix v1.0.1-0.20221118154546-54df44f2176c // indirect
github.com/atotto/clipboard v0.1.4 // indirect
@@ -257,12 +268,14 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/bep/godartsass/v2 v2.3.2 // 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/term v0.2.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/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/dlclark/regexp2 v1.11.4 // 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/godbus/dbus/v5 v5.1.0 // 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/protobuf v1.5.4 // 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/nftables v0.2.0 // 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/gorilla/css v1.0.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/go-cleanhttp v0.5.2 // 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/native v1.1.1-0.20230202152459-5c7d0dd6ab86 // 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/kr/fs v0.1.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/go-urn v1.4.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/mattn/go-colorable v0.1.13 // 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/moby/docker-image-spec v1.3.1 // 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/cancelreader v0.2.2 // 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/pkg/errors v0.9.1 // 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/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // 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/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // 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/spaolacci/murmur3 v1.1.0 // 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/goupnp v1.0.1-0.20210804011211-c64d0f06ea05 // indirect
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/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/tdewolff/parse/v2 v2.7.15 // indirect
github.com/tdewolff/test v1.0.11-0.20240106005702-7de5f7df4739 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty 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/vishvananda/netlink v1.2.1-beta.2 // 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/yuin/goldmark v1.7.8 // 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/zeebo/errs v1.3.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/instrumentation/net/http/otelhttp v0.58.0 // indirect
- go.opentelemetry.io/otel/metric v1.33.0 // indirect
- go.opentelemetry.io/proto/otlp v1.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
+ go.opentelemetry.io/otel/metric v1.34.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
golang.org/x/time v0.9.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2
@@ -428,48 +459,11 @@ require (
golang.zx2c4.com/wireguard/windows v0.5.3 // indirect
google.golang.org/appengine v1.6.8 // 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
+ gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
howett.net/plist v1.0.0 // indirect
kernel.org/pub/linux/libs/security/libcap/psx v1.2.73 // 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
-)
diff --git a/go.sum b/go.sum
index f60250d2e0..fbde404c51 100644
--- a/go.sum
+++ b/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/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/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.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
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/flog v1.1.0 h1:kbAes1ai8fIS5OeV+QAnKBQE22ty1jRF/mcAwHpLBa4=
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/go.mod h1:rOLFDDVKVFiDqZFXoteXc97YXx7kFi9kYqR+2ETPkLQ=
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/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/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
-github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
+github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII=
+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/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
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.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/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg=
-github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw=
-github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
-github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
+github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e h1:L+XrFvD0vBIBm+Wf9sFN6aU395t7JROoai0qXZraA4U=
+github.com/dblohm7/wingoes v0.0.0-20240820181039-f2b84150679e/go.mod h1:SUxUaAK/0UG5lYyZR1L1nC4AaYYvSSYTWQSH3FPcxKU=
+github.com/dgraph-io/badger/v4 v4.5.1 h1:7DCIXrQjo1LKmM96YD+hLVJ2EEsyyoWxJfpdd56HLps=
+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-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
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.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
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/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
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/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA=
-github.com/google/flatbuffers v23.1.21+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/flatbuffers v24.12.23+incompatible h1:ubBKR94NR4pXUCY/MUsRVzd9umNW7ht7EG9hHfS9FX8=
+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.5.2/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/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
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.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
+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/go.mod h1:wUlNgQ3QjqC4z8DnM5nnCYVq/icpqXJyJOukKx5U8/Q=
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/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/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/niklasfasching/go-org v1.7.0 h1:vyMdcMWWTe/XmANk19F4k8XGBYg0GQ/gJGMimOjGMek=
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/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
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.0.0/go.mod h1:+JyoH12I0+zqyC1iX7a2tmoQlipwAEGvOhVJMhmy+rM=
+github.com/open-policy-agent/opa v1.1.0 h1:HMz2evdEMTyNqtdLjmu3Vyx06BmhNYAx67Yz3Ll9q2s=
+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/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
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/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/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes=
-github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k=
+github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA=
+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/go.mod h1:L1VYef/jwKw6Wwyk5A+T0mBjjn3mMPgmjjA688RNsxU=
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/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/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
-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 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
+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.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw=
-go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA=
+go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
+go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
+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/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/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/go.mod h1:mzKxJywMNBdEX8TSJais3NnsVZUaJ+bAy6UxPTng2vk=
-go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ=
-go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M=
+go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
+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.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM=
-go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM=
+go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
+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/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.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s=
-go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck=
-go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg=
-go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY=
+go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
+go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
+go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
+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.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
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.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
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.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE=
+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-20190423024810-112230192c58/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-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.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+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-20190215142949-d0b11bdaac8a/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.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.29.1-0.20250107080300-1c14dcadc3ab h1:BMkEEWYOjkvOX7+YKOGbp6jCyQ5pR2j0Ah47p1Vdsx4=
-golang.org/x/sys v0.29.1-0.20250107080300-1c14dcadc3ab/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+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-20210927222741-03fcf44c2211/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.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.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
-golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
+golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
+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.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
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/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/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
-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 h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
+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/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
diff --git a/provisioner/terraform/resources_test.go b/provisioner/terraform/resources_test.go
index 01a771d544..d589b9a966 100644
--- a/provisioner/terraform/resources_test.go
+++ b/provisioner/terraform/resources_test.go
@@ -11,6 +11,7 @@ import (
"strings"
"testing"
+ "github.com/google/go-cmp/cmp"
tfjson "github.com/hashicorp/terraform-json"
"github.com/stretchr/testify/require"
protobuf "google.golang.org/protobuf/proto"
@@ -924,7 +925,9 @@ func TestConvertResources(t *testing.T) {
var resourcesMap []map[string]interface{}
err = json.Unmarshal(data, &resourcesMap)
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
if expectedParams == nil {
@@ -981,7 +984,9 @@ func TestConvertResources(t *testing.T) {
var resourcesMap []map[string]interface{}
err = json.Unmarshal(data, &resourcesMap)
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.Presets, state.Presets)
diff --git a/provisioner/terraform/testdata/generate.sh b/provisioner/terraform/testdata/generate.sh
index 64aab66895..72b090dc6b 100755
--- a/provisioner/terraform/testdata/generate.sh
+++ b/provisioner/terraform/testdata/generate.sh
@@ -55,11 +55,23 @@ run() {
exit 0
}
+if [[ " $* " == *" --help "* || " $* " == *" -h "* ]]; then
+ echo "Usage: $0 [module1 module2 ...]"
+ exit 0
+fi
+
declare -a jobs=()
-for d in */; do
- run "$d" &
- jobs+=($!)
-done
+if [[ $# -gt 0 ]]; then
+ for d in "$@"; do
+ run "$d" &
+ jobs+=($!)
+ done
+else
+ for d in */; do
+ run "$d" &
+ jobs+=($!)
+ done
+fi
err=0
for job in "${jobs[@]}"; do
diff --git a/provisionersdk/archive.go b/provisionersdk/archive.go
index 410315c18a..a069639a1e 100644
--- a/provisionersdk/archive.go
+++ b/provisionersdk/archive.go
@@ -175,7 +175,7 @@ func Untar(directory string, r io.Reader) error {
if err != nil {
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 {
return err
}
diff --git a/provisionersdk/archive_test.go b/provisionersdk/archive_test.go
index 7f31fb7730..12362275a7 100644
--- a/provisionersdk/archive_test.go
+++ b/provisionersdk/archive_test.go
@@ -184,18 +184,70 @@ func TestTar(t *testing.T) {
func TestUntar(t *testing.T) {
t.Parallel()
- log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
- dir := t.TempDir()
- file, err := os.CreateTemp(dir, "*.tf")
- require.NoError(t, err)
- _ = file.Close()
- archive := new(bytes.Buffer)
- err = provisionersdk.Tar(archive, log, dir, 1024)
- require.NoError(t, err)
- dir = t.TempDir()
- err = provisionersdk.Untar(dir, archive)
- require.NoError(t, err)
- _, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name())))
- require.NoError(t, err)
+ t.Run("Basic", func(t *testing.T) {
+ t.Parallel()
+
+ log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true})
+
+ dir := t.TempDir()
+ file, err := os.CreateTemp(dir, "*.tf")
+ require.NoError(t, err)
+ _ = file.Close()
+
+ archive := new(bytes.Buffer)
+ err = provisionersdk.Tar(archive, log, dir, 1024)
+ require.NoError(t, err)
+
+ dir = t.TempDir()
+ err = provisionersdk.Untar(dir, archive)
+ require.NoError(t, err)
+
+ _, err = os.Stat(filepath.Join(dir, filepath.Base(file.Name())))
+ 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))
+ })
}
diff --git a/site/package.json b/site/package.json
index a43eebb083..892e1d50a0 100644
--- a/site/package.json
+++ b/site/package.json
@@ -60,6 +60,7 @@
"@radix-ui/react-slider": "1.2.2",
"@radix-ui/react-slot": "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",
"@tanstack/react-query-devtools": "4.35.3",
"@xterm/addon-canvas": "0.7.0",
diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml
index 4fdb128bd4..62ae51082e 100644
--- a/site/pnpm-lock.yaml
+++ b/site/pnpm-lock.yaml
@@ -90,6 +90,9 @@ importers:
'@radix-ui/react-switch':
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)
+ '@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':
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)
@@ -1917,6 +1920,19 @@ packages:
'@types/react-dom':
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':
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:
@@ -7975,6 +7991,26 @@ snapshots:
'@types/react': 18.3.12
'@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)':
dependencies:
react: 18.3.1
diff --git a/site/src/api/api.ts b/site/src/api/api.ts
index adb70208fb..e1b77279c9 100644
--- a/site/src/api/api.ts
+++ b/site/src/api/api.ts
@@ -698,7 +698,7 @@ class ApiMethods {
}
const response = await this.axios.get