diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7596e917ea8ae7f292919a852a7e2ffdf9fafdd1..d2f3b99ef1427e853a34f93621a141998bf546a1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,13 +1,15 @@ -# Define global rules for when pipelines run +# global rules for when pipelines run workflow: rules: - # Skip pipeline when commit message starts with "wip" - - if: '$CI_COMMIT_MESSAGE =~ /^wip/' - when: never - # Skip pipeline for branches that start with "docs" + # run pipeline for manual tag events + - if: $CI_COMMIT_TAG + # run pipeline on merge request events + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + # run pipeline on commits to default branch + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + # skip pipeline for branches that start with "docs" - if: '$CI_COMMIT_REF_NAME =~ /^docs/' when: never - - when: always # include templates include: @@ -92,11 +94,6 @@ clean install: stage: smoke tests extends: - .k3d - rules: - # Skip on merge requests (it is ran as part of the non MR pipeline) - - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - when: never - - when: always variables: CLUSTER_NAME: "clean-${CI_COMMIT_SHORT_SHA}" script: @@ -115,7 +112,11 @@ upgrade: extends: - .k3d rules: - - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE !~ /^Breaking Change/' + # skip job when MR title starts with 'Breaking Change' + - if: '$CI_MERGE_REQUEST_TITLE =~ /^Breaking Change/' + when: never + # run pipeline on merge request events + - if: $CI_PIPELINE_SOURCE == "merge_request_event" variables: CLUSTER_NAME: "clean-${CI_COMMIT_SHORT_SHA}" script: @@ -130,60 +131,6 @@ upgrade: - *deploy_bigbang - *test_bigbang -package: - stage: package - image: registry.dsop.io/platform-one/big-bang/umbrella/synker:0.0.1 - rules: - - if: '$CI_COMMIT_TAG' - - when: never - dependencies: - - clean install - before_script: - # Set up auth - - mkdir -p /root/.docker - - echo $DOCKER_AUTH_CONFIG > /root/.docker/config.json - script: - - cp ./scripts/package/synker.yaml ./synker.yaml - - # Populate images list in synker config - # NOTE: This is stupid and hacky, use yq or something better to do this - - cat images.txt | sed -e 's/^/ - /' >> synker.yaml - - - synker pull -b=1 - - # Tar up synker as well? - - cp /usr/local/bin/synker synker.yaml /var/lib/registry/ - - tar -C /var/lib/registry -czvf $IMAGE_PKG . - - tar -czvf $IMAGE_PKG /var/lib/registry - - # Package dependent repos - - ./scripts/package/gits.sh - - tar -czf $REPOS_PKG repos/ - - # Prep release - - mkdir -p release - - mv $IMAGE_LIST $IMAGE_PKG $REPOS_PKG release/ - - # Publish packages to s3 release - - aws s3 sync --quiet release/ s3://umbrella-bigbang-releases/umbrella/${CI_COMMIT_TAG} - after_script: [] - -release: - stage: release - image: registry.gitlab.com/gitlab-org/release-cli:latest - rules: - - if: '$CI_COMMIT_TAG' - - when: never - variables: - RELEASE_ENDPOINT: https://${RELEASE_BUCKET}.s3-${AWS_DEFAULT_REGION}.amazonaws.com/umbrella/${CI_COMMIT_TAG} - script: - - | - release-cli create --name "Big Bang v${CI_COMMIT_TAG}" --tag-name ${CI_COMMIT_TAG} \ - --description "Automated release notes are a WIP." \ - --assets-link "{\"name\":\"${IMAGE_LIST}\",\"url\":\"${RELEASE_ENDPOINT}/${IMAGE_LIST}\"}" \ - --assets-link "{\"name\":\"${IMAGE_PKG}\",\"url\":\"${RELEASE_ENDPOINT}/${IMAGE_PKG}\"}" \ - --assets-link "{\"name\":\"${REPOS_PKG}\",\"url\":\"${RELEASE_ENDPOINT}/${REPOS_PKG}\"}" - #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- @@ -194,33 +141,34 @@ release: .infra fork: stage: network up rules: - # Skip when branch name starts with "hotfix" or "patch" + # skip job when branch name starts with "hotfix" or "patch" - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^(hotfix|patch)/' when: never - # Only run on merge requests when manually activated + # run job on merge requests when manually activated - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - when: manual allow_failure: false + when: manual # Abstract for jobs responsible for creating infrastructure .infra create: rules: - # Skip when branch name starts with "hotfix" or "patch" + # skip job when branch name starts with "hotfix" or "patch" - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^(hotfix|patch)/' when: never - # Only run on merge requests + # run pipeline on commits to default branch - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - + # Abstract for jobs responsible for cleaning up infrastructure .infra cleanup: rules: - # Skip when branch name starts with "hotfix" or "patch" + # skip job when branch name starts with "hotfix" or "patch" - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^(hotfix|patch)/' when: never - # Always run on merge requests + # run job on merge requests regardless of failure - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' allow_failure: true when: always + #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- @@ -243,6 +191,7 @@ aws/network down: environment: name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} action: stop + #----------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------- @@ -257,6 +206,8 @@ aws/rke2/cluster up: - .rke2 up needs: - job: aws/network up + environment: + name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} # Install BigBang on RKE2 cluster on AWS aws/rke2/bigbang up: @@ -274,6 +225,8 @@ aws/rke2/bigbang up: - kubectl apply -f ${CI_PROJECT_DIR}/.gitlab-ci/jobs/rke2/dependencies/k8s-resources/aws/default-ebs-sc.yaml script: - *deploy_bigbang + environment: + name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} # Run tests on BigBang on RKE2 cluster on AWS aws/rke2/bigbang test: @@ -294,6 +247,8 @@ aws/rke2/bigbang test: - yum install bind-utils -y - ./scripts/hosts.sh - *test_bigbang + environment: + name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} # Uninstall BigBang on RKE2 cluster on AWS aws/rke2/bigbang down: @@ -312,6 +267,8 @@ aws/rke2/bigbang down: - helm un -n bigbang bigbang # TODO: Smarter wait - sleep 180 + environment: + name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} # Destroy RKE2 cluster on AWS aws/rke2/cluster down: @@ -321,4 +278,65 @@ aws/rke2/cluster down: - .rke2 down needs: - job: aws/rke2/bigbang down + environment: + name: review/aws-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA} + +#----------------------------------------------------------------------------------------------------------------------- + +#----------------------------------------------------------------------------------------------------------------------- +# Release Jobs +# + +package: + stage: package + image: registry.dsop.io/platform-one/big-bang/umbrella/synker:0.0.1 + rules: + # run job for manual tag events + - if: $CI_COMMIT_TAG + # when: never + # # run job on commits to default branch + # - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + before_script: + # Set up auth + - mkdir -p /root/.docker + - echo $DOCKER_AUTH_CONFIG > /root/.docker/config.json + script: + - cp ./scripts/package/synker.yaml ./synker.yaml + # Populate images list in synker config + # NOTE: This is stupid and hacky, use yq or something better to do this + - cat images.txt | sed -e 's/^/ - /' >> synker.yaml + - synker pull -b=1 + # Tar up synker as well? + - cp /usr/local/bin/synker synker.yaml /var/lib/registry/ + - tar -C /var/lib/registry -czvf $IMAGE_PKG . + - tar -czvf $IMAGE_PKG /var/lib/registry + # Package dependent repos + - ./scripts/package/gits.sh + - tar -czf $REPOS_PKG repos/ + # Prep release + - mkdir -p release + - mv $IMAGE_LIST $IMAGE_PKG $REPOS_PKG release/ + # Publish packages to s3 release + - aws s3 sync --quiet release/ s3://umbrella-bigbang-releases/umbrella/${CI_COMMIT_TAG} + after_script: [] + +release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: + # run job for manual tag events + - if: $CI_COMMIT_TAG + # when: never + # # run job on commits to default branch + # - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + variables: + RELEASE_ENDPOINT: https://${RELEASE_BUCKET}.s3-${AWS_DEFAULT_REGION}.amazonaws.com/umbrella/${CI_COMMIT_TAG} + script: + - | + release-cli create --name "Big Bang v${CI_COMMIT_TAG}" --tag-name ${CI_COMMIT_TAG} \ + --description "Automated release notes are a WIP." \ + --assets-link "{\"name\":\"${IMAGE_LIST}\",\"url\":\"${RELEASE_ENDPOINT}/${IMAGE_LIST}\"}" \ + --assets-link "{\"name\":\"${IMAGE_PKG}\",\"url\":\"${RELEASE_ENDPOINT}/${IMAGE_PKG}\"}" \ + --assets-link "{\"name\":\"${REPOS_PKG}\",\"url\":\"${RELEASE_ENDPOINT}/${REPOS_PKG}\"}" + #----------------------------------------------------------------------------------------------------------------------- \ No newline at end of file