Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
57b3522
add image
maciaszczykm Jul 9, 2026
bf4993b
update server and client
maciaszczykm Jul 10, 2026
2cc6b9c
update controller
maciaszczykm Jul 10, 2026
9fa84d7
update harness
maciaszczykm Jul 10, 2026
c078161
update frontend
maciaszczykm Jul 10, 2026
d0863a9
add samples
maciaszczykm Jul 10, 2026
5ff41a6
fix controller
maciaszczykm Jul 10, 2026
c032e37
update node
maciaszczykm Jul 10, 2026
bed1c0b
update node
maciaszczykm Jul 10, 2026
43c78cb
fix frontend
maciaszczykm Jul 10, 2026
3080761
add pulumi icon
maciaszczykm Jul 10, 2026
75f9d5d
use preview during up
maciaszczykm Jul 10, 2026
ad06907
fix nil pointer dereference
maciaszczykm Jul 10, 2026
5fe5026
add comments
maciaszczykm Jul 10, 2026
659ca45
add backend url support
maciaszczykm Jul 10, 2026
10ecf45
pass env to pulumi stack export command
maciaszczykm Jul 10, 2026
4539c20
Merge remote-tracking branch 'origin/master' into marcin/prod-4659-st…
maciaszczykm Jul 13, 2026
206ec98
fix linter
maciaszczykm Jul 13, 2026
a9fadd4
ensure pulumi home directory
maciaszczykm Jul 13, 2026
d268021
update samples
maciaszczykm Jul 13, 2026
149de4e
add validation to reject Pulumi stacks with policy engines
maciaszczykm Jul 14, 2026
d3b5e92
Merge remote-tracking branch 'origin/master' into marcin/prod-4659-st…
maciaszczykm Jul 14, 2026
6d26f34
update persisted queries with new operations
maciaszczykm Jul 14, 2026
e981493
Merge remote-tracking branch 'origin/master' into marcin/prod-4659-st…
maciaszczykm Jul 15, 2026
6570ff6
generate
maciaszczykm Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/assets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-node@v3
with:
node-version: 22.22.0
node-version: 24.11.1
- run: yarn --immutable
- run: yarn test
lint:
Expand All @@ -39,6 +39,6 @@ jobs:
- uses: actions/checkout@v6
- uses: actions/setup-node@v3
with:
node-version: 22.22.0
node-version: 24.11.1
- run: yarn --immutable
- run: yarn lint
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
name: Output versions
runs-on: ubuntu-latest
env:
NODE_VERSION: 24
NODE_VERSION: 24.11.1
CLAUDE_VERSION: 2.1.72
GEMINI_VERSION: 0.44.1
OPENCODE_VERSION: 1.17.3
Expand Down
70 changes: 70 additions & 0 deletions .github/workflows/deployment-operator-cd-harness.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,76 @@ jobs:
HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/stackrun-harness-base
HARNESS_BASE_IMAGE_TAG=${{ needs.publish-base-image.outputs.version }}

publish-harness-pulumi:
name: Build and push harness pulumi container
runs-on: ubuntu-latest
needs: [publish-base-image]
env:
PULUMI_VERSION: 3.251.0
strategy:
matrix:
versions:
- full: 3.251.0
minor: "3.251"
- full: 3.250.0
minor: "3.250"
- full: 3.249.0
minor: "3.249"
permissions:
contents: write
discussions: write
pull-requests: write
packages: write
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/pluralsh/harness
docker.io/pluralsh/harness
tags: |
type=semver,pattern={{version}},value=${{ github.ref_name }},match=go/deployment-operator/v(\d+\.\d+\.\d+)$,suffix=-pulumi-${{ matrix.versions.full }},priority=1000
type=semver,pattern={{version}},value=${{ github.ref_name }},match=go/deployment-operator/v(\d+\.\d+\.\d+)$,suffix=-pulumi-${{ matrix.versions.minor }},priority=1000
type=sha,suffix=-pulumi-${{ matrix.versions.full }},priority=800
type=sha,suffix=-pulumi-${{ matrix.versions.minor }},priority=800
type=ref,event=pr,suffix=-pulumi-${{ matrix.versions.full }},priority=600
type=ref,event=pr,suffix=-pulumi-${{ matrix.versions.minor }},priority=600
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker
uses: docker/login-action@v3
with:
username: mjgpluralsh
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: "./go"
file: "./go/deployment-operator/dockerfiles/harness/pulumi.Dockerfile"
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
PULUMI_VERSION=${{ matrix.versions.full }}
HARNESS_BASE_IMAGE_REPO=ghcr.io/pluralsh/stackrun-harness-base
HARNESS_BASE_IMAGE_TAG=${{ needs.publish-base-image.outputs.version }}

