{"id":6014272,"name":"dmsi-io/gha-k8s-namespace","ecosystem":"actions","description":"Many applications require others to exist within the same namespace. Instead of creating many branches on other repos, this action will simply deploy an ExternalName for other services.","homepage":"","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/dmsi-io/gha-k8s-namespace","keywords_array":["actions","github","github-actions","kubernetes"],"namespace":"dmsi-io","versions_count":3,"first_release_published_at":"2022-04-04T14:23:21.000Z","latest_release_published_at":"2022-12-15T19:45:58.000Z","latest_release_number":"v1.0.2","latest_published_release_number":null,"last_synced_at":"2026-03-12T11:47:14.951Z","created_at":"2023-01-30T00:11:19.041Z","updated_at":"2026-09-14T18:38:49.512Z","registry_url":"https://github.com/dmsi-io/gha-k8s-namespace","install_command":null,"documentation_url":null,"metadata":{"name":"Prepare Kubernetes Namespace","description":"Many applications require others to exist within the same namespace. Instead of creating many branches on other repos, this action will simply deploy an ExternalName for other services.","inputs":{"GCP_IDENTITY_PROVIDER":{"description":"GCP Workload Identity Provider","required":false},"GCP_SERVICE_ACCOUNT":{"description":"GCP Service Account email","required":false},"GCP_SA_KEY":{"description":"GCP Service Account Key (JSON)","required":false,"deprecationMessage":"It is recommended to instead use Workload Identity Federation with the GCP_IDENTITY_PROVIDER and GCP_SERVICE_ACCOUNT inputs."},"GKE_CLUSTER_NAME":{"description":"Google Kubernetes Engine Cluster name","required":true},"GCP_ZONE":{"description":"GCP Zone","required":true},"GCP_PROJECT_ID":{"description":"GCP Project ID","required":true},"TO_NAMESPACE":{"description":"Allows to override the desired NAMESPACE variable","required":false,"default":"${{ github.ref_name }}"},"FROM_NAMESPACE":{"description":"Allows to override the desired NAMESPACE variable","required":false,"default":"${{ github.event.repository.default_branch }}"},"SERVICE_NAME":{"description":"Allows to override the desired SERVICE_NAME variable","required":false,"default":"${{ github.repository }}"},"repos":{"description":"Comma separated list of repositories to instead deploy a copy from the default namespace","required":false}},"runs":{"using":"composite","steps":[{"name":"Checkout","uses":"actions/checkout@v3","with":{"repository":"dmsi-io/gha-env-variables","path":"gha-env-variables"}},{"name":"TO_NAMESPACE","run":"TO_NAMESPACE=$(gha-env-variables/clean_variable.sh ${{ inputs.TO_NAMESPACE }})\necho \"TO_NAMESPACE=$TO_NAMESPACE\"\n\necho \"TO_NAMESPACE=$TO_NAMESPACE\" \u003e\u003e $GITHUB_ENV\n","shell":"bash"},{"name":"FROM_NAMESPACE","run":"FROM_NAMESPACE=$(gha-env-variables/clean_variable.sh ${{ inputs.FROM_NAMESPACE }})\necho \"FROM_NAMESPACE=$FROM_NAMESPACE\"\n\necho \"FROM_NAMESPACE=$FROM_NAMESPACE\" \u003e\u003e $GITHUB_ENV\n","shell":"bash"},{"name":"Setup GCloud Auth","id":"auth","uses":"google-github-actions/auth@v1","with":{"workload_identity_provider":"${{ inputs.GCP_IDENTITY_PROVIDER }}","service_account":"${{ inputs.GCP_SERVICE_ACCOUNT }}"}},{"name":"Set up Cloud SDK","uses":"google-github-actions/setup-gcloud@v1"},{"name":"Authenticate GKE cluster","uses":"google-github-actions/get-gke-credentials@v1","with":{"cluster_name":"${{ inputs.GKE_CLUSTER_NAME }}","location":"${{ inputs.GCP_ZONE }}","project_id":"${{ inputs.GCP_PROJECT_ID }}"}},{"name":"Deploy Namespace","run":"cat namespace.yaml | envsubst | kubectl apply -f -\n","shell":"bash","working-directory":"${{ github.action_path }}/k8s"},{"name":"Deploy Ingresses","run":"INGRESS=\"k8s-ingress\"\nif [[ $(kubectl get ingress $INGRESS -n $TO_NAMESPACE -o=name --ignore-not-found) ]]; then\n    echo \"$INGRESS already exists in $TO_NAMESPACE\" \nelse \n    kubectl get ingress $INGRESS -n $FROM_NAMESPACE -o json \\\n        | jq 'del(.metadata[\"namespace\",\"creationTimestamp\",\"resourceVersion\",\"selfLink\",\"uid\"])' \\\n        | sed -e \"s:$FROM_NAMESPACE:$TO_NAMESPACE:g\" \\\n        | kubectl apply -n $TO_NAMESPACE -f -\nfi\n","shell":"bash"},{"name":"Copy Secrets,ConfigMaps,ServiceAccounts,Roles,RoleBindings","run":"for n in $(kubectl get -o=name secret,configmap,serviceaccount,role,rolebinding -n $FROM_NAMESPACE)\ndo\n    if [[ $(kubectl get $n -n $TO_NAMESPACE -o=name --ignore-not-found) ]]; then\n        echo \"$n already exists in $TO_NAMESPACE\" \n    else \n        kubectl get $n -n $FROM_NAMESPACE -o json \\\n            | jq 'del(.metadata[\"namespace\",\"creationTimestamp\",\"resourceVersion\",\"selfLink\",\"uid\"])' \\\n            | kubectl apply -n $TO_NAMESPACE -f -\n    fi\ndone\n","shell":"bash"},{"name":"Deploy Default Deployments","run":"REPOS=\"${{ inputs.repos }}\"\nfor repo in ${REPOS//,/ }\ndo\n  REPO_SERVICE=$(gha-env-variables/clean_variable.sh $repo)\n  if [[ $(kubectl get deployment $REPO_SERVICE -n=$TO_NAMESPACE -o=name --ignore-not-found) ]] \u0026\u0026 \\\n     [[ $(kubectl get deployment $REPO_SERVICE -n=$TO_NAMESPACE -o=json | jq -e '.spec.template.spec.containers[0].env[].value == \"gha-k8s-namespace\"') == \"false\" ]]; then\n      echo \"$REPO_SERVICE deployment already exists in $TO_NAMESPACE\" \n  elif [[ $(kubectl get deployment $REPO_SERVICE -n $FROM_NAMESPACE -o=name --ignore-not-found) ]]; then\n      kubectl get deployment $REPO_SERVICE -n $FROM_NAMESPACE -o json \\\n      | jq 'del(.metadata[\"namespace\",\"creationTimestamp\",\"resourceVersion\",\"selfLink\",\"uid\"],.status)' \\\n      | jq --argjson deployFlag '{\"name\": \"DEPLOYED_FROM\",\"value\": \"gha-k8s-namespace\"}' '.spec.template.spec.containers[0].env += [$deployFlag]' \\\n      | kubectl apply -n $TO_NAMESPACE -f -\n  else\n      echo \"$REPO_SERVICE deployment not found in $FROM_NAMESPACE\"\n  fi\ndone\n","shell":"bash"},{"name":"Deploy Default Services","run":"REPOS=\"${{ inputs.repos }}\"\nfor repo in ${REPOS//,/ }\ndo\n  REPO_SERVICE=$(gha-env-variables/clean_variable.sh $repo)\n  if [[ $(kubectl get service $REPO_SERVICE -n $TO_NAMESPACE --ignore-not-found -o=name) ]] \u0026\u0026 [[ $(kubectl get service $REPO_SERVICE -n $TO_NAMESPACE --ignore-not-found -o=jsonpath='{.spec.type}') != \"ExternalName\" ]]; then\n      echo \"$REPO_SERVICE service already exists in $TO_NAMESPACE\" \n  elif [[ $(kubectl get service $REPO_SERVICE -n $FROM_NAMESPACE -o=name --ignore-not-found) ]]; then\n      # Forces ingress-controller reload\n      kubectl delete service $REPO_SERVICE -n $TO_NAMESPACE --ignore-not-found\n\n      kubectl get service $REPO_SERVICE -n $FROM_NAMESPACE -o json \\\n      | jq 'del(.metadata[\"namespace\",\"creationTimestamp\",\"resourceVersion\",\"selfLink\",\"uid\"],.spec[\"clusterIP\",\"clusterIPs\"],.spec.ports[].nodePort)' \\\n      | kubectl apply -n $TO_NAMESPACE -f -\n  else\n      echo \"$REPO_SERVICE service not found in $FROM_NAMESPACE\"\n  fi\ndone\n","shell":"bash"},{"name":"Deploy ExternalName Services","run":"for n in $(kubectl get -o=name service -n $FROM_NAMESPACE)\ndo\n    if [[ $(kubectl get $n -n $TO_NAMESPACE -o=name --ignore-not-found) ]]; then\n        echo \"$n already exists in $TO_NAMESPACE\" \n    else \n        export EXTERNAL_SERVICE=${n##*/}\n        export PORT=$(kubectl get $n -n $FROM_NAMESPACE -o=jsonpath='{.spec.ports[*].port}')\n\n        cat external-service-template.yaml | envsubst | kubectl apply -f - \n    fi\ndone\n","shell":"bash","working-directory":"${{ github.action_path }}/k8s"},{"name":"Remove Acting Repo ExternalName Service","run":"SERVICE_NAME=$(gha-env-variables/clean_variable.sh ${{ inputs.SERVICE_NAME }})\nif [[ $(kubectl get service $SERVICE_NAME -n $TO_NAMESPACE --ignore-not-found -o=jsonpath='{.spec.type}') = \"ExternalName\" ]]; then\n    kubectl delete service $SERVICE_NAME -n $TO_NAMESPACE\nfi\n","shell":"bash"}]},"default_branch":"main","path":null},"repo_metadata":{"uuid":"436728188","full_name":"dmsi-io/gha-k8s-namespace","owner":"dmsi-io","description":"Creates ExternalName service to allow for interaction between apps without redeploying the full suite of apps","archived":false,"fork":false,"pushed_at":"2022-12-15T20:02:59.000Z","size":22,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":11,"default_branch":"main","last_synced_at":"2023-07-12T15:51:32.619Z","etag":null,"topics":["actions","github","github-actions","kubernetes"],"latest_commit_sha":null,"homepage":"","language":null,"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/dmsi-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2021-12-09T18:55:37.000Z","updated_at":"2023-01-14T18:13:46.000Z","dependencies_parsed_at":"2023-01-29T04:16:06.973Z","dependency_job_id":null,"html_url":"https://github.com/dmsi-io/gha-k8s-namespace","commit_stats":{"total_commits":14,"total_committers":4,"mean_commits":3.5,"dds":0.3571428571428571,"last_synced_commit":"b3c6a593297e0cc2ed08c85f151fde8ff6ad4f16"},"previous_names":[],"tags_count":3,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmsi-io","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":145715289,"owners_count":6279776,"icon_url":"https://github.com/github.png","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"},"owner_record":{"login":"dmsi-io","name":"DMSi","uuid":"94390030","kind":"organization","description":"","email":null,"website":"https://dmsi.com","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/94390030?v=4","repositories_count":29,"last_synced_at":"2023-03-09T07:36:04.679Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/dmsi-io","created_at":"2022-11-18T20:55:45.485Z","updated_at":"2023-03-09T07:36:04.725Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmsi-io","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmsi-io/repositories"},"tags":[{"name":"v1.0.2","sha":"b3c6a593297e0cc2ed08c85f151fde8ff6ad4f16","kind":"commit","published_at":"2022-12-15T19:45:58.000Z","download_url":"https://codeload.github.com/dmsi-io/gha-k8s-namespace/tar.gz/v1.0.2","html_url":"https://github.com/dmsi-io/gha-k8s-namespace/releases/tag/v1.0.2","dependencies_parsed_at":"2023-06-01T14:27:21.974Z","dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1.0.2/manifests"},{"name":"v1.0.1","sha":"db6f2eda6726882fb3c423bb3bb4ca2312dcc6ff","kind":"commit","published_at":"2022-10-25T15:45:53.000Z","download_url":"https://codeload.github.com/dmsi-io/gha-k8s-namespace/tar.gz/v1.0.1","html_url":"https://github.com/dmsi-io/gha-k8s-namespace/releases/tag/v1.0.1","dependencies_parsed_at":"2023-06-01T14:27:22.349Z","dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1.0.1/manifests"},{"name":"v1","sha":"bd28339789fabcb1a4d4f75cfacf27b6428bbe95","kind":"tag","published_at":"2022-04-04T14:23:21.000Z","download_url":"https://codeload.github.com/dmsi-io/gha-k8s-namespace/tar.gz/v1","html_url":"https://github.com/dmsi-io/gha-k8s-namespace/releases/tag/v1","dependencies_parsed_at":"2023-05-31T10:59:58.106Z","dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmsi-io%2Fgha-k8s-namespace/tags/v1/manifests"}]},"repo_metadata_updated_at":"2026-09-14T18:38:49.511Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":42.858974907023466,"dependent_packages_count":0.0,"stargazers_count":29.333561321762918,"forks_count":37.2590091052879,"average":27.36288633351857},"purl":"pkg:githubactions/dmsi-io/gha-k8s-namespace","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/dmsi-io/gha-k8s-namespace","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/dmsi-io/gha-k8s-namespace","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/dmsi-io/gha-k8s-namespace/dependencies","status":"removed","funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2023-08-09T09:59:05.694Z","issues_count":2,"pull_requests_count":10,"avg_time_to_close_issue":14508.5,"avg_time_to_close_pull_request":77641.9,"issues_closed_count":2,"pull_requests_closed_count":10,"pull_request_authors_count":3,"issue_authors_count":1,"avg_comments_per_issue":0.0,"avg_comments_per_pull_request":0.1,"merged_pull_requests_count":10,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":33394.5,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":2},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/dmsi-io%2Fgha-k8s-namespace/codemeta","maintainers":[]}