Skip to content

Custom Deployment ​

Examples of custom RHDH configuration.

Custom App Config ​

typescript
import { test } from "@red-hat-developer-hub/e2e-test-utils/test";

test.beforeAll(async ({ rhdh }) => {
  await rhdh.configure({
    version: "1.5",
    method: "helm",
    auth: "keycloak",
    appConfig: "tests/config/custom-app-config.yaml",
    secrets: "tests/config/custom-secrets.yaml",
    dynamicPlugins: "tests/config/custom-plugins.yaml",
    valueFile: "tests/config/custom-values.yaml",
  });

  await rhdh.deploy();
});

Pre-Deployment Setup ​

typescript
import { test } from "@red-hat-developer-hub/e2e-test-utils/test";
import { $ } from "@red-hat-developer-hub/e2e-test-utils/utils";

test.beforeAll(async ({ rhdh }) => {
  const namespace = rhdh.deploymentConfig.namespace;

  // Configure first (creates namespace)
  await rhdh.configure({ auth: "keycloak" });

  // Run custom setup script
  await $`bash scripts/setup-data-source.sh ${namespace}`;

  // Get route from deployed service
  const result = await $`oc get route data-source -n ${namespace} -o jsonpath='{.spec.host}'`;
  process.env.DATA_SOURCE_URL = result.stdout.trim();

  // Deploy RHDH (uses env vars)
  await rhdh.deploy();
});

Dynamic ConfigMaps ​

typescript
import { test } from "@red-hat-developer-hub/e2e-test-utils/test";

test.beforeAll(async ({ rhdh }) => {
  await rhdh.configure({ auth: "keycloak" });

  // Add custom ConfigMap before deployment
  await rhdh.k8sClient.applyConfigMapFromObject(
    "custom-data",
    {
      "data.json": JSON.stringify({ key: "value" }),
    },
    rhdh.deploymentConfig.namespace
  );

  await rhdh.deploy();
});

Runtime Secrets ​

typescript
import { test } from "@red-hat-developer-hub/e2e-test-utils/test";

test.beforeAll(async ({ rhdh }) => {
  // Set secrets at runtime
  process.env.GITHUB_TOKEN = await getSecret("github-token");
  process.env.API_KEY = await getSecret("api-key");

  await rhdh.configure({ auth: "keycloak" });
  await rhdh.deploy();
});

async function getSecret(name: string): Promise<string> {
  // Use the secret provider approved for your environment.
  return "secret-value";
}

Update Configuration During Test ​

typescript
import { test } from "@red-hat-developer-hub/e2e-test-utils/test";

test("update and restart", async ({ rhdh }) => {
  const namespace = rhdh.deploymentConfig.namespace;

  // Update ConfigMap
  await rhdh.k8sClient.applyConfigMapFromObject(
    "app-config-rhdh",
    {
      "app-config.yaml": `
        app:
          title: Updated Title
      `,
    },
    namespace
  );

  // Restart to apply
  await rhdh.rolloutRestart();

  // Continue testing with new config
});

Custom Helm Values ​

tests/config/custom-values.yaml:

yaml
image:
  registry: quay.io
  repository: rhdh/rhdh-hub-rhel9
  tag: ${RHDH_VERSION}
  digest: ""

extraEnv:
  - name: LOG_LEVEL
    value: "debug"
  - name: CUSTOM_FLAG
    value: "enabled"

extraEnvFrom:
  - secretRef:
      name: rhdh-secrets
  - secretRef:
      name: custom-secrets

resources:
  requests:
    memory: "2Gi"
    cpu: "1000m"
  limits:
    memory: "4Gi"
    cpu: "2000m"

postgresql:
  enabled: true
  primary:
    persistence:
      size: 10Gi

Multiple Deployments ​

typescript
import { RHDHDeployment } from "@red-hat-developer-hub/e2e-test-utils/rhdh";

// Create multiple deployments
const deployment1 = new RHDHDeployment("instance-1");
const deployment2 = new RHDHDeployment("instance-2");

await Promise.all([
  deployment1.configure({ auth: "guest" }).then(() => deployment1.deploy()),
  deployment2.configure({ auth: "keycloak" }).then(() => deployment2.deploy()),
]);

console.log(`Instance 1: ${deployment1.rhdhUrl}`);
console.log(`Instance 2: ${deployment2.rhdhUrl}`);

Released under the Apache-2.0 License.