publish-harness-ansible:
name: Build and push harness ansible container
runs-on: ubuntu-latest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ jobs:
runs-on: ubuntu-latest
needs: [publish-base-image]
env:
NODE_VERSION: 24.8.0
NODE_VERSION: 24.11.1
permissions:
contents: write
discussions: write
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
ARG TOOLS_IMAGE=${OS_VARIANT}:${OS_VERSION}
ARG RUNNER_IMAGE=alpine:3.23.4 # TODO: change back to ${OS_VARIANT}:${OS_VERSION}

FROM node:22.22.0-alpine as node
FROM node:24.11.1-alpine as node

Check warning on line 8 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

The 'as' keyword should match the case of the 'from' keyword

FromAsCasing: 'as' and 'FROM' keywords' casing do not match More info: https://docs.docker.com/go/dockerfile/rule/from-as-casing/

WORKDIR /app

Expand All @@ -19,12 +19,12 @@

COPY assets/ ./

ARG VITE_PROD_SECRET_KEY

Check warning on line 22 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "VITE_PROD_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ARG VITE_SENTRY_DSN
ARG SENTRY_AUTH_TOKEN

Check warning on line 24 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "SENTRY_AUTH_TOKEN") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ARG GIT_COMMIT

ENV VITE_PROD_SECRET_KEY=${VITE_PROD_SECRET_KEY} \

Check warning on line 27 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "SENTRY_AUTH_TOKEN") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/

Check warning on line 27 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "VITE_PROD_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
VITE_GIT_COMMIT=${GIT_COMMIT} \
VITE_SENTRY_DSN=${VITE_SENTRY_DSN} \
SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN}
Expand Down Expand Up @@ -81,7 +81,7 @@

RUN mix do db.certs, agent.chart, sentry.package_source_code, release

FROM alpine:3.21.3 as tools

Check warning on line 84 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

The 'as' keyword should match the case of the 'from' keyword

FromAsCasing: 'as' and 'FROM' keywords' casing do not match More info: https://docs.docker.com/go/dockerfile/rule/from-as-casing/

ARG TARGETARCH=amd64
ENV CLI_VERSION=v0.12.58
Expand Down Expand Up @@ -145,4 +145,4 @@

EXPOSE 4000 6000 4369 50051

CMD mkdir -p /tmp/sqlite; /opt/app/bin/console start

Check warning on line 148 in Dockerfile

View workflow job for this annotation

GitHub Actions / Test Build Docker image

JSON arguments recommended for ENTRYPOINT/CMD to prevent unintended behavior related to OS signals

JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals More info: https://docs.docker.com/go/dockerfile/rule/json-args-recommended/
2 changes: 1 addition & 1 deletion assets/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:22.22.0
FROM node:24.11.1

WORKDIR /app/assets

