{"id":19435619,"url":"https://github.com/code-kern-ai/cicd-deployment-scripts","last_synced_at":"2026-06-08T21:31:20.069Z","repository":{"id":247614684,"uuid":"758009863","full_name":"code-kern-ai/cicd-deployment-scripts","owner":"code-kern-ai","description":"Scripts used for Kern AI CI/CD efforts","archived":false,"fork":false,"pushed_at":"2024-09-17T15:32:54.000Z","size":236,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2024-09-18T16:20:28.670Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/code-kern-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-15T12:53:52.000Z","updated_at":"2024-09-17T15:32:29.000Z","dependencies_parsed_at":"2024-07-29T17:14:07.435Z","dependency_job_id":"d58b1dcb-6ae1-4cdf-a326-f07740007fe8","html_url":"https://github.com/code-kern-ai/cicd-deployment-scripts","commit_stats":null,"previous_names":["code-kern-ai/cicd-deployment-scripts"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-kern-ai%2Fcicd-deployment-scripts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-kern-ai%2Fcicd-deployment-scripts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-kern-ai%2Fcicd-deployment-scripts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-kern-ai%2Fcicd-deployment-scripts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code-kern-ai","download_url":"https://codeload.github.com/code-kern-ai/cicd-deployment-scripts/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240619430,"owners_count":19830204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T15:07:18.726Z","updated_at":"2026-06-08T21:31:20.064Z","avatar_url":"https://github.com/code-kern-ai.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# cicd-deployment-scripts\n\nScripts used for Kern AI CI/CD efforts.\n\n## Table of Contents\n\n- [GitHub: Admin Repositories Settings](#github-admin-repositories-settings)\n- [ACR: Delete Docker Images](#acr-delete-docker-images)\n- [ACR: Docker Push](#acr-docker-push)\n- [ACR: Docker Push Release](#acr-docker-push-release)\n- [ACR: Docker Push Test](#acr-docker-push-test)\n- [Azure: Function App Deployment](#azure-function-app-deployment)\n- [GitHub: Delete Branch](#github-delete-branch)\n- [GitHub: Release](#github-release)\n- [GitHub: Validate Release](#github-validate-release)\n- [K8: Apply](#k8-apply)\n- [K8: Cluster Deploy](#k8-cluster-deploy)\n- [K8: Destroy](#k8-destroy)\n- [K8: Edit](#k8-edit)\n- [K8: Execution Environments](#k8-execution-environments)\n- [K8: Reload Secrets](#k8-reload-secrets)\n- [K8: Release](#k8-release)\n- [K8: Restart](#k8-restart)\n- [K8: Test](#k8-test)\n- [Postgres: Dump Database](#postgres-dump-database)\n- [Postgres: Restore Database](#postgres-restore-database)\n- [Parent Images: Build](#parent-images-build)\n- [Parent Images: Matrix](#parent-images-matrix)\n- [Parent Images: Submodule Merge](#parent-images-submodule-merge)\n- [Parent Images: Parent Image Merge](#parent-images-parent-image-merge)\n- [Parent Images: Release](#parent-images-release)\n- [OpenTofu: Release](#opentofu-release)\n- [OpenTofu: Generate Docs](#opentofu-generate-docs)\n- [OpenTofu: Plan/Apply](#opentofu-planapply)\n\n\n## GitHub Actions\n\n\n### GitHub: Admin Repositories Settings\n\nWorkflow file: `admin_update_repo_settings.yml`\n\nTriggers:\n- workflow_call\n\n\n\n\n\n**Description:**\n\n- updates IaC repository General Settings and Rulesets\n\n\n\n**Jobs:**\n\n- GitHub: Update General Repository Settings\n\t- `Update General Repository Settings`\n\n- GitHub: Update tf-module Rulesets\n\t- `Update tf-module Rulesets`\n\n- GitHub: Update tf-iac Rulesets\n\t- `Update tf-iac Rulesets`\n\n\n\n\n\n### ACR: Delete Docker Images\n\nWorkflow file: `az_acr_delete.yml`\n\nTriggers:\n- workflow_call\n\n\n\n\n\n**Description:**\n\n- deletes Container Images specified by the workflow input\n\n\n\n**Jobs:**\n\n- Docker: Delete Test Tags\n\t- `Configure branch name`\n\t- `Delete Container Image`\n\n- Docker: Delete Branch Tags\n\t- `Configure branch name`\n\t- `Delete Branch Container Image`\n\n\n\n\n\n### ACR: Docker Push\n\nWorkflow file: `az_acr_push.yml`\n\nTriggers:\n- workflow_dispatch\n- push\n\n\n\n\n\n**Description:**\n\n- before pushing the Docker image, the branch name is resolved to replace `/` with `-` and the image is built with the resolved branch name\n- builds and deploys Docker images in multiple steps\n\n\n\n**Jobs:**\n\n- Docker: Build \u0026 Push\n\t- `Configure branch name`\n\t- `Build \u0026 Push \u003capplication-repo\u003e:${{ matrix.platform }}-\u003cfeature-hotfix\u003e`\n\t- `Build \u0026 Push \u003capplication-repo\u003e:${{ matrix.platform }}-gpu`\n\n\n\n\n\n### ACR: Docker Push Release\n\nWorkflow file: `az_acr_release.yml`\n\nTriggers:\n- workflow_dispatch\n- pull_request_closed\n- release\n\n\n\n\n\n**Description:**\n\n- builds and deploys Docker images in multiple steps\n\n\n\n**Jobs:**\n\n- Docker: Build \u0026 Push\n\t- `Build \u0026 Push \u003capplication-repo\u003e:amd64`\n\t- `Build \u0026 Push \u003capplication-repo\u003e:arm64`\n\t- `Build \u0026 Push \u003capplication-repo\u003e:latest`\n\n\n\n\n\n### ACR: Docker Push Test\n\nWorkflow file: `az_acr_test.yml`\n\nTriggers:\n- pull_request_opened_synchronized\n\n\n\nOutputs:\n- GH_REF_NAME\n\n**Description:**\n\n- before pushing the Docker image, the branch name is resolved to replace `/` with `-` and the image is built with the resolved branch name\n- builds and deploys the test Docker Image used by the K8: Test workflow\n\n\n\n**Jobs:**\n\n- Docker: Build \u0026 Push (Test)\n\t- `Configure branch name`\n\t- `Build \u0026 Push \u003capplication-repo\u003e:test-\u003cfeature-hotfix\u003e`\n\n\n\n\n\n### Azure: Function App Deployment\n\nWorkflow file: `az_fa_deploy.yml`\n\nTriggers:\n- workflow_dispatch\n- push\n\n\n\n\n\n**Description:**\n\n- builds and deploys the Azure Function App\n- currently used to deploy the self hosted GitHub Actions Runner Monitor\n\n\n\n**Jobs:**\n\n- Azure: Build \u0026 Deploy Function App\n\t- `Resolve Project Dependencies Using Pip`\n\t- `Run Azure Functions Action`\n\n\n\n\n\n### GitHub: Delete Branch\n\nWorkflow file: `gh_delete_branch.yml`\n\nTriggers:\n- pull_request_closed\n\n\n\n\n\n**Description:**\n\n- calls ACR: Delete Docker Image job, targeting the tag `:test-\u003cfeature/hotfix\u003e`\n- deletes the feature/hotfix branch Container Images (`:\u003cplatform\u003e-\u003cfeature/hotfix\u003e`)\n- deletes the feature/hotfix branch\n\n**Troubleshooting:**\n- this job will fail when the feature/hotfix branch is deleted manually\n\n**Jobs:**\n\n- ACR: Delete Test Image\n\t- `Configure branch name`\n\t- `Delete Container Image`\n\n- ACR: Delete Branch Images\n\t- `Configure branch name`\n\t- `Delete Branch Container Image`\n\n- GitHub: Delete Branch\n\t- `Delete Branch`\n\n\n\n\n\n### GitHub: Release\n\nWorkflow file: `gh_release.yml`\n\nTriggers:\n- release\n\nInputs:\n- deployment_status\n\n\n\n**Description:**\n\n- publishes a release on GitHub with the tag generated by the pre-release that triggered this workflow\n- deletes a pre-release on GitHub with the tag generated by the pre-release that triggered this workflow\n- runs in case of a release deployment failure\n\n**Troubleshooting:**\n- after fixing the error that caused the release deployment failure, recreate the pre-release to trigger the release deployment again\n\n**Jobs:**\n\n- GitHub: Publish Release\n\t- `Publish Release`\n\n- GitHub: Delete Prerelease\n\t- `Delete Prerelease`\n\n\n\n\n\n### GitHub: Validate Release\n\nWorkflow file: `gh_validate_release.yml`\n\nTriggers:\n- release\n\n\n\n\n\n**Description:**\n\n- validates the release tag generated by the pre-release that triggered this workflow, using a RegEx check for semantic versioning\n\n**Troubleshooting:**\n- inspect the pre-release tag name and ensure it follows the RegEx check for semantic versioning\n\n**Jobs:**\n\n- GitHub: Validate Release\n\t- `Validate Release Tag`\n\n\n\n\n\n### K8: Apply\n\nWorkflow file: `k8s_apply.yml`\n\nTriggers:\n- pull_request_closed (dev)\n- workflow_dispatch\n\n\n\n\n\n**Description:**\n\n- generates a Kubernetes kustomization diff and applies it to the cluster\n- differs from the `k8s-deploy` job in that it applies the entire namespace, as opposed to application specific configurations\n\n\n\n**Jobs:**\n\n- K8: Apply Cluster Resources\n\t- `Generate Kustomization`\n\t- `Apply Kustomization`\n\t- `Assert Deploy Success`\n\t- `Revert on failure`\n\n\n\n\n\n### K8: Cluster Deploy\n\nWorkflow file: `k8s_deploy.yml`\n\nTriggers:\n- workflow_call\n\nInputs:\n- environment\n\nOutputs:\n- deployment_status\n\n**Description:**\n\n- deploys the application to the Kubernetes cluster\n- differs from the `k8s-apply` job in that it applied application specific configurations, as opposed to the entire namespace\n- uses Canary Deployment strategy\n\n\n\n**Jobs:**\n\n- K8: Deploy\n\t- `Generate Kustomization`\n\t- `Generate Deployment`\n\t- `Assert Deployment Success`\n\t- `Promote Deployment`\n\t- `Reject Deployment`\n\n\n\n\n\n### K8: Destroy\n\nWorkflow file: `k8s_destroy.yml`\n\nTriggers:\n- workflow_dispatch\n\n\n\n\n\n**Description:**\n\n- deletes all __deployment__ and __service__ Kubernetes resources in the namespace configured by GitHub Actions Environment Variables\n\n\n\n**Jobs:**\n\n- K8: Destroy Cluster Namespace\n\t- `Destroy Cluster Namespace`\n\n\n\n\n\n### K8: Edit\n\nWorkflow file: `k8s_edit.yml`\n\nTriggers:\n- pull_request_closed\n\n\n\n\n\n**Description:**\n\n- updates the Kubernetes deployment image tags to the latest release\n- creates a new branch `automated-release-dev` and a corresponding Pull Request in `k8-cluster-cognition` repository\n- when a Pull Request already exists, deployment image tag updates are accumulated on the existing Pull Request\n\n\n\n**Jobs:**\n\n- K8: Edit Cluster Deployment\n\t- `Perform Edit/Git Operations`\n\n\n\n\n\n### K8: Execution Environments\n\nWorkflow file: `k8s_exec_env_pull.yml`\n\nTriggers:\n- workflow_dispatch\n\n\n\n\n\n**Description:**\n\n- pulls execution environment images inside the Kubernetes cluster\n\n\n\n**Jobs:**\n\n- K8: Docker Pulls\n\t- `Execute docker pull`\n\n\n\n\n\n### K8: Reload Secrets\n\nWorkflow file: `k8s_reload_secrets.yml`\n\nTriggers:\n- workflow_dispatch\n\nInputs:\n- deployment_name\n\n\n\n**Description:**\n\n- recreates a secret in the Kubernetes cluster with the latest value from Azure Key Vault, specified by the workflow input (deployment name)\n- restarts a deployment in the Kubernetes cluster, specified by the workflow input (deployment name)\n\n\n\n**Jobs:**\n\n- K8: Reload Secrets\n\t- `Run Secret Reload`\n\n\n\n\n\n### K8: Release\n\nWorkflow file: `k8s_release.yml`\n\nTriggers:\n- pull_request_closed\n- release\n\n\n\n\n\n**Description:**\n\n- calls GitHub: Validate Release job\n- calls ACR: Docker Push Release job\n- calls K8: Edit job\n- calls GitHub: Release job\n- forwards deployment status to the GitHub: Release job\n- calls GitHub: Delete Branch job\n\n\n\n**Jobs:**\n\n- call-gh-validate-release\n\n- call-az-acr-release\n\n- call-k8-edit\n\n- call-gh-release\n\n- GitHub: Delete Branch\n\t- `Delete Branch`\n\n\n\n\n\n### K8: Restart\n\nWorkflow file: `k8s_restart.yml`\n\nTriggers:\n- workflow_dispatch\n\nInputs:\n- deployment_name\n\n\n\n**Description:**\n\n- restarts a deployment in the Kubernetes cluster, specified by the workflow input\n\n\n\n**Jobs:**\n\n- K8: Restart Cluster Deployment\n\t- `Restart Cluster Deployment`\n\n\n\n\n\n### K8: Test\n\nWorkflow file: `k8s_test.yml`\n\nTriggers:\n- pull_request_opened_synchronized\n\nInputs:\n- test_cmd\n\n\n\n**Description:**\n\n- calls ACR: Docker Push Test job\n- runs `alemic upgrade` on the application that triggered this workflow\n- if an application that depends on `refinery-gateway` database changes (e.g. `refinery-tokenizer`) triggers this workflow, the `alembic upgrade` is run on the `refinery-gateway` database if the same test Docker Image tag exists\n- uses the test Docker Image generated by the ACR: Docker Push Test job to run tests in the Kubernetes cluster\n- uses the revision number generated in the first step to downgrade the database\n\n**Troubleshooting:**\n- in case of a failed test, inspect the logs of this job to identify the issue and resolve it by updating the application code\n- in case this workflow corrupted [app.dev.kern.ai](https.//app.dev.kern.ai), manually run K8: Apply in [k8-cluster-cognition](https://github.com/code-kern-ai/k8-cluster-cognition/actions/workflows/k8s_apply.yml) to apply the latest container images available on dev\n- in case of a workflow failure (TBD), ignore the failure and proceed with Pull Request merge\n\n**Jobs:**\n\n- call-az-acr-push-test\n\n- K8: Test Cluster Deployment\n\t- `Test Cluster Deployment`\n\n\n\n\n\n### Postgres: Dump Database\n\nWorkflow file: `pg_dump.yml`\n\nTriggers:\n- workflow_dispatch\n\nInputs:\n- pg_dump_name\n- database_name\n\n\n\n**Description:**\n\n- generates a PostgreSQL dump of the database specified by the workflow input\n- the dump is stored in the Azure File Storage configured by GitHub Actions Environment Variables\n\n\n\n**Jobs:**\n\n- Postgres: Dump ${{ inputs.database_name }}\n\t- `Generate Dump`\n\t- `Upload Dump`\n\n\n\n\n\n### Postgres: Restore Database\n\nWorkflow file: `pg_restore.yml`\n\nTriggers:\n- workflow_dispatch\n\nInputs:\n- pg_dump_name\n- database_name\n\n\n\n**Description:**\n\n- restores a PostgreSQL dump of the database specified by the workflow input\n- the dump is downloaded from the Azure File Storage configured by GitHub Actions Environment Variables\n\n\n\n**Jobs:**\n\n- Postgres: Restore ${{ inputs.database_name }}\n\t- `Download Dump`\n\t- `Restore Dump`\n\n\n\n\n\n### Parent Images: Build\n\nWorkflow file: `pi_build.yml`\n\nTriggers:\n- pull_request_opened_synchronized\n\n\n\n\n\n**Description:**\n\n- builds \u0026 pushes `refinery-parent-images:\u003cbranch\u003e-\u003ctype\u003e` to registry.dev.kern.ai\n\n\n\n**Jobs:**\n\n- Configure Head Branch Name\n\t- `Configure branch name`\n\n- pi-matrix\n\n- Parent Images: Docker Build\n\t- `Set up Python`\n\t- `Install Dependencies`\n\t- `Compile Requirements`\n\t- `Build \u0026 Push ${{ env.PARENT_IMAGE_NAME }}:${{ env.HEAD_REF }}-${{ matrix.parent_image_type }}`\n\t- `Build \u0026 Push ${{ env.PARENT_IMAGE_NAME }}:${{ env.HEAD_REF }}-${{ matrix.parent_image_type }}-arm64`\n\n- Parent Images: App\n\t- `Set up Python`\n\t- `Install Dependencies`\n\t- `Compile Requirements`\n\t- `Clone ${{ matrix.app }}`\n\t- `Compile Requirements (Python)`\n\t- `Compile Requirements (Next)`\n\t- `Perform Edit/Git Operations (Python)`\n\t- `Perform Edit/Git Operations (Next)`\n\n\n\n\n\n### Parent Images: Matrix\n\nWorkflow file: `pi_matrix.yml`\n\nTriggers:\n- workflow_call\n\nInputs:\n- repository\n- checkout_ref\n- parent_image_type\n- edit_dockerfile\n\nOutputs:\n- parent_image_type\n- include\n\n**Description:**\n\n- creates a [Matrix Strategy](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflow) input for GitHub Action with the following structure:\n- {\n  \"parent_image_type\": [\n    \"mini\",\n    \"next\"\n  ],\n  \"include\": [\n    {\n      \"parent_image_type\": \"mini\",\n      \"app\": \"refinery-authorizer\"\n    },\n    {\n      \"parent_image_type\": \"mini\",\n      \"app\": \"refinery-gateway-proxy\"\n    },\n    {\n      \"parent_image_type\": \"next\",\n      \"app\": \"admin-dashboard\"\n    },\n    {\n      \"parent_image_type\": \"next\",\n      \"app\": \"refinery-ui\"\n    },\n    {\n      \"parent_image_type\": \"next\",\n      \"app\": \"cognition-ui\"\n    }\n  ]\n}\n\n\n\n**Jobs:**\n\n- Parent Images: Generate Matrix\n\t- `Generate Matrix`\n\n\n\n\n\n### Parent Images: Submodule Merge\n\nWorkflow file: `pi_merge_submodule.yml`\n\nTriggers:\n- pull_request_closed (dev)\n\n\n\n\n\n**Description:**\n\n- updates Parent Image repositories' submodule reference\n\n\n\n**Jobs:**\n\n- Configure Head Branch Name\n\t- `Configure branch name`\n\n- pi-matrix\n\n- Parent Images: Submodule\n\t- `Set up Python`\n\t- `Install Dependencies`\n\t- `Perform Edit/Git Operations`\n\n- GitHub: Delete Submodule Branch\n\t- `Delete Branch`\n\n- GitHub: Delete App Branch\n\t- `Delete Branch`\n\n\n\n\n\n### Parent Images: Parent Image Merge\n\nWorkflow file: `pi_merge_parent_image.yml`\n\nTriggers:\n- pull_request_closed (dev)\n\n\n\n\n\n**Description:**\n\n- builds \u0026 pushes `refinery-parent-images:dev-\u003ctype\u003e` to registry.dev.kern.ai\n- updates Application repositories' \u003ctype\u003e-requirements.in and requirements.txt\n\n**Troubleshooting:**\n- package version resolution failure (ResolutionImpossible) ([example](https://github.com/code-kern-ai/refinery-submodule-parent-images/actions/runs/12200031962/job/34036100963))\n- resolved by updating the package version in the Application repository's \u003ctype\u003e-requirements.in file\n- worked around by manually performing the [requirements compilation](https://www.notion.so/kern-ai/Docker-Base-Images-9d858b002ff840d3b0a3e90ec61d4179?pvs=4#a4450704a486434083710ef071b48cdc)\n\n**Jobs:**\n\n- pi-matrix\n\n- Parent Images: Docker Build\n\t- `Set up Python`\n\t- `Install Dependencies`\n\t- `Compile Requirements`\n\t- `Build \u0026 Push ${{ env.PARENT_IMAGE_NAME }}:${{ github.event.pull_request.base.ref }}-${{ env.PARENT_IMAGE_TYPE }}`\n\t- `Build \u0026 Push ${{ env.PARENT_IMAGE_NAME }}:${{ github.sha }}-${{ env.PARENT_IMAGE_TYPE }}`\n\n- Parent Images: App\n\t- `Set up Python`\n\t- `Install Dependencies`\n\t- `Clone ${{ matrix.app }}`\n\t- `Compile Requirements (Python)`\n\t- `Compile Requirements (Next)`\n\t- `Perform Edit/Git Operations (Python)`\n\t- `Perform Edit/Git Operations (Next)`\n\n- GitHub: Delete Branch\n\t- `Delete Branch`\n\n\n\n\n\n### Parent Images: Release\n\nWorkflow file: `pi_release.yml`\n\nTriggers:\n- prerelease\n\n\n\n\n\n**Description:**\n\n- builds \u0026 pushes `refinery-parent-images:vX.X.X-\u003ctype\u003e` to Docker Hub\n- updates Application repositories' Dockerfiles to use the new parent image (updates Application repositories' open PRs)\n\n\n\n**Jobs:**\n\n- pi-matrix\n\n- Parent Images: Dockerfile\n\t- `Perform Edit/Git Operations`\n\n- call-gh-release\n\n\n\n\n\n### OpenTofu: Release\n\nWorkflow file: `release_please.yml`\n\nTriggers:\n- workflow_call\n\n\n\n\n\n**Description:**\n\n- generates a release Pull Request with CHANGELOG updates for the calling repository\n- requires Conventional Commits\n\n\n\n**Jobs:**\n\n- tf-module-release\n\t- `googleapis/release-please-action@v4`\n\n\n\n\n\n### OpenTofu: Generate Docs\n\nWorkflow file: `tf_docs.yml`\n\nTriggers:\n- push\n\n\n\n\n\n**Description:**\n\n- generates documentation for the OpenTofu module\n\n\n\n**Jobs:**\n\n- tf-module-docs\n\t- `actions/checkout@v4`\n\t- `Render OpenTofu docs and push changes back to PR`\n\n\n\n\n\n### OpenTofu: Plan/Apply\n\nWorkflow file: `tf_plan_apply.yml`\n\nTriggers:\n- workflow_dispatch\n- push\n\n\n\nOutputs:\n- tf_plan_exit_code\n- tf_destroy\n\n**Description:**\n\n- executes `tofu plan` on the repository that triggered this workflow\n- creates a destruction plan when the calling repository's GitHub Actions Environment Variable `TF_DESTROY` is set to `-destroy`\n- executes `tofu apply` on the repository that triggered this workflow, assuming that the `tofu plan` job has succeeded\n\n**Troubleshooting:**\n- inspect the logs of the `tofu plan` job to identify the issue and resolve it by updating Infrastructure as Code (IaC) files\n- inspect the logs of the `tofu plan` job to identify the issue and resolve it by updating Infrastructure as Code (IaC) files\n\n**Jobs:**\n\n- OpenTofu Plan\n\t- `OpenTofu Plan`\n\n- OpenTofu Apply\n\t- `OpenTofu Apply`\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-kern-ai%2Fcicd-deployment-scripts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode-kern-ai%2Fcicd-deployment-scripts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-kern-ai%2Fcicd-deployment-scripts/lists"}