189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| source .utils
 | |
| 
 | |
| TEMPLATE="giantswarm/template-app"
 | |
| VISIBILITY="public"
 | |
| CODEOWNER_TEAM="team-hydra"
 | |
| 
 | |
| print_usage() {
 | |
|   orange "gs-create-repo - a new Giant Swarm repo"
 | |
|   echo " "
 | |
|   underline "Usage:"
 | |
|   echo "gs-create-repo (flags) [repo-name]"
 | |
|   echo " "
 | |
|   echo " "
 | |
|   underline "Options:"
 | |
|   echo "-h, --help            show this help text"
 | |
|   echo "-t, --template        the template repo to base the new repo on (default: ${TEMPLATE})"
 | |
|   echo "    --team            the team to be set as codeowner of the repo (default: ${CODEOWNER_TEAM})"
 | |
|   echo "    --visibility      the visibility of the repo (default: ${VISIBILITY}"
 | |
| }
 | |
| 
 | |
| 
 | |
| POS_ARGS=()
 | |
| while test $# -gt 0; do
 | |
|   case "$1" in
 | |
|     -t|--template)
 | |
|       shift
 | |
|       TEMPLATE=$1
 | |
|       shift
 | |
|       ;;
 | |
|     -p|--private)
 | |
|       shift
 | |
|       PRIVATE="--private"
 | |
|       ;;
 | |
|     -h|--help)
 | |
|       print_usage
 | |
|       exit 0
 | |
|       ;;
 | |
|     *)
 | |
|       POS_ARGS+=${1}
 | |
|       shift
 | |
|       ;;
 | |
|   esac
 | |
| done
 | |
| 
 | |
| case $TEMPLATE in
 | |
|   */*)
 | |
|     shift
 | |
|     ;;
 | |
|   *)
 | |
|     TEMPLATE="giantswarm/${TEMPLATE}"
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| REPOSITORY_NAME=${POS_ARGS[0]}
 | |
| 
 | |
| #############################################
 | |
| 
 | |
| echo "✨ Creating new repo $(italic ${VISIBILITY}) $(orange ${REPOSITORY_NAME}) using base template $(blue ${TEMPLATE})"
 | |
| 
 | |
| gh repo create  --${VISIBILITY} --template ${TEMPLATE} giantswarm/${REPOSITORY_NAME}
 | |
| 
 | |
| git take git@github.com:giantswarm/${REPOSITORY_NAME}.git
 | |
| 
 | |
| if [ -d helm/APP-NAME ]; then
 | |
|   mv 'helm/{APP-NAME}' helm/${REPOSITORY_NAME}
 | |
| fi
 | |
| 
 | |
| devctl replace -i '{APP-NAME}' ${REPOSITORY_NAME} --ignore .git ./.** ./**
 | |
| 
 | |
| # Clean up some stuff
 | |
| sed -i 's|\[Read me after cloning this template (GS staff only)\](https://intranet.giantswarm.io/docs/dev-and-releng/app-developer-processes/adding_app_to_appcatalog/)||g' README.md
 | |
| sed -i 's|- {APP HELM REPOSITORY}||g' README.md
 | |
| sed -i '$!N; /^\(.*\)\n\1$/!P; D' README.md
 | |
| sed -i 's/- .*//' CHANGELOG.md
 | |
| sed -i '$!N; /^\(.*\)\n\1$/!P; D' CHANGELOG.md
 | |
| 
 | |
| 
 | |
| printf "Run Kubebuilder init? (y/n): "
 | |
| read CONFIRM
 | |
| if [ "${CONFIRM}" = "y" ]; then
 | |
|   mv helm .helm
 | |
|   kubebuilder init --domain giantswarm.io --repo github.com/giantswarm/${REPOSITORY_NAME} --plugins=go/v4-alpha
 | |
|   mv .helm helm
 | |
|   mv Makefile Makefile.kubebuilder.mk
 | |
|   go mod tidy
 | |
| fi
 | |
| 
 | |
| devctl gen workflows --flavour app --flavour generic --check-secrets
 | |
| devctl gen makefile --flavour app --flavour generic --language go
 | |
| touch Makefile.custom.mk
 | |
| 
 | |
| printf "Update Circle-CI job? (y/n): "
 | |
| read CONFIRM
 | |
| if [ "${CONFIRM}" = "y" ]; then
 | |
| 
 | |