Expand Down
2 changes: 1 addition & 1 deletion assets/design-system/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"analyze": "vite-bundle-visualizer -o stats.html"
},
"engines": {
"node": ">=22.22.0"
"node": ">=24.11.1"
},
"dependencies": {
"@emotion/react": "11.14.0",
Expand Down
30 changes: 30 additions & 0 deletions assets/design-system/src/components/icons/PulumiLogoIcon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import createIcon from './createIcon'

export default createIcon(({ size, color, fullColor }) => (
<svg
width={size}
height={size}
viewBox="0 0 100 106"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M17.0724 58.8697C20.9836 56.6115 20.9901 49.3006 17.0869 42.5402C13.1837 35.7799 6.84888 32.1302 2.93767 34.3884C-0.973545 36.6466 -0.980047 43.9576 2.92315 50.7179C6.82634 57.4783 13.1612 61.1279 17.0724 58.8697ZM17.0958 73.3453C20.999 80.1057 20.9925 87.4166 17.0813 89.6748C13.17 91.933 6.83522 88.2833 2.93203 81.523C-0.971168 74.7627 -0.964668 67.4517 2.94655 65.1935C6.85776 62.9353 13.1926 66.585 17.0958 73.3453ZM43.7495 88.7551C47.6527 95.5154 47.6462 102.826 43.735 105.085C39.8238 107.343 33.4889 103.693 29.5857 96.9327C25.6826 90.1724 25.6891 82.8615 29.6003 80.6032C33.5115 78.345 39.8463 81.9947 43.7495 88.7551ZM43.7408 57.9504C47.644 64.7107 47.6375 72.0217 43.7263 74.2799C39.8151 76.5381 33.4803 72.8884 29.5771 66.1281C25.6739 59.3677 25.6804 52.0568 29.5916 49.7986C33.5028 47.5404 39.8377 51.1901 43.7408 57.9504Z"
fill={fullColor ? '#F26E7E' : color}
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M97.0612 50.7349C100.964 43.9746 100.958 36.6636 97.0467 34.4054C93.1355 32.1472 86.8007 35.7969 82.8975 42.5573C78.9943 49.3176 79.0008 56.6285 82.912 58.8868C86.8232 61.145 93.1581 57.4953 97.0612 50.7349ZM97.062 65.2032C100.973 67.4614 100.98 74.7723 97.0766 81.5327C93.1734 88.293 86.8385 91.9427 82.9273 89.6845C79.0161 87.4263 79.0096 80.1153 82.9128 73.355C86.816 66.5947 93.1508 62.945 97.062 65.2032ZM70.4136 80.5877C74.3249 82.8459 74.3314 90.1568 70.4282 96.9172C66.525 103.677 60.1901 107.327 56.2789 105.069C52.3677 102.811 52.3612 95.4998 56.2644 88.7395C60.1676 81.9791 66.5024 78.3294 70.4136 80.5877ZM70.3986 49.7897C74.3098 52.0479 74.3163 59.3589 70.4131 66.1192C66.5099 72.8796 60.1751 76.5293 56.2638 74.2711C52.3526 72.0129 52.3461 64.7019 56.2493 57.9416C60.1525 51.1812 66.4873 47.5315 70.3986 49.7897Z"
fill={fullColor ? '#8A3391' : color}
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M64.1222 8.17769C64.1222 12.6941 57.7939 16.3554 49.9875 16.3554C42.1811 16.3554 35.8528 12.6941 35.8528 8.17769C35.8528 3.66127 42.1811 0 49.9875 0C57.7939 0 64.1222 3.66127 64.1222 8.17769ZM37.474 23.5464C37.474 28.0628 31.1457 31.7241 23.3393 31.7241C15.5329 31.7241 9.20459 28.0628 9.20459 23.5464C9.20459 19.03 15.5329 15.3687 23.3393 15.3687C31.1457 15.3687 37.474 19.03 37.474 23.5464ZM76.6705 31.7241C84.4769 31.7241 90.8052 28.0628 90.8052 23.5464C90.8052 19.03 84.4769 15.3687 76.6705 15.3687C68.8641 15.3687 62.5358 19.03 62.5358 23.5464C62.5358 28.0628 68.8641 31.7241 76.6705 31.7241ZM64.1222 38.9496C64.1222 43.466 57.7939 47.1272 49.9875 47.1272C42.1811 47.1272 35.8528 43.466 35.8528 38.9496C35.8528 34.4332 42.1811 30.7719 49.9875 30.7719C57.7939 30.7719 64.1222 34.4332 64.1222 38.9496Z"
fill={fullColor ? '#F7BF2A' : color}
/>
</svg>
))
1 change: 1 addition & 0 deletions assets/design-system/src/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ export { default as PrIcon } from './components/icons/PrIcon'
export { default as PrMergedIcon } from './components/icons/PrMergedIcon'
export { default as ProjectIcon } from './components/icons/ProjectIcon'
export { default as PrometheusLogoIcon } from './components/icons/PrometheusLogoIcon'
export { default as PulumiLogoIcon } from './components/icons/PulumiLogoIcon'
export { default as PrOpenIcon } from './components/icons/PrOpenIcon'
export { default as ProtectedClusterIcon } from './components/icons/ProtectedClusterIcon'
export { default as ProtectedManagementClusterIcon } from './components/icons/ProtectedManagementClusterIcon'
Expand Down
4 changes: 2 additions & 2 deletions assets/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"analyze": "vite-bundle-visualizer -o stats.html"
},
"engines": {
"node": ">=22.22.0"
"node": ">=24.11.1"
},
"packageManager": "yarn@3.6.0",
"dependencies": {
Expand Down Expand Up @@ -148,7 +148,7 @@
"@types/humanize-duration": "3.27.4",
"@types/jsdom": "21.1.7",
"@types/lodash": "4.17.24",
"@types/node": "22.20.0",
"@types/node": "24.10.1",
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"@typescript-eslint/eslint-plugin": "8.63.0",
Expand Down
9 changes: 7 additions & 2 deletions assets/src/components/stacks/Stacks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import {
Conjunction,
StackFragment,
StackTinyFragment,
StackType,
TagType,
useStackQuery,
useStacksQuery,
Expand Down Expand Up @@ -111,12 +112,16 @@ const getDirectory = (stack: Nullable<StackFragment>, aiEnabled: boolean) => [
{
path: STACK_STATE_REL_PATH,
label: 'State',
enabled: isTerraformFamilyStackType(stack?.type),
enabled:
isTerraformFamilyStackType(stack?.type) ||
stack?.type === StackType.Pulumi,
},
{
path: STACK_OUTPUT_REL_PATH,
label: 'Output',
enabled: isTerraformFamilyStackType(stack?.type),
enabled:
isTerraformFamilyStackType(stack?.type) ||
stack?.type === StackType.Pulumi,
},
{ path: STACK_VARS_REL_PATH, label: 'Variables', enabled: true },
{
Expand Down
9 changes: 9 additions & 0 deletions assets/src/components/stacks/common/StackTypeIcon.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
AnsibleIcon,
PulumiLogoIcon,
StackIcon,
TerraformLogoIcon,
TerragruntLogoIcon,
Expand Down Expand Up @@ -42,6 +43,14 @@ export function StackTypeIcon({
color={color}
/>
)
case StackType.Pulumi:
return (
<PulumiLogoIcon
size={size}
fullColor={fullColor}
color={color}
/>
)
default:
return (
<StackIcon
Expand Down
1 change: 1 addition & 0 deletions assets/src/components/stacks/common/stackTypeUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export const STACK_TYPE_LABELS: Record<StackType, string> = {
[StackType.Custom]: 'Custom',
[StackType.Terraform]: 'Terraform',
[StackType.Terragrunt]: 'Terragrunt',
[StackType.Pulumi]: 'Pulumi',
}

const TERRAFORM_FAMILY_STACK_TYPES = new Set<StackType>([
Expand Down
Loading
Loading