@catladder/pipeline 1.163.1 → 1.163.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/bundles/catladder-gitlab/index.js +1 -1
  2. package/dist/constants.js +1 -1
  3. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +0 -1958
  4. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1 -1935
  5. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1 -1959
  6. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1 -2011
  7. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1 -1959
  8. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1 -1970
  9. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1 -1959
  10. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1 -1959
  11. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1 -2003
  12. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1 -1675
  13. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1 -1959
  14. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +1 -3935
  15. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1 -3458
  16. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1 -1967
  17. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1 -1787
  18. package/examples/__snapshots__/custom-build-job.test.ts.snap +1 -1487
  19. package/examples/__snapshots__/custom-deploy.test.ts.snap +1 -1721
  20. package/examples/__snapshots__/custom-envs.test.ts.snap +1 -1175
  21. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1 -1495
  22. package/examples/__snapshots__/git-submodule.test.ts.snap +1 -1962
  23. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1 -2450
  24. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +1 -2462
  25. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1 -2470
  26. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +1 -4558
  27. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1 -2574
  28. package/examples/__snapshots__/local-dot-env.test.ts.snap +1 -1959
  29. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1 -2503
  30. package/examples/__snapshots__/multiline-var.test.ts.snap +1 -4488
  31. package/examples/__snapshots__/native-app.test.ts.snap +1 -3167
  32. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1 -1959
  33. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1 -1967
  34. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1479 -2003
  35. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1 -1995
  36. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1 -2105
  37. package/examples/cloud-run-memory-limit.test.ts +1 -8
  38. package/examples/cloud-run-meteor-with-worker.test.ts +2 -9
  39. package/examples/cloud-run-no-cpu-throttling.test.ts +2 -9
  40. package/examples/cloud-run-no-service.test.ts +2 -9
  41. package/examples/cloud-run-non-public.test.ts +2 -9
  42. package/examples/cloud-run-post-stop-job.test.ts +2 -9
  43. package/examples/cloud-run-service-gen2.test.ts +2 -9
  44. package/examples/cloud-run-service-increase-timout.test.ts +2 -9
  45. package/examples/cloud-run-service-with-volumes.test.ts +2 -9
  46. package/examples/cloud-run-storybook.test.ts +2 -9
  47. package/examples/cloud-run-with-ngnix.test.ts +2 -9
  48. package/examples/cloud-run-with-sql-reuse-db.test.ts +2 -9
  49. package/examples/cloud-run-with-sql.test.ts +2 -9
  50. package/examples/cloud-run-with-worker.test.ts +2 -9
  51. package/examples/custom-build-job-with-tests.test.ts +2 -9
  52. package/examples/custom-build-job.test.ts +2 -9
  53. package/examples/custom-deploy.test.ts +2 -9
  54. package/examples/custom-envs.test.ts +2 -9
  55. package/examples/custom-sbom-java.test.ts +2 -9
  56. package/examples/git-submodule.test.ts +2 -9
  57. package/examples/kubernetes-application-customization.test.ts +2 -9
  58. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +2 -9
  59. package/examples/kubernetes-with-cloud-sql.test.ts +2 -9
  60. package/examples/kubernetes-with-jobs.test.ts +2 -9
  61. package/examples/kubernetes-with-mongodb.test.ts +2 -9
  62. package/examples/local-dot-env.test.ts +2 -9
  63. package/examples/meteor-kubernetes.test.ts +2 -9
  64. package/examples/multiline-var.test.ts +2 -9
  65. package/examples/native-app.test.ts +2 -9
  66. package/examples/node-build-with-custom-image.test.ts +2 -9
  67. package/examples/node-build-with-docker-additions.test.ts +2 -9
  68. package/examples/rails-k8s-with-worker-dockerfile.test.ts +2 -2
  69. package/examples/rails-k8s-with-worker.test.ts +2 -9
  70. package/examples/wait-for-other-deploy.test.ts +2 -9
  71. package/package.json +1 -1
  72. package/scripts/generate-examples-test.ts +3 -5
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`matches snapshot for cloud-run-memory-limit local pipeline YAML 1`] = `
3
+ exports[`matches snapshot for rails-k8s-with-worker local pipeline YAML 1`] = `
4
4
  "image: path/to/docker/jobs-default:the-version
5
5
  stages:
6
6
  - setup
@@ -1469,1997 +1469,3 @@ create release:
1469
1469
  needs: []
1470
1470
  "