|   cat << EOF > .circleci/config.yml
 | |
| version: 2.1
 | |
| orbs:
 | |
|   architect: giantswarm/architect@4.24.0
 | |
| 
 | |
| workflows:
 | |
|   test-and-push:
 | |
|     jobs:
 | |
|       - architect/go-build:
 | |
|           context: architect
 | |
|           name: go-build
 | |
|           binary: ${REPOSITORY_NAME}
 | |
|           resource_class: xlarge
 | |
|           filters:
 | |
|             tags:
 | |
|               only: /^v.*/
 | |
|       - architect/push-to-docker:
 | |
|           context: architect
 | |
|           name: push-${REPOSITORY_NAME}-to-quay
 | |
|           image: "quay.io/giantswarm/${REPOSITORY_NAME}"
 | |
|           username_envar: "QUAY_USERNAME"
 | |
|           password_envar: "QUAY_PASSWORD"
 | |
|           requires:
 | |
|           - go-build
 | |
|           filters:
 | |
|             # Trigger the job also on git tag.
 | |
|             tags:
 | |
|               only: /^v.*/
 | |
|       - architect/push-to-docker:
 | |
|           context: "architect"
 | |
|           name: push-${REPOSITORY_NAME}-to-docker
 | |
|           image: "docker.io/giantswarm/${REPOSITORY_NAME}"
 | |
|           username_envar: "DOCKER_USERNAME"
 | |
|           password_envar: "DOCKER_PASSWORD"
 | |
|           requires:
 | |
|             - go-build
 | |
|           # Needed to trigger job also on git tag.
 | |
|           filters:
 | |
|             tags:
 | |
|               only: /^v.*/
 | |
|     # Ensure that for every commit
 | |
|     # there is an app version in the test catalog.
 | |
|       - architect/push-to-app-catalog:
 | |
|           context: architect
 | |
|           name: push-to-app-catalog
 | |
|           app_catalog: "control-plane-catalog"
 | |
|           app_catalog_test: "control-plane-test-catalog"
 | |
|           chart: "${REPOSITORY_NAME}"
 | |
|           requires:
 | |
|           - push-${REPOSITORY_NAME}-to-quay
 | |
|           - push-${REPOSITORY_NAME}-to-docker
 | |
|           filters:
 | |
|             # Trigger the job also on git tag.
 | |
|             tags:
 | |
|               only: /^v.*/
 | |
|       - architect/push-to-app-collection:
 | |
|           context: architect
 | |
|           name: push-to-gcp-app-collection
 | |
|           app_name: "${REPOSITORY_NAME}"
 | |
|           app_collection_repo: "gcp-app-collection"
 | |
|           requires:
 | |
|           - push-to-app-catalog
 | |
|           filters:
 | |
|             branches:
 | |
|               ignore: /.*/
 | |
|             tags:
 | |
|               only: /^v.*/
 | |
| EOF
 | |
| 
 | |
| fi
 | |
| 
 | |
| git add -A
 | |
| git commit -m "Initial repo scaffold and setup"
 | |
| git push
 | |
| 
 | |
| devctl repo setup giantswarm/${REPOSITORY_NAME} \
 | |
|   --allow-automerge=true --allow-mergecommit=false --allow-rebasemerge=false \
 | |
|   --allow-squashmerge=true --allow-updatebranch=true --delete-branch-on-merge=true \
 | |
|   --enable-issues=true --enable-projects=false --enable-wiki=false
 | |
| 
 | |
| echo "🎉 New repo $(orange ${REPOSITORY_NAME}) created! - https://github.com/giantswarm/${REPOSITORY_NAME}"
 | |
| 
 | |
| echo "⚡️ Adding reference to $(orange ${REPOSITORY_NAME}) in giantswarm/github"
 | |
| git take git@github.com:giantswarm/github.git
 | |
| git main
 | |
| yq -i '. += {"name": "'${REPOSITORY_NAME}'", "gen": {"flavour": "app,generic", "language": "go"}, "replace": {"architect-orb": true, "renovate": true}} | sort_by(.name)' repositories/${CODEOWNER_TEAM}.yaml
 | |
| git add repositories/${CODEOWNER_TEAM}.yaml
 | |
| git commit -m "Added ${REPOSITORY_NAME} to ${CODEOWNER_TEAM} repos"
 | |
| git push
 | |
| 
 | |
| cd -
 |