1471
1471
  `;
1472
-
1473
- exports[`matches snapshot for rails-k8s-with-worker 1`] = `
1474
- {
1475
- "mainBranch": {
1476
- "image": "path/to/docker/jobs-default:the-version",
1477
- "jobs": {
1478
- "app ↩️ Rollback ⚠️ | dev ": {
1479
- "allow_failure": true,
1480
- "artifacts": {
1481
- "reports": {
1482
- "dotenv": "gitlab_environment.env",
1483
- },
1484
- },
1485
- "environment": {
1486
- "action": "access",
1487
- "name": "dev/app",
1488
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1489
- },
1490
- "image": "path/to/docker/kubernetes:the-version",
1491
- "interruptible": true,
1492
- "needs": [],
1493
- "retry": {
1494
- "max": 2,
1495
- "when": [
1496
- "runner_system_failure",
1497
- "stuck_or_timeout_failure",
1498
- ],
1499
- },
1500
- "rules": [
1501
- {
1502
- "when": "manual",
1503
- },
1504
- ],
1505
- "script": [
1506
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1507
- "export ENV_SHORT="dev"",
1508
- "export APP_DIR="."",
1509
- "export ENV_TYPE="dev"",
1510
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1511
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1512
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
1513
- "export ROOT_URL="https://app.dev.test-app.pan.panter.cloud"",
1514
- "export HOST_INTERNAL="app.dev.test-app.pan.panter.cloud"",
1515
- "export HOST_CANONICAL="app.dev.test-app.pan.panter.cloud"",
1516
- "export ROOT_URL_INTERNAL="https://app.dev.test-app.pan.panter.cloud"",
1517
- "export KUBE_NAMESPACE="pan-test-app-dev"",
1518
- "export KUBE_APP_NAME="app"",
1519
- "export KUBE_APP_NAME_PREFIX=""",
1520
- "export SECRET_KEY_BASE="$CL_dev_app_SECRET_KEY_BASE"",
1521
- "export POSTGRESQL_PASSWORD="$CL_dev_app_POSTGRESQL_PASSWORD"",
1522
- "export cloudsqlProxyCredentials="$CL_dev_app_cloudsqlProxyCredentials"",
1523
- "export RAILS_ENV="production"",
1524
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
1525
- "export RELEASE_NAME="pan-test-app-dev-app"",
1526
- "export HELM_EXPERIMENTAL_OCI="1"",
1527
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
1528
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1529
- "export HELM_ARGS=""",
1530
- "export COMPONENT_NAME="app"",
1531
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1532
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1533
- "kubectl config set-cluster "kube-pan-test-app-dev-app" --server="$CL_dev_app_KUBE_URL" --certificate-authority <(echo $CL_dev_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1534
- "kubectl config set-credentials "kube-pan-test-app-dev-app" --token="$CL_dev_app_KUBE_TOKEN"",
1535
- "kubectl config set-context "kube-pan-test-app-dev-app" --cluster="kube-pan-test-app-dev-app" --user="kube-pan-test-app-dev-app" --namespace="pan-test-app-dev"",
1536
- "kubectl config use-context "kube-pan-test-app-dev-app"",
1537
- "kubernetesRollback",
1538
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
1539
- ],
1540
- "stage": "rollback dev",
1541
- "variables": {
1542
- "GIT_STRATEGY": "none",
1543
- "KUBERNETES_CPU_REQUEST": "0.22",
1544
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1545
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1546
- },
1547
- },
1548
- "app 👮 lint": {
1549
- "cache": {
1550
- "key": {
1551
- "files": [
1552
- "Gemfile.lock",
1553
- ],
1554
- "prefix": "$CI_JOB_IMAGE",
1555
- },
1556
- "paths": [
1557
- "tmp/cache",
1558
- ],
1559
- },
1560
- "image": "ruby:3.2.1",
1561
- "interruptible": true,
1562
- "needs": [],
1563
- "retry": {
1564
- "max": 2,
1565
- "when": [
1566
- "runner_system_failure",
1567
- "stuck_or_timeout_failure",
1568
- ],
1569
- },
1570
- "script": [
1571
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1572
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1573
- "cd .",
1574
- "bundle config set path 'tmp/cache'",
1575
- "bundle install -j $(nproc)",
1576
- "bundle exec rubocop",
1577
- ],
1578
- "stage": "test",
1579
- "variables": {},
1580
- },
1581
- "app 🔨 docker | dev ": {
1582
- "image": "path/to/docker/docker-build:the-version",
1583
- "interruptible": true,
1584
- "needs": [],
1585
- "retry": {
1586
- "max": 2,
1587
- "when": [
1588
- "runner_system_failure",
1589
- "stuck_or_timeout_failure",
1590
- ],
1591
- },
1592
- "script": [
1593
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1594
- "export APP_DIR="."",
1595
- "export DOCKER_BUILD_CONTEXT="."",
1596
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1597
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
1598
- "export DOCKER_IMAGE_NAME="dev/app"",
1599
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1600
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1601
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1602
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
1603
- "cd .",
1604
- "docker pull $DOCKER_CACHE_IMAGE || true",
1605
- "wget --output-document=- https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz | tar -zx --directory /usr/local/bin pack",
1606
- "chmod +x /usr/local/bin/pack",
1607
- "sed --in-place 's|git@\\([^:]*\\):|https://\\1/|g' Gemfile Gemfile.lock",
1608
- "pack build "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" --builder 'heroku/builder:22' --publish --cache-image "$DOCKER_CACHE_IMAGE" --env 'SECRET_KEY_BASE=dummy-value' ",
1609
- ],
1610
- "services": [
1611
- {
1612
- "command": [
1613
- "--tls=false",
1614
- ],
1615
- "name": "docker:24.0.6-dind",
1616
- },
1617
- ],
1618
- "stage": "build",
1619
- "variables": {
1620
- "DOCKER_BUILDKIT": "1",
1621
- "DOCKER_DRIVER": "overlay2",
1622
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
1623
- "DOCKER_TLS_CERTDIR": "",
1624
- "KUBERNETES_CPU_REQUEST": "0.45",
1625
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
1626
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
1627
- },
1628
- },
1629
- "app 🚀 Deploy | dev ": {
1630
- "allow_failure": false,
1631
- "artifacts": {
1632
- "reports": {
1633
- "dotenv": "gitlab_environment.env",
1634
- },
1635
- },
1636
- "environment": {
1637
- "auto_stop_in": "4 weeks",
1638
- "name": "dev/app",
1639
- "on_stop": "app 🛑 Stop ⚠️ | dev ",
1640
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1641
- },
1642
- "image": "path/to/docker/kubernetes:the-version",
1643
- "interruptible": true,
1644
- "needs": [
1645
- {
1646
- "artifacts": false,
1647
- "job": "app 👮 lint",
1648
- },
1649
- {
1650
- "artifacts": false,
1651
- "job": "app 🔨 docker | dev ",
1652
- },
1653
- {
1654
- "artifacts": false,
1655
- "job": "app 🧪 test",
1656
- },
1657
- {
1658
- "artifacts": true,
1659
- "job": "app 🧾 sbom | dev ",
1660
- },
1661
- {
1662
- "artifacts": false,
1663
- "job": "app 🛡 audit",
1664
- },
1665
- ],
1666
- "retry": {
1667
- "max": 2,
1668
- "when": [
1669
- "runner_system_failure",
1670
- "stuck_or_timeout_failure",
1671
- ],
1672
- },
1673
- "rules": [
1674
- {
1675
- "when": "on_success",
1676
- },
1677
- ],
1678
- "script": [
1679
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1680
- "export ENV_SHORT="dev"",
1681
- "export APP_DIR="."",
1682
- "export ENV_TYPE="dev"",
1683
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1684
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1685
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
1686
- "export ROOT_URL="https://app.dev.test-app.pan.panter.cloud"",
1687
- "export HOST_INTERNAL="app.dev.test-app.pan.panter.cloud"",
1688
- "export HOST_CANONICAL="app.dev.test-app.pan.panter.cloud"",
1689
- "export ROOT_URL_INTERNAL="https://app.dev.test-app.pan.panter.cloud"",
1690
- "export KUBE_NAMESPACE="pan-test-app-dev"",
1691
- "export KUBE_APP_NAME="app"",
1692
- "export KUBE_APP_NAME_PREFIX=""",
1693
- "export SECRET_KEY_BASE="$CL_dev_app_SECRET_KEY_BASE"",
1694
- "export POSTGRESQL_PASSWORD="$CL_dev_app_POSTGRESQL_PASSWORD"",
1695
- "export cloudsqlProxyCredentials="$CL_dev_app_cloudsqlProxyCredentials"",
1696
- "export RAILS_ENV="production"",
1697
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
1698
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
1699
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
1700
- "export DOCKER_IMAGE_NAME="dev/app"",
1701
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
1702
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
1703
- "export RELEASE_NAME="pan-test-app-dev-app"",
1704
- "export HELM_EXPERIMENTAL_OCI="1"",
1705
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
1706
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1707
- "export HELM_ARGS=""",
1708
- "export COMPONENT_NAME="app"",
1709
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1710
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1711
- "kubectl config set-cluster "kube-pan-test-app-dev-app" --server="$CL_dev_app_KUBE_URL" --certificate-authority <(echo $CL_dev_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1712
- "kubectl config set-credentials "kube-pan-test-app-dev-app" --token="$CL_dev_app_KUBE_TOKEN"",
1713
- "kubectl config set-context "kube-pan-test-app-dev-app" --cluster="kube-pan-test-app-dev-app" --user="kube-pan-test-app-dev-app" --namespace="pan-test-app-dev"",
1714
- "kubectl config use-context "kube-pan-test-app-dev-app"",
1715
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
1716
- "cat > __all_values.yml <<EOF
1717
- env:
1718
- secret:
1719
- SECRET_KEY_BASE: |-
1720
- $(printf %s "$CL_dev_app_SECRET_KEY_BASE" | sed 's/^/ /')
1721
- POSTGRESQL_PASSWORD: |-
1722
- $(printf %s "$CL_dev_app_POSTGRESQL_PASSWORD" | sed 's/^/ /')
1723
- cloudsqlProxyCredentials: |-
1724
- $(printf %s "$CL_dev_app_cloudsqlProxyCredentials" | sed 's/^/ /')
1725
- public:
1726
- ENV_SHORT: |-
1727
- dev
1728
- APP_DIR: |-
1729
- .
1730
- ENV_TYPE: |-
1731
- dev
1732
- BUILD_INFO_BUILD_ID: |-
1733
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1734
- BUILD_INFO_BUILD_TIME: |-
1735
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1736
- BUILD_INFO_CURRENT_VERSION: |-
1737
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
1738
- ROOT_URL: |-
1739
- https://app.dev.test-app.pan.panter.cloud
1740
- HOST_INTERNAL: |-
1741
- app.dev.test-app.pan.panter.cloud
1742
- HOST_CANONICAL: |-
1743
- app.dev.test-app.pan.panter.cloud
1744
- ROOT_URL_INTERNAL: |-
1745
- https://app.dev.test-app.pan.panter.cloud
1746
- KUBE_NAMESPACE: |-
1747
- pan-test-app-dev
1748
- KUBE_APP_NAME: |-
1749
- app
1750
- KUBE_APP_NAME_PREFIX: ""
1751
- RAILS_ENV: |-
1752
- production
1753
- _ALL_ENV_VAR_KEYS: |-
1754
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","SECRET_KEY_BASE","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials","RAILS_ENV"]
1755
- application:
1756
- host: |-
1757
- app.dev.test-app.pan.panter.cloud
1758
- command: |-
1759
- /cnb/process/web
1760
- livenessProbe:
1761
- httpGet:
1762
- path: |-
1763
- __health
1764
- readinessProbe:
1765
- httpGet:
1766
- path: |-
1767
- __health
1768
- startupProbe:
1769
- httpGet:
1770
- path: |-
1771
- __health
1772
- worker:
1773
- enabled: true
1774
- command: |-
1775
- launcher bundle exec rake jobs:work
1776
- livenessProbe: false
1777
- cloudsql:
1778
- enabled: true
1779
- dbUser: |-
1780
- postgres
1781
- instanceConnectionName: |-
1782
- some-project-id:europe-west6:pan-test-app-dev
1783
- proxyCredentials: |-
1784
- $CL_dev_app_cloudsqlProxyCredentials
1785
- fullDbName: |-
1786
- app
1787
- projectId: |-
1788
- some-project-id
1789
- jobs:
1790
- db-migrate:
1791
- hook: |-
1792
- post-install,post-upgrade
1793
- command: |-
1794
- launcher bundle exec rake db:migrate
1795
-
1796
- EOF
1797
- ",
1798
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
1799
- "kubernetesCreateSecret",
1800
- "kubernetesDeploy",
1801
- "echo 'Uploading SBOM to Dependency Track'",
1802
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
1803
- "echo deployment successful 😻",
1804
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
1805
- ],
1806
- "stage": "deploy dev",
1807
- "variables": {
1808
- "KUBERNETES_CPU_REQUEST": "0.22",
1809
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1810
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1811
- },
1812
- },
1813
- "app 🛑 Stop ⚠️ | dev ": {
1814
- "allow_failure": true,
1815
- "artifacts": {
1816
- "reports": {
1817
- "dotenv": "gitlab_environment.env",
1818
- },
1819
- },
1820
- "environment": {
1821
- "action": "stop",
1822
- "name": "dev/app",
1823
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1824
- },
1825
- "image": "path/to/docker/kubernetes:the-version",
1826
- "interruptible": true,
1827
- "needs": [],
1828
- "retry": {
1829
- "max": 2,
1830
- "when": [
1831
- "runner_system_failure",
1832
- "stuck_or_timeout_failure",
1833
- ],
1834
- },
1835
- "rules": [
1836
- {
1837
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
1838
- "when": "on_success",
1839
- },
1840
- {
1841
- "when": "manual",
1842
- },
1843
- ],
1844
- "script": [
1845
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1846
- "export ENV_SHORT="dev"",
1847
- "export APP_DIR="."",
1848
- "export ENV_TYPE="dev"",
1849
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1850
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1851
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
1852
- "export ROOT_URL="https://app.dev.test-app.pan.panter.cloud"",
1853
- "export HOST_INTERNAL="app.dev.test-app.pan.panter.cloud"",
1854
- "export HOST_CANONICAL="app.dev.test-app.pan.panter.cloud"",
1855
- "export ROOT_URL_INTERNAL="https://app.dev.test-app.pan.panter.cloud"",
1856
- "export KUBE_NAMESPACE="pan-test-app-dev"",
1857
- "export KUBE_APP_NAME="app"",
1858
- "export KUBE_APP_NAME_PREFIX=""",
1859
- "export SECRET_KEY_BASE="$CL_dev_app_SECRET_KEY_BASE"",
1860
- "export POSTGRESQL_PASSWORD="$CL_dev_app_POSTGRESQL_PASSWORD"",
1861
- "export cloudsqlProxyCredentials="$CL_dev_app_cloudsqlProxyCredentials"",
1862
- "export RAILS_ENV="production"",
1863
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
1864
- "export RELEASE_NAME="pan-test-app-dev-app"",
1865
- "export HELM_EXPERIMENTAL_OCI="1"",
1866
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
1867
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1868
- "export HELM_ARGS=""",
1869
- "export COMPONENT_NAME="app"",
1870
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1871
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1872
- "kubectl config set-cluster "kube-pan-test-app-dev-app" --server="$CL_dev_app_KUBE_URL" --certificate-authority <(echo $CL_dev_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1873
- "kubectl config set-credentials "kube-pan-test-app-dev-app" --token="$CL_dev_app_KUBE_TOKEN"",
1874
- "kubectl config set-context "kube-pan-test-app-dev-app" --cluster="kube-pan-test-app-dev-app" --user="kube-pan-test-app-dev-app" --namespace="pan-test-app-dev"",
1875
- "kubectl config use-context "kube-pan-test-app-dev-app"",
1876
- "kubernetesDelete",
1877
- "echo 'Disabling component in Dependency Track'",
1878
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" || true",
1879
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
1880
- ],
1881
- "stage": "stop dev",
1882
- "variables": {
1883
- "GIT_STRATEGY": "none",
1884
- "KUBERNETES_CPU_REQUEST": "0.22",
1885
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1886
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1887
- },
1888
- },
1889
- "app 🛡 audit": {
1890
- "allow_failure": true,
1891
- "image": "ruby:3.2.1",
1892
- "interruptible": true,
1893
- "needs": [],
1894
- "retry": {
1895
- "max": 2,
1896
- "when": [
1897
- "runner_system_failure",
1898
- "stuck_or_timeout_failure",
1899
- ],
1900
- },
1901
- "script": [
1902
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1903
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1904
- "cd .",
1905
- "gem install bundler-audit",
1906
- "bundle audit check",
1907
- ],
1908
- "stage": "test",
1909
- "variables": {},
1910
- },
1911
- "app 🧪 test": {
1912
- "cache": {
1913
- "key": {
1914
- "files": [
1915
- "Gemfile.lock",
1916
- ],
1917
- "prefix": "$CI_JOB_IMAGE",
1918
- },
1919
- "paths": [
1920
- "tmp/cache",
1921
- ],
1922
- },
1923
- "image": "ruby:3.2.1",
1924
- "interruptible": true,
1925
- "needs": [],
1926
- "retry": {
1927
- "max": 2,
1928
- "when": [
1929
- "runner_system_failure",
1930
- "stuck_or_timeout_failure",
1931
- ],
1932
- },
1933
- "script": [
1934
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1935
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1936
- "cd .",
1937
- "bundle config set path 'tmp/cache'",
1938
- "bundle install -j $(nproc)",
1939
- "bundle exec rspec",
1940
- ],
1941
- "stage": "test",
1942
- "variables": {},
1943
- },
1944
- "app 🧾 sbom | dev ": {
1945
- "allow_failure": true,
1946
- "artifacts": {
1947
- "paths": [
1948
- "__sbom.json",
1949
- ],
1950
- },
1951
- "image": "aquasec/trivy:0.38.3",
1952
- "interruptible": true,
1953
- "needs": [],
1954
- "retry": {
1955
- "max": 2,
1956
- "when": [
1957
- "runner_system_failure",
1958
- "stuck_or_timeout_failure",
1959
- ],
1960
- },
1961
- "script": [
1962
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1963
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1964
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" .",
1965
- ],
1966
- "stage": "build",
1967
- "variables": {},
1968
- },
1969
- },
1970
- "stages": [
1971
- "setup",
1972
- "setup dev",
1973
- "setup review",
1974
- "setup stage",
1975
- "setup prod",
1976
- "test",
1977
- "test dev",
1978
- "test review",
1979
- "test stage",
1980
- "test prod",
1981
- "build",
1982
- "build dev",
1983
- "build review",
1984
- "build stage",
1985
- "build prod",
1986
- "deploy",
1987
- "deploy dev",
1988
- "deploy review",
1989
- "deploy stage",
1990
- "deploy prod",
1991
- "verify",
1992
- "verify dev",
1993
- "verify review",
1994
- "verify stage",
1995
- "verify prod",
1996
- "rollback",
1997
- "rollback dev",
1998
- "rollback review",
1999
- "rollback stage",
2000
- "rollback prod",
2001
- "stop",
2002
- "stop dev",
2003
- "stop review",
2004
- "stop stage",
2005
- "stop prod",
2006
- ],
2007
- "variables": {
2008
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2009
- "CACHE_COMPRESSION_LEVEL": "fast",
2010
- "FF_USE_FASTZIP": "true",
2011
- "GIT_DEPTH": "1",
2012
- "TRANSFER_METER_FREQUENCY": "5s",
2013
- },
2014
- "workflow": {
2015
- "rules": [
2016
- {
2017
- "if": "$CI_COMMIT_TAG",
2018
- },
2019
- {
2020
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2021
- "when": "never",
2022
- },
2023
- {
2024
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2025
- "when": "never",
2026
- },
2027
- {
2028
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2029
- },
2030
- {
2031
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2032
- },
2033
- {
2034
- "if": "$CI_MERGE_REQUEST_ID",
2035
- },
2036
- ],
2037
- },
2038
- },
2039
- "mr": {
2040
- "image": "path/to/docker/jobs-default:the-version",
2041
- "jobs": {
2042
- "app ↩️ Rollback ⚠️ | review ": {
2043
- "allow_failure": true,
2044
- "artifacts": {
2045
- "reports": {
2046
- "dotenv": "gitlab_environment.env",
2047
- },
2048
- },
2049
- "environment": {
2050
- "action": "access",
2051
- "name": "review/$CI_COMMIT_REF_NAME/app",
2052
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2053
- },
2054
- "image": "path/to/docker/kubernetes:the-version",
2055
- "interruptible": true,
2056
- "needs": [],
2057
- "retry": {
2058
- "max": 2,
2059
- "when": [
2060
- "runner_system_failure",
2061
- "stuck_or_timeout_failure",
2062
- ],
2063
- },
2064
- "rules": [
2065
- {
2066
- "when": "manual",
2067
- },
2068
- ],
2069
- "script": [
2070
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2071
- "export ENV_SHORT="review"",
2072
- "export APP_DIR="."",
2073
- "export ENV_TYPE="review"",
2074
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2075
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2076
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2077
- "export ROOT_URL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2078
- "export HOST_INTERNAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2079
- "export HOST_CANONICAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2080
- "export ROOT_URL_INTERNAL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2081
- "export KUBE_NAMESPACE="pan-test-app-review"",
2082
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2083
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2084
- "export SECRET_KEY_BASE="$CL_review_app_SECRET_KEY_BASE"",
2085
- "export POSTGRESQL_PASSWORD="$CL_review_app_POSTGRESQL_PASSWORD"",
2086
- "export cloudsqlProxyCredentials="$CL_review_app_cloudsqlProxyCredentials"",
2087
- "export RAILS_ENV="production"",
2088
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2089
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2090
- "export HELM_EXPERIMENTAL_OCI="1"",
2091
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2092
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2093
- "export HELM_ARGS=""",
2094
- "export COMPONENT_NAME="app"",
2095
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2096
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2097
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --server="$CL_review_app_KUBE_URL" --certificate-authority <(echo $CL_review_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2098
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --token="$CL_review_app_KUBE_TOKEN"",
2099
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --namespace="pan-test-app-review"",
2100
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2101
- "kubernetesRollback",
2102
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
2103
- ],
2104
- "stage": "rollback review",
2105
- "variables": {
2106
- "GIT_STRATEGY": "none",
2107
- "KUBERNETES_CPU_REQUEST": "0.22",
2108
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2109
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2110
- },
2111
- },
2112
- "app 👮 lint": {
2113
- "cache": {
2114
- "key": {
2115
- "files": [
2116
- "Gemfile.lock",
2117
- ],
2118
- "prefix": "$CI_JOB_IMAGE",
2119
- },
2120
- "paths": [
2121
- "tmp/cache",
2122
- ],
2123
- },
2124
- "image": "ruby:3.2.1",
2125
- "interruptible": true,
2126
- "needs": [],
2127
- "retry": {
2128
- "max": 2,
2129
- "when": [
2130
- "runner_system_failure",
2131
- "stuck_or_timeout_failure",
2132
- ],
2133
- },
2134
- "script": [
2135
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2136
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2137
- "cd .",
2138
- "bundle config set path 'tmp/cache'",
2139
- "bundle install -j $(nproc)",
2140
- "bundle exec rubocop",
2141
- ],
2142
- "stage": "test",
2143
- "variables": {},
2144
- },
2145
- "app 🔨 docker | review ": {
2146
- "image": "path/to/docker/docker-build:the-version",
2147
- "interruptible": true,
2148
- "needs": [],
2149
- "retry": {
2150
- "max": 2,
2151
- "when": [
2152
- "runner_system_failure",
2153
- "stuck_or_timeout_failure",
2154
- ],
2155
- },
2156
- "script": [
2157
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2158
- "export APP_DIR="."",
2159
- "export DOCKER_BUILD_CONTEXT="."",
2160
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2161
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
2162
- "export DOCKER_IMAGE_NAME="review/app"",
2163
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2164
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2165
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2166
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2167
- "cd .",
2168
- "docker pull $DOCKER_CACHE_IMAGE || true",
2169
- "wget --output-document=- https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz | tar -zx --directory /usr/local/bin pack",
2170
- "chmod +x /usr/local/bin/pack",
2171
- "sed --in-place 's|git@\\([^:]*\\):|https://\\1/|g' Gemfile Gemfile.lock",
2172
- "pack build "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" --builder 'heroku/builder:22' --publish --cache-image "$DOCKER_CACHE_IMAGE" --env 'SECRET_KEY_BASE=dummy-value' ",
2173
- ],
2174
- "services": [
2175
- {
2176
- "command": [
2177
- "--tls=false",
2178
- ],
2179
- "name": "docker:24.0.6-dind",
2180
- },
2181
- ],
2182
- "stage": "build",
2183
- "variables": {
2184
- "DOCKER_BUILDKIT": "1",
2185
- "DOCKER_DRIVER": "overlay2",
2186
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2187
- "DOCKER_TLS_CERTDIR": "",
2188
- "KUBERNETES_CPU_REQUEST": "0.45",
2189
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2190
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2191
- },
2192
- },
2193
- "app 🚀 Deploy | review ": {
2194
- "allow_failure": false,
2195
- "artifacts": {
2196
- "reports": {
2197
- "dotenv": "gitlab_environment.env",
2198
- },
2199
- },
2200
- "environment": {
2201
- "auto_stop_in": "1 week",
2202
- "name": "review/$CI_COMMIT_REF_NAME/app",
2203
- "on_stop": "app 🛑 Stop ⚠️ | review ",
2204
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2205
- },
2206
- "image": "path/to/docker/kubernetes:the-version",
2207
- "interruptible": true,
2208
- "needs": [
2209
- {
2210
- "artifacts": false,
2211
- "job": "app 👮 lint",
2212
- },
2213
- {
2214
- "artifacts": false,
2215
- "job": "app 🔨 docker | review ",
2216
- },
2217
- {
2218
- "artifacts": false,
2219
- "job": "app 🧪 test",
2220
- },
2221
- {
2222
- "artifacts": true,
2223
- "job": "app 🧾 sbom | review ",
2224
- },
2225
- {
2226
- "artifacts": false,
2227
- "job": "app 🛡 audit",
2228
- },
2229
- ],
2230
- "retry": {
2231
- "max": 2,
2232
- "when": [
2233
- "runner_system_failure",
2234
- "stuck_or_timeout_failure",
2235
- ],
2236
- },
2237
- "rules": [
2238
- {
2239
- "when": "on_success",
2240
- },
2241
- ],
2242
- "script": [
2243
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2244
- "export ENV_SHORT="review"",
2245
- "export APP_DIR="."",
2246
- "export ENV_TYPE="review"",
2247
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2248
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2249
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2250
- "export ROOT_URL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2251
- "export HOST_INTERNAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2252
- "export HOST_CANONICAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2253
- "export ROOT_URL_INTERNAL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2254
- "export KUBE_NAMESPACE="pan-test-app-review"",
2255
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2256
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2257
- "export SECRET_KEY_BASE="$CL_review_app_SECRET_KEY_BASE"",
2258
- "export POSTGRESQL_PASSWORD="$CL_review_app_POSTGRESQL_PASSWORD"",
2259
- "export cloudsqlProxyCredentials="$CL_review_app_cloudsqlProxyCredentials"",
2260
- "export RAILS_ENV="production"",
2261
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2262
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2263
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
2264
- "export DOCKER_IMAGE_NAME="review/app"",
2265
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2266
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2267
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2268
- "export HELM_EXPERIMENTAL_OCI="1"",
2269
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2270
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2271
- "export HELM_ARGS=""",
2272
- "export COMPONENT_NAME="app"",
2273
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2274
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2275
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --server="$CL_review_app_KUBE_URL" --certificate-authority <(echo $CL_review_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2276
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --token="$CL_review_app_KUBE_TOKEN"",
2277
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --namespace="pan-test-app-review"",
2278
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2279
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2280
- "cat > __all_values.yml <<EOF
2281
- env:
2282
- secret:
2283
- SECRET_KEY_BASE: |-
2284
- $(printf %s "$CL_review_app_SECRET_KEY_BASE" | sed 's/^/ /')
2285
- POSTGRESQL_PASSWORD: |-
2286
- $(printf %s "$CL_review_app_POSTGRESQL_PASSWORD" | sed 's/^/ /')
2287
- cloudsqlProxyCredentials: |-
2288
- $(printf %s "$CL_review_app_cloudsqlProxyCredentials" | sed 's/^/ /')
2289
- public:
2290
- ENV_SHORT: |-
2291
- review
2292
- APP_DIR: |-
2293
- .
2294
- ENV_TYPE: |-
2295
- review
2296
- BUILD_INFO_BUILD_ID: |-
2297
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2298
- BUILD_INFO_BUILD_TIME: |-
2299
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2300
- BUILD_INFO_CURRENT_VERSION: |-
2301
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
2302
- ROOT_URL: |-
2303
- $(printf %s "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
2304
- HOST_INTERNAL: |-
2305
- $(printf %s "app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
2306
- HOST_CANONICAL: |-
2307
- $(printf %s "app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
2308
- ROOT_URL_INTERNAL: |-
2309
- $(printf %s "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
2310
- KUBE_NAMESPACE: |-
2311
- pan-test-app-review
2312
- KUBE_APP_NAME: |-
2313
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" | sed 's/^/ /')
2314
- KUBE_APP_NAME_PREFIX: |-
2315
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
2316
- RAILS_ENV: |-
2317
- production
2318
- _ALL_ENV_VAR_KEYS: |-
2319
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","SECRET_KEY_BASE","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials","RAILS_ENV"]
2320
- application:
2321
- host: |-
2322
- $(printf %s "app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
2323
- command: |-
2324
- /cnb/process/web
2325
- livenessProbe:
2326
- httpGet:
2327
- path: |-
2328
- __health
2329
- readinessProbe:
2330
- httpGet:
2331
- path: |-
2332
- __health
2333
- startupProbe:
2334
- httpGet:
2335
- path: |-
2336
- __health
2337
- worker:
2338
- enabled: true
2339
- command: |-
2340
- launcher bundle exec rake jobs:work
2341
- livenessProbe: false
2342
- cloudsql:
2343
- enabled: true
2344
- dbUser: |-
2345
- postgres
2346
- instanceConnectionName: |-
2347
- some-project-id:europe-west6:pan-test-app-review
2348
- proxyCredentials: |-
2349
- $CL_review_app_cloudsqlProxyCredentials
2350
- fullDbName: |-
2351
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" | sed 's/^/ /')
2352
- projectId: |-
2353
- some-project-id
2354
- jobs:
2355
- db-migrate:
2356
- hook: |-
2357
- post-upgrade
2358
- command: |-
2359
- launcher bundle exec rake db:migrate
2360
- db-prepare-seed:
2361
- hook: |-
2362
- post-install
2363
- command: |-
2364
- launcher bundle exec rake db:prepare db:seed
2365
-
2366
- EOF
2367
- ",
2368
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2369
- "kubernetesCreateSecret",
2370
- "kubernetesDeploy",
2371
- "echo 'Uploading SBOM to Dependency Track'",
2372
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2373
- "echo deployment successful 😻",
2374
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
2375
- ],
2376
- "stage": "deploy review",
2377
- "variables": {
2378
- "KUBERNETES_CPU_REQUEST": "0.22",
2379
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2380
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2381
- },
2382
- },
2383
- "app 🛑 Stop ⚠️ | review ": {
2384
- "allow_failure": true,
2385
- "artifacts": {
2386
- "reports": {
2387
- "dotenv": "gitlab_environment.env",
2388
- },
2389
- },
2390
- "environment": {
2391
- "action": "stop",
2392
- "name": "review/$CI_COMMIT_REF_NAME/app",
2393
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2394
- },
2395
- "image": "path/to/docker/kubernetes:the-version",
2396
- "interruptible": true,
2397
- "needs": [],
2398
- "retry": {
2399
- "max": 2,
2400
- "when": [
2401
- "runner_system_failure",
2402
- "stuck_or_timeout_failure",
2403
- ],
2404
- },
2405
- "rules": [
2406
- {
2407
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2408
- "when": "on_success",
2409
- },
2410
- {
2411
- "when": "manual",
2412
- },
2413
- ],
2414
- "script": [
2415
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2416
- "export ENV_SHORT="review"",
2417
- "export APP_DIR="."",
2418
- "export ENV_TYPE="review"",
2419
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2420
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2421
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2422
- "export ROOT_URL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2423
- "export HOST_INTERNAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2424
- "export HOST_CANONICAL="app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2425
- "export ROOT_URL_INTERNAL="https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2426
- "export KUBE_NAMESPACE="pan-test-app-review"",
2427
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2428
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2429
- "export SECRET_KEY_BASE="$CL_review_app_SECRET_KEY_BASE"",
2430
- "export POSTGRESQL_PASSWORD="$CL_review_app_POSTGRESQL_PASSWORD"",
2431
- "export cloudsqlProxyCredentials="$CL_review_app_cloudsqlProxyCredentials"",
2432
- "export RAILS_ENV="production"",
2433
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2434
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2435
- "export HELM_EXPERIMENTAL_OCI="1"",
2436
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2437
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2438
- "export HELM_ARGS=""",
2439
- "export COMPONENT_NAME="app"",
2440
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2441
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2442
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --server="$CL_review_app_KUBE_URL" --certificate-authority <(echo $CL_review_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2443
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --token="$CL_review_app_KUBE_TOKEN"",
2444
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --namespace="pan-test-app-review"",
2445
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
2446
- "kubernetesDelete",
2447
- "echo 'Disabling component in Dependency Track'",
2448
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
2449
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
2450
- ],
2451
- "stage": "stop review",
2452
- "variables": {
2453
- "GIT_STRATEGY": "none",
2454
- "KUBERNETES_CPU_REQUEST": "0.22",
2455
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2456
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2457
- },
2458
- },
2459
- "app 🛡 audit": {
2460
- "allow_failure": true,
2461
- "image": "ruby:3.2.1",
2462
- "interruptible": true,
2463
- "needs": [],
2464
- "retry": {
2465
- "max": 2,
2466
- "when": [
2467
- "runner_system_failure",
2468
- "stuck_or_timeout_failure",
2469
- ],
2470
- },
2471
- "script": [
2472
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2473
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2474
- "cd .",
2475
- "gem install bundler-audit",
2476
- "bundle audit check",
2477
- ],
2478
- "stage": "test",
2479
- "variables": {},
2480
- },
2481
- "app 🧪 test": {
2482
- "cache": {
2483
- "key": {
2484
- "files": [
2485
- "Gemfile.lock",
2486
- ],
2487
- "prefix": "$CI_JOB_IMAGE",
2488
- },
2489
- "paths": [
2490
- "tmp/cache",
2491
- ],
2492
- },
2493
- "image": "ruby:3.2.1",
2494
- "interruptible": true,
2495
- "needs": [],
2496
- "retry": {
2497
- "max": 2,
2498
- "when": [
2499
- "runner_system_failure",
2500
- "stuck_or_timeout_failure",
2501
- ],
2502
- },
2503
- "script": [
2504
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2505
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2506
- "cd .",
2507
- "bundle config set path 'tmp/cache'",
2508
- "bundle install -j $(nproc)",
2509
- "bundle exec rspec",
2510
- ],
2511
- "stage": "test",
2512
- "variables": {},
2513
- },
2514
- "app 🧾 sbom | review ": {
2515
- "allow_failure": true,
2516
- "artifacts": {
2517
- "paths": [
2518
- "__sbom.json",
2519
- ],
2520
- },
2521
- "image": "aquasec/trivy:0.38.3",
2522
- "interruptible": true,
2523
- "needs": [],
2524
- "retry": {
2525
- "max": 2,
2526
- "when": [
2527
- "runner_system_failure",
2528
- "stuck_or_timeout_failure",
2529
- ],
2530
- },
2531
- "script": [
2532
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2533
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2534
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" .",
2535
- ],
2536
- "stage": "build",
2537
- "variables": {},
2538
- },
2539
- },
2540
- "stages": [
2541
- "setup",
2542
- "setup dev",
2543
- "setup review",
2544
- "setup stage",
2545
- "setup prod",
2546
- "test",
2547
- "test dev",
2548
- "test review",
2549
- "test stage",
2550
- "test prod",
2551
- "build",
2552
- "build dev",
2553
- "build review",
2554
- "build stage",
2555
- "build prod",
2556
- "deploy",
2557
- "deploy dev",
2558
- "deploy review",
2559
- "deploy stage",
2560
- "deploy prod",
2561
- "verify",
2562
- "verify dev",
2563
- "verify review",
2564
- "verify stage",
2565
- "verify prod",
2566
- "rollback",
2567
- "rollback dev",
2568
- "rollback review",
2569
- "rollback stage",
2570
- "rollback prod",
2571
- "stop",
2572
- "stop dev",
2573
- "stop review",
2574
- "stop stage",
2575
- "stop prod",
2576
- ],
2577
- "variables": {
2578
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2579
- "CACHE_COMPRESSION_LEVEL": "fast",
2580
- "FF_USE_FASTZIP": "true",
2581
- "GIT_DEPTH": "1",
2582
- "TRANSFER_METER_FREQUENCY": "5s",
2583
- },
2584
- "workflow": {
2585
- "rules": [
2586
- {
2587
- "if": "$CI_COMMIT_TAG",
2588
- },
2589
- {
2590
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2591
- "when": "never",
2592
- },
2593
- {
2594
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2595
- "when": "never",
2596
- },
2597
- {
2598
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2599
- },
2600
- {
2601
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2602
- },
2603
- {
2604
- "if": "$CI_MERGE_REQUEST_ID",
2605
- },
2606
- ],
2607
- },
2608
- },
2609
- "taggedRelease": {
2610
- "image": "path/to/docker/jobs-default:the-version",
2611
- "jobs": {
2612
- "app ↩️ Rollback ⚠️ | prod ": {
2613
- "allow_failure": true,
2614
- "artifacts": {
2615
- "reports": {
2616
- "dotenv": "gitlab_environment.env",
2617
- },
2618
- },
2619
- "environment": {
2620
- "action": "access",
2621
- "name": "prod/app",
2622
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2623
- },
2624
- "image": "path/to/docker/kubernetes:the-version",
2625
- "interruptible": true,
2626
- "needs": [],
2627
- "retry": {
2628
- "max": 2,
2629
- "when": [
2630
- "runner_system_failure",
2631
- "stuck_or_timeout_failure",
2632
- ],
2633
- },
2634
- "rules": [
2635
- {
2636
- "when": "manual",
2637
- },
2638
- ],
2639
- "script": [
2640
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2641
- "export ENV_SHORT="prod"",
2642
- "export APP_DIR="."",
2643
- "export ENV_TYPE="prod"",
2644
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2645
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2646
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2647
- "export ROOT_URL="https://my-fancy-website.com"",
2648
- "export HOST_INTERNAL="app.prod.test-app.pan.panter.cloud"",
2649
- "export HOST_CANONICAL="app.prod.test-app.pan.panter.cloud"",
2650
- "export ROOT_URL_INTERNAL="https://app.prod.test-app.pan.panter.cloud"",
2651
- "export KUBE_NAMESPACE="pan-test-app-prod"",
2652
- "export KUBE_APP_NAME="app"",
2653
- "export KUBE_APP_NAME_PREFIX=""",
2654
- "export SECRET_KEY_BASE="$CL_prod_app_SECRET_KEY_BASE"",
2655
- "export POSTGRESQL_PASSWORD="$CL_prod_app_POSTGRESQL_PASSWORD"",
2656
- "export cloudsqlProxyCredentials="$CL_prod_app_cloudsqlProxyCredentials"",
2657
- "export RAILS_ENV="production"",
2658
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2659
- "export RELEASE_NAME="pan-test-app-prod-app"",
2660
- "export HELM_EXPERIMENTAL_OCI="1"",
2661
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2662
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2663
- "export HELM_ARGS=""",
2664
- "export COMPONENT_NAME="app"",
2665
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2666
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2667
- "kubectl config set-cluster "kube-pan-test-app-prod-app" --server="$CL_prod_app_KUBE_URL" --certificate-authority <(echo $CL_prod_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2668
- "kubectl config set-credentials "kube-pan-test-app-prod-app" --token="$CL_prod_app_KUBE_TOKEN"",
2669
- "kubectl config set-context "kube-pan-test-app-prod-app" --cluster="kube-pan-test-app-prod-app" --user="kube-pan-test-app-prod-app" --namespace="pan-test-app-prod"",
2670
- "kubectl config use-context "kube-pan-test-app-prod-app"",
2671
- "kubernetesRollback",
2672
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
2673
- ],
2674
- "stage": "rollback prod",
2675
- "variables": {
2676
- "GIT_STRATEGY": "none",
2677
- "KUBERNETES_CPU_REQUEST": "0.22",
2678
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2679
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2680
- },
2681
- },
2682
- "app ↩️ Rollback ⚠️ | stage ": {
2683
- "allow_failure": true,
2684
- "artifacts": {
2685
- "reports": {
2686
- "dotenv": "gitlab_environment.env",
2687
- },
2688
- },
2689
- "environment": {
2690
- "action": "access",
2691
- "name": "stage/app",
2692
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2693
- },
2694
- "image": "path/to/docker/kubernetes:the-version",
2695
- "interruptible": true,
2696
- "needs": [],
2697
- "retry": {
2698
- "max": 2,
2699
- "when": [
2700
- "runner_system_failure",
2701
- "stuck_or_timeout_failure",
2702
- ],
2703
- },
2704
- "rules": [
2705
- {
2706
- "when": "manual",
2707
- },
2708
- ],
2709
- "script": [
2710
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2711
- "export ENV_SHORT="stage"",
2712
- "export APP_DIR="."",
2713
- "export ENV_TYPE="stage"",
2714
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2715
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2716
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2717
- "export ROOT_URL="https://app.stage.test-app.pan.panter.cloud"",
2718
- "export HOST_INTERNAL="app.stage.test-app.pan.panter.cloud"",
2719
- "export HOST_CANONICAL="app.stage.test-app.pan.panter.cloud"",
2720
- "export ROOT_URL_INTERNAL="https://app.stage.test-app.pan.panter.cloud"",
2721
- "export KUBE_NAMESPACE="pan-test-app-stage"",
2722
- "export KUBE_APP_NAME="app"",
2723
- "export KUBE_APP_NAME_PREFIX=""",
2724
- "export SECRET_KEY_BASE="$CL_stage_app_SECRET_KEY_BASE"",
2725
- "export POSTGRESQL_PASSWORD="$CL_stage_app_POSTGRESQL_PASSWORD"",
2726
- "export cloudsqlProxyCredentials="$CL_stage_app_cloudsqlProxyCredentials"",
2727
- "export RAILS_ENV="production"",
2728
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2729
- "export RELEASE_NAME="pan-test-app-stage-app"",
2730
- "export HELM_EXPERIMENTAL_OCI="1"",
2731
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2732
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2733
- "export HELM_ARGS=""",
2734
- "export COMPONENT_NAME="app"",
2735
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2736
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2737
- "kubectl config set-cluster "kube-pan-test-app-stage-app" --server="$CL_stage_app_KUBE_URL" --certificate-authority <(echo $CL_stage_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2738
- "kubectl config set-credentials "kube-pan-test-app-stage-app" --token="$CL_stage_app_KUBE_TOKEN"",
2739
- "kubectl config set-context "kube-pan-test-app-stage-app" --cluster="kube-pan-test-app-stage-app" --user="kube-pan-test-app-stage-app" --namespace="pan-test-app-stage"",
2740
- "kubectl config use-context "kube-pan-test-app-stage-app"",
2741
- "kubernetesRollback",
2742
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
2743
- ],
2744
- "stage": "rollback stage",
2745
- "variables": {
2746
- "GIT_STRATEGY": "none",
2747
- "KUBERNETES_CPU_REQUEST": "0.22",
2748
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2749
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2750
- },
2751
- },
2752
- "app 🔨 docker | prod ": {
2753
- "image": "path/to/docker/docker-build:the-version",
2754
- "interruptible": true,
2755
- "needs": [],
2756
- "retry": {
2757
- "max": 2,
2758
- "when": [
2759
- "runner_system_failure",
2760
- "stuck_or_timeout_failure",
2761
- ],
2762
- },
2763
- "script": [
2764
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2765
- "export APP_DIR="."",
2766
- "export DOCKER_BUILD_CONTEXT="."",
2767
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2768
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
2769
- "export DOCKER_IMAGE_NAME="prod/app"",
2770
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2771
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2772
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2773
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2774
- "cd .",
2775
- "docker pull $DOCKER_CACHE_IMAGE || true",
2776
- "wget --output-document=- https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz | tar -zx --directory /usr/local/bin pack",
2777
- "chmod +x /usr/local/bin/pack",
2778
- "sed --in-place 's|git@\\([^:]*\\):|https://\\1/|g' Gemfile Gemfile.lock",
2779
- "pack build "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" --builder 'heroku/builder:22' --publish --cache-image "$DOCKER_CACHE_IMAGE" --env 'SECRET_KEY_BASE=dummy-value' ",
2780
- ],
2781
- "services": [
2782
- {
2783
- "command": [
2784
- "--tls=false",
2785
- ],
2786
- "name": "docker:24.0.6-dind",
2787
- },
2788
- ],
2789
- "stage": "build",
2790
- "variables": {
2791
- "DOCKER_BUILDKIT": "1",
2792
- "DOCKER_DRIVER": "overlay2",
2793
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2794
- "DOCKER_TLS_CERTDIR": "",
2795
- "KUBERNETES_CPU_REQUEST": "0.45",
2796
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2797
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2798
- },
2799
- },
2800
- "app 🔨 docker | stage ": {
2801
- "image": "path/to/docker/docker-build:the-version",
2802
- "interruptible": true,
2803
- "needs": [],
2804
- "retry": {
2805
- "max": 2,
2806
- "when": [
2807
- "runner_system_failure",
2808
- "stuck_or_timeout_failure",
2809
- ],
2810
- },
2811
- "script": [
2812
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2813
- "export APP_DIR="."",
2814
- "export DOCKER_BUILD_CONTEXT="."",
2815
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2816
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
2817
- "export DOCKER_IMAGE_NAME="stage/app"",
2818
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2819
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2820
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2821
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2822
- "cd .",
2823
- "docker pull $DOCKER_CACHE_IMAGE || true",
2824
- "wget --output-document=- https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz | tar -zx --directory /usr/local/bin pack",
2825
- "chmod +x /usr/local/bin/pack",
2826
- "sed --in-place 's|git@\\([^:]*\\):|https://\\1/|g' Gemfile Gemfile.lock",
2827
- "pack build "$DOCKER_IMAGE:$DOCKER_IMAGE_TAG" --builder 'heroku/builder:22' --publish --cache-image "$DOCKER_CACHE_IMAGE" --env 'SECRET_KEY_BASE=dummy-value' ",
2828
- ],
2829
- "services": [
2830
- {
2831
- "command": [
2832
- "--tls=false",
2833
- ],
2834
- "name": "docker:24.0.6-dind",
2835
- },
2836
- ],
2837
- "stage": "build",
2838
- "variables": {
2839
- "DOCKER_BUILDKIT": "1",
2840
- "DOCKER_DRIVER": "overlay2",
2841
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2842
- "DOCKER_TLS_CERTDIR": "",
2843
- "KUBERNETES_CPU_REQUEST": "0.45",
2844
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2845
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2846
- },
2847
- },
2848
- "app 🚀 Deploy | prod ": {
2849
- "allow_failure": true,
2850
- "artifacts": {
2851
- "reports": {
2852
- "dotenv": "gitlab_environment.env",
2853
- },
2854
- },
2855
- "environment": {
2856
- "auto_stop_in": undefined,
2857
- "name": "prod/app",
2858
- "on_stop": "app 🛑 Stop ⚠️ | prod ",
2859
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2860
- },
2861
- "image": "path/to/docker/kubernetes:the-version",
2862
- "interruptible": true,
2863
- "needs": [
2864
- {
2865
- "artifacts": false,
2866
- "job": "app 🔨 docker | prod ",
2867
- },
2868
- {
2869
- "artifacts": true,
2870
- "job": "app 🧾 sbom | prod ",
2871
- },
2872
- ],
2873
- "retry": {
2874
- "max": 2,
2875
- "when": [
2876
- "runner_system_failure",
2877
- "stuck_or_timeout_failure",
2878
- ],
2879
- },
2880
- "rules": [
2881
- {
2882
- "when": "manual",
2883
- },
2884
- ],
2885
- "script": [
2886
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2887
- "export ENV_SHORT="prod"",
2888
- "export APP_DIR="."",
2889
- "export ENV_TYPE="prod"",
2890
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2891
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2892
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2893
- "export ROOT_URL="https://my-fancy-website.com"",
2894
- "export HOST_INTERNAL="app.prod.test-app.pan.panter.cloud"",
2895
- "export HOST_CANONICAL="app.prod.test-app.pan.panter.cloud"",
2896
- "export ROOT_URL_INTERNAL="https://app.prod.test-app.pan.panter.cloud"",
2897
- "export KUBE_NAMESPACE="pan-test-app-prod"",
2898
- "export KUBE_APP_NAME="app"",
2899
- "export KUBE_APP_NAME_PREFIX=""",
2900
- "export SECRET_KEY_BASE="$CL_prod_app_SECRET_KEY_BASE"",
2901
- "export POSTGRESQL_PASSWORD="$CL_prod_app_POSTGRESQL_PASSWORD"",
2902
- "export cloudsqlProxyCredentials="$CL_prod_app_cloudsqlProxyCredentials"",
2903
- "export RAILS_ENV="production"",
2904
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
2905
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2906
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
2907
- "export DOCKER_IMAGE_NAME="prod/app"",
2908
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2909
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2910
- "export RELEASE_NAME="pan-test-app-prod-app"",
2911
- "export HELM_EXPERIMENTAL_OCI="1"",
2912
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
2913
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2914
- "export HELM_ARGS=""",
2915
- "export COMPONENT_NAME="app"",
2916
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2917
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2918
- "kubectl config set-cluster "kube-pan-test-app-prod-app" --server="$CL_prod_app_KUBE_URL" --certificate-authority <(echo $CL_prod_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2919
- "kubectl config set-credentials "kube-pan-test-app-prod-app" --token="$CL_prod_app_KUBE_TOKEN"",
2920
- "kubectl config set-context "kube-pan-test-app-prod-app" --cluster="kube-pan-test-app-prod-app" --user="kube-pan-test-app-prod-app" --namespace="pan-test-app-prod"",
2921
- "kubectl config use-context "kube-pan-test-app-prod-app"",
2922
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2923
- "cat > __all_values.yml <<EOF
2924
- env:
2925
- secret:
2926
- SECRET_KEY_BASE: |-
2927
- $(printf %s "$CL_prod_app_SECRET_KEY_BASE" | sed 's/^/ /')
2928
- POSTGRESQL_PASSWORD: |-
2929
- $(printf %s "$CL_prod_app_POSTGRESQL_PASSWORD" | sed 's/^/ /')
2930
- cloudsqlProxyCredentials: |-
2931
- $(printf %s "$CL_prod_app_cloudsqlProxyCredentials" | sed 's/^/ /')
2932
- public:
2933
- ENV_SHORT: |-
2934
- prod
2935
- APP_DIR: |-
2936
- .
2937
- ENV_TYPE: |-
2938
- prod
2939
- BUILD_INFO_BUILD_ID: |-
2940
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2941
- BUILD_INFO_BUILD_TIME: |-
2942
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2943
- BUILD_INFO_CURRENT_VERSION: |-
2944
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
2945
- ROOT_URL: |-
2946
- https://my-fancy-website.com
2947
- HOST_INTERNAL: |-
2948
- app.prod.test-app.pan.panter.cloud
2949
- HOST_CANONICAL: |-
2950
- app.prod.test-app.pan.panter.cloud
2951
- ROOT_URL_INTERNAL: |-
2952
- https://app.prod.test-app.pan.panter.cloud
2953
- KUBE_NAMESPACE: |-
2954
- pan-test-app-prod
2955
- KUBE_APP_NAME: |-
2956
- app
2957
- KUBE_APP_NAME_PREFIX: ""
2958
- RAILS_ENV: |-
2959
- production
2960
- _ALL_ENV_VAR_KEYS: |-
2961
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","SECRET_KEY_BASE","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials","RAILS_ENV"]
2962
- application:
2963
- host: |-
2964
- my-fancy-website.com
2965
- command: |-
2966
- /cnb/process/web
2967
- livenessProbe:
2968
- httpGet:
2969
- path: |-
2970
- __health
2971
- readinessProbe:
2972
- httpGet:
2973
- path: |-
2974
- __health
2975
- startupProbe:
2976
- httpGet:
2977
- path: |-
2978
- __health
2979
- worker:
2980
- enabled: true
2981
- command: |-
2982
- launcher bundle exec rake jobs:work
2983
- livenessProbe: false
2984
- cloudsql:
2985
- enabled: true
2986
- dbUser: |-
2987
- postgres
2988
- instanceConnectionName: |-
2989
- some-project-id:europe-west6:pan-test-app-prod
2990
- proxyCredentials: |-
2991
- $CL_prod_app_cloudsqlProxyCredentials
2992
- fullDbName: |-
2993
- app
2994
- projectId: |-
2995
- some-project-id
2996
- jobs:
2997
- db-migrate:
2998
- hook: |-
2999
- post-install,post-upgrade
3000
- command: |-
3001
- launcher bundle exec rake db:migrate
3002
-
3003
- EOF
3004
- ",
3005
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
3006
- "kubernetesCreateSecret",
3007
- "kubernetesDeploy",
3008
- "echo 'Uploading SBOM to Dependency Track'",
3009
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://my-fancy-website.com" "__sbom.json" vex.json || true",
3010
- "echo deployment successful 😻",
3011
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
3012
- ],
3013
- "stage": "deploy prod",
3014
- "variables": {
3015
- "KUBERNETES_CPU_REQUEST": "0.22",
3016
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3017
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3018
- },
3019
- },
3020
- "app 🚀 Deploy | stage ": {
3021
- "allow_failure": false,
3022
- "artifacts": {
3023
- "reports": {
3024
- "dotenv": "gitlab_environment.env",
3025
- },
3026
- },
3027
- "environment": {
3028
- "auto_stop_in": undefined,
3029
- "name": "stage/app",
3030
- "on_stop": "app 🛑 Stop ⚠️ | stage ",
3031
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3032
- },
3033
- "image": "path/to/docker/kubernetes:the-version",
3034
- "interruptible": true,
3035
- "needs": [
3036
- {
3037
- "artifacts": false,
3038
- "job": "app 🔨 docker | stage ",
3039
- },
3040
- {
3041
- "artifacts": true,
3042
- "job": "app 🧾 sbom | stage ",
3043
- },
3044
- ],
3045
- "retry": {
3046
- "max": 2,
3047
- "when": [
3048
- "runner_system_failure",
3049
- "stuck_or_timeout_failure",
3050
- ],
3051
- },
3052
- "rules": [
3053
- {
3054
- "when": "on_success",
3055
- },
3056
- ],
3057
- "script": [
3058
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3059
- "export ENV_SHORT="stage"",
3060
- "export APP_DIR="."",
3061
- "export ENV_TYPE="stage"",
3062
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3063
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3064
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
3065
- "export ROOT_URL="https://app.stage.test-app.pan.panter.cloud"",
3066
- "export HOST_INTERNAL="app.stage.test-app.pan.panter.cloud"",
3067
- "export HOST_CANONICAL="app.stage.test-app.pan.panter.cloud"",
3068
- "export ROOT_URL_INTERNAL="https://app.stage.test-app.pan.panter.cloud"",
3069
- "export KUBE_NAMESPACE="pan-test-app-stage"",
3070
- "export KUBE_APP_NAME="app"",
3071
- "export KUBE_APP_NAME_PREFIX=""",
3072
- "export SECRET_KEY_BASE="$CL_stage_app_SECRET_KEY_BASE"",
3073
- "export POSTGRESQL_PASSWORD="$CL_stage_app_POSTGRESQL_PASSWORD"",
3074
- "export cloudsqlProxyCredentials="$CL_stage_app_cloudsqlProxyCredentials"",
3075
- "export RAILS_ENV="production"",
3076
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
3077
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
3078
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app"",
3079
- "export DOCKER_IMAGE_NAME="stage/app"",
3080
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
3081
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3082
- "export RELEASE_NAME="pan-test-app-stage-app"",
3083
- "export HELM_EXPERIMENTAL_OCI="1"",
3084
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
3085
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3086
- "export HELM_ARGS=""",
3087
- "export COMPONENT_NAME="app"",
3088
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3089
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3090
- "kubectl config set-cluster "kube-pan-test-app-stage-app" --server="$CL_stage_app_KUBE_URL" --certificate-authority <(echo $CL_stage_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3091
- "kubectl config set-credentials "kube-pan-test-app-stage-app" --token="$CL_stage_app_KUBE_TOKEN"",
3092
- "kubectl config set-context "kube-pan-test-app-stage-app" --cluster="kube-pan-test-app-stage-app" --user="kube-pan-test-app-stage-app" --namespace="pan-test-app-stage"",
3093
- "kubectl config use-context "kube-pan-test-app-stage-app"",
3094
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
3095
- "cat > __all_values.yml <<EOF
3096
- env:
3097
- secret:
3098
- SECRET_KEY_BASE: |-
3099
- $(printf %s "$CL_stage_app_SECRET_KEY_BASE" | sed 's/^/ /')
3100
- POSTGRESQL_PASSWORD: |-
3101
- $(printf %s "$CL_stage_app_POSTGRESQL_PASSWORD" | sed 's/^/ /')
3102
- cloudsqlProxyCredentials: |-
3103
- $(printf %s "$CL_stage_app_cloudsqlProxyCredentials" | sed 's/^/ /')
3104
- public:
3105
- ENV_SHORT: |-
3106
- stage
3107
- APP_DIR: |-
3108
- .
3109
- ENV_TYPE: |-
3110
- stage
3111
- BUILD_INFO_BUILD_ID: |-
3112
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3113
- BUILD_INFO_BUILD_TIME: |-
3114
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3115
- BUILD_INFO_CURRENT_VERSION: |-
3116
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
3117
- ROOT_URL: |-
3118
- https://app.stage.test-app.pan.panter.cloud
3119
- HOST_INTERNAL: |-
3120
- app.stage.test-app.pan.panter.cloud
3121
- HOST_CANONICAL: |-
3122
- app.stage.test-app.pan.panter.cloud
3123
- ROOT_URL_INTERNAL: |-
3124
- https://app.stage.test-app.pan.panter.cloud
3125
- KUBE_NAMESPACE: |-
3126
- pan-test-app-stage
3127
- KUBE_APP_NAME: |-
3128
- app
3129
- KUBE_APP_NAME_PREFIX: ""
3130
- RAILS_ENV: |-
3131
- production
3132
- _ALL_ENV_VAR_KEYS: |-
3133
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","SECRET_KEY_BASE","POSTGRESQL_PASSWORD","cloudsqlProxyCredentials","RAILS_ENV"]
3134
- application:
3135
- host: |-
3136
- app.stage.test-app.pan.panter.cloud
3137
- command: |-
3138
- /cnb/process/web
3139
- livenessProbe:
3140
- httpGet:
3141
- path: |-
3142
- __health
3143
- readinessProbe:
3144
- httpGet:
3145
- path: |-
3146
- __health
3147
- startupProbe:
3148
- httpGet:
3149
- path: |-
3150
- __health
3151
- worker:
3152
- enabled: true
3153
- command: |-
3154
- launcher bundle exec rake jobs:work
3155
- livenessProbe: false
3156
- cloudsql:
3157
- enabled: true
3158
- dbUser: |-
3159
- postgres
3160
- instanceConnectionName: |-
3161
- some-project-id:europe-west6:pan-test-app-stage
3162
- proxyCredentials: |-
3163
- $CL_stage_app_cloudsqlProxyCredentials
3164
- fullDbName: |-
3165
- app
3166
- projectId: |-
3167
- some-project-id
3168
- jobs:
3169
- db-migrate:
3170
- hook: |-
3171
- post-install,post-upgrade
3172
- command: |-
3173
- launcher bundle exec rake db:migrate
3174
-
3175
- EOF
3176
- ",
3177
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
3178
- "kubernetesCreateSecret",
3179
- "kubernetesDeploy",
3180
- "echo 'Uploading SBOM to Dependency Track'",
3181
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
3182
- "echo deployment successful 😻",
3183
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
3184
- ],
3185
- "stage": "deploy stage",
3186
- "variables": {
3187
- "KUBERNETES_CPU_REQUEST": "0.22",
3188
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3189
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3190
- },
3191
- },
3192
- "app 🛑 Stop ⚠️ | prod ": {
3193
- "allow_failure": true,
3194
- "artifacts": {
3195
- "reports": {
3196
- "dotenv": "gitlab_environment.env",
3197
- },
3198
- },
3199
- "environment": {
3200
- "action": "stop",
3201
- "name": "prod/app",
3202
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3203
- },
3204
- "image": "path/to/docker/kubernetes:the-version",
3205
- "interruptible": true,
3206
- "needs": [],
3207
- "retry": {
3208
- "max": 2,
3209
- "when": [
3210
- "runner_system_failure",
3211
- "stuck_or_timeout_failure",
3212
- ],
3213
- },
3214
- "rules": [
3215
- {
3216
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3217
- "when": "on_success",
3218
- },
3219
- {
3220
- "when": "manual",
3221
- },
3222
- ],
3223
- "script": [
3224
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3225
- "export ENV_SHORT="prod"",
3226
- "export APP_DIR="."",
3227
- "export ENV_TYPE="prod"",
3228
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3229
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3230
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
3231
- "export ROOT_URL="https://my-fancy-website.com"",
3232
- "export HOST_INTERNAL="app.prod.test-app.pan.panter.cloud"",
3233
- "export HOST_CANONICAL="app.prod.test-app.pan.panter.cloud"",
3234
- "export ROOT_URL_INTERNAL="https://app.prod.test-app.pan.panter.cloud"",
3235
- "export KUBE_NAMESPACE="pan-test-app-prod"",
3236
- "export KUBE_APP_NAME="app"",
3237
- "export KUBE_APP_NAME_PREFIX=""",
3238
- "export SECRET_KEY_BASE="$CL_prod_app_SECRET_KEY_BASE"",
3239
- "export POSTGRESQL_PASSWORD="$CL_prod_app_POSTGRESQL_PASSWORD"",
3240
- "export cloudsqlProxyCredentials="$CL_prod_app_cloudsqlProxyCredentials"",
3241
- "export RAILS_ENV="production"",
3242
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
3243
- "export RELEASE_NAME="pan-test-app-prod-app"",
3244
- "export HELM_EXPERIMENTAL_OCI="1"",
3245
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
3246
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3247
- "export HELM_ARGS=""",
3248
- "export COMPONENT_NAME="app"",
3249
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3250
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3251
- "kubectl config set-cluster "kube-pan-test-app-prod-app" --server="$CL_prod_app_KUBE_URL" --certificate-authority <(echo $CL_prod_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3252
- "kubectl config set-credentials "kube-pan-test-app-prod-app" --token="$CL_prod_app_KUBE_TOKEN"",
3253
- "kubectl config set-context "kube-pan-test-app-prod-app" --cluster="kube-pan-test-app-prod-app" --user="kube-pan-test-app-prod-app" --namespace="pan-test-app-prod"",
3254
- "kubectl config use-context "kube-pan-test-app-prod-app"",
3255
- "kubernetesDelete",
3256
- "echo 'Disabling component in Dependency Track'",
3257
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://my-fancy-website.com" || true",
3258
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
3259
- ],
3260
- "stage": "stop prod",
3261
- "variables": {
3262
- "GIT_STRATEGY": "none",
3263
- "KUBERNETES_CPU_REQUEST": "0.22",
3264
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3265
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3266
- },
3267
- },
3268
- "app 🛑 Stop ⚠️ | stage ": {
3269
- "allow_failure": true,
3270
- "artifacts": {
3271
- "reports": {
3272
- "dotenv": "gitlab_environment.env",
3273
- },
3274
- },
3275
- "environment": {
3276
- "action": "stop",
3277
- "name": "stage/app",
3278
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3279
- },
3280
- "image": "path/to/docker/kubernetes:the-version",
3281
- "interruptible": true,
3282
- "needs": [],
3283
- "retry": {
3284
- "max": 2,
3285
- "when": [
3286
- "runner_system_failure",
3287
- "stuck_or_timeout_failure",
3288
- ],
3289
- },
3290
- "rules": [
3291
- {
3292
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3293
- "when": "on_success",
3294
- },
3295
- {
3296
- "when": "manual",
3297
- },
3298
- ],
3299
- "script": [
3300
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3301
- "export ENV_SHORT="stage"",
3302
- "export APP_DIR="."",
3303
- "export ENV_TYPE="stage"",
3304
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3305
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3306
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
3307
- "export ROOT_URL="https://app.stage.test-app.pan.panter.cloud"",
3308
- "export HOST_INTERNAL="app.stage.test-app.pan.panter.cloud"",
3309
- "export HOST_CANONICAL="app.stage.test-app.pan.panter.cloud"",
3310
- "export ROOT_URL_INTERNAL="https://app.stage.test-app.pan.panter.cloud"",
3311
- "export KUBE_NAMESPACE="pan-test-app-stage"",
3312
- "export KUBE_APP_NAME="app"",
3313
- "export KUBE_APP_NAME_PREFIX=""",
3314
- "export SECRET_KEY_BASE="$CL_stage_app_SECRET_KEY_BASE"",
3315
- "export POSTGRESQL_PASSWORD="$CL_stage_app_POSTGRESQL_PASSWORD"",
3316
- "export cloudsqlProxyCredentials="$CL_stage_app_cloudsqlProxyCredentials"",
3317
- "export RAILS_ENV="production"",
3318
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"SECRET_KEY_BASE\\",\\"POSTGRESQL_PASSWORD\\",\\"cloudsqlProxyCredentials\\",\\"RAILS_ENV\\"]"",
3319
- "export RELEASE_NAME="pan-test-app-stage-app"",
3320
- "export HELM_EXPERIMENTAL_OCI="1"",
3321
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app"",
3322
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3323
- "export HELM_ARGS=""",
3324
- "export COMPONENT_NAME="app"",
3325
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3326
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3327
- "kubectl config set-cluster "kube-pan-test-app-stage-app" --server="$CL_stage_app_KUBE_URL" --certificate-authority <(echo $CL_stage_app_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3328
- "kubectl config set-credentials "kube-pan-test-app-stage-app" --token="$CL_stage_app_KUBE_TOKEN"",
3329
- "kubectl config set-context "kube-pan-test-app-stage-app" --cluster="kube-pan-test-app-stage-app" --user="kube-pan-test-app-stage-app" --namespace="pan-test-app-stage"",
3330
- "kubectl config use-context "kube-pan-test-app-stage-app"",
3331
- "kubernetesDelete",
3332
- "echo 'Disabling component in Dependency Track'",
3333
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" || true",
3334
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
3335
- ],
3336
- "stage": "stop stage",
3337
- "variables": {
3338
- "GIT_STRATEGY": "none",
3339
- "KUBERNETES_CPU_REQUEST": "0.22",
3340
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3341
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3342
- },
3343
- },
3344
- "app 🧾 sbom | prod ": {
3345
- "allow_failure": true,
3346
- "artifacts": {
3347
- "paths": [
3348
- "__sbom.json",
3349
- ],
3350
- },
3351
- "image": "aquasec/trivy:0.38.3",
3352
- "interruptible": true,
3353
- "needs": [],
3354
- "retry": {
3355
- "max": 2,
3356
- "when": [
3357
- "runner_system_failure",
3358
- "stuck_or_timeout_failure",
3359
- ],
3360
- },
3361
- "script": [
3362
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3363
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3364
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" .",
3365
- ],
3366
- "stage": "build",
3367
- "variables": {},
3368
- },
3369
- "app 🧾 sbom | stage ": {
3370
- "allow_failure": true,
3371
- "artifacts": {
3372
- "paths": [
3373
- "__sbom.json",
3374
- ],
3375
- },
3376
- "image": "aquasec/trivy:0.38.3",
3377
- "interruptible": true,
3378
- "needs": [],
3379
- "retry": {
3380
- "max": 2,
3381
- "when": [
3382
- "runner_system_failure",
3383
- "stuck_or_timeout_failure",
3384
- ],
3385
- },
3386
- "script": [
3387
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3388
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3389
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" .",
3390
- ],
3391
- "stage": "build",
3392
- "variables": {},
3393
- },
3394
- },
3395
- "stages": [
3396
- "setup",
3397
- "setup dev",
3398
- "setup review",
3399
- "setup stage",
3400
- "setup prod",
3401
- "test",
3402
- "test dev",
3403
- "test review",
3404
- "test stage",
3405
- "test prod",
3406
- "build",
3407
- "build dev",
3408
- "build review",
3409
- "build stage",
3410
- "build prod",
3411
- "deploy",
3412
- "deploy dev",
3413
- "deploy review",
3414
- "deploy stage",
3415
- "deploy prod",
3416
- "verify",
3417
- "verify dev",
3418
- "verify review",
3419
- "verify stage",
3420
- "verify prod",
3421
- "rollback",
3422
- "rollback dev",
3423
- "rollback review",
3424
- "rollback stage",
3425
- "rollback prod",
3426
- "stop",
3427
- "stop dev",
3428
- "stop review",
3429
- "stop stage",
3430
- "stop prod",
3431
- ],
3432
- "variables": {
3433
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
3434
- "CACHE_COMPRESSION_LEVEL": "fast",
3435
- "FF_USE_FASTZIP": "true",
3436
- "GIT_DEPTH": "1",
3437
- "TRANSFER_METER_FREQUENCY": "5s",
3438
- },
3439
- "workflow": {
3440
- "rules": [
3441
- {
3442
- "if": "$CI_COMMIT_TAG",
3443
- },
3444
- {
3445
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
3446
- "when": "never",
3447
- },
3448
- {
3449
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
3450
- "when": "never",
3451
- },
3452
- {
3453
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
3454
- },
3455
- {
3456
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
3457
- },
3458
- {
3459
- "if": "$CI_MERGE_REQUEST_ID",
3460
- },
3461
- ],
3462
- },
3463
- },
3464
- }
3465
- `;