############## # Conditions # ############## .if-merge-request-pipeline: &if-merge-request-pipeline if: $CI_PIPELINE_SOURCE == "merge_request_event" .if-default-branch: &if-default-branch if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' .if-stable-release-branch: &if-stable-release-branch if: $CI_COMMIT_REF_NAME =~ /\A[0-9]+-[0-9]+-stable\z/ .if-release-tag: &if-release-tag if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?$/ && $CI_PROJECT_URL == "https://gitlab.com/gitlab-org/charts/gitlab-runner"' .if-security-release-tag: &if-security-release-tag if: '$CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)?$/ && $CI_PROJECT_URL == "https://gitlab.com/gitlab-org/security/charts/gitlab-runner"' ######### # Rules # ######### .rules:default: rules: - <<: *if-merge-request-pipeline - <<: *if-default-branch - <<: *if-stable-release-branch - <<: *if-release-tag - <<: *if-security-release-tag .rules:release:development: rules: - <<: *if-default-branch when: never - <<: *if-merge-request-pipeline when: manual .rules:release:beta: rules: - <<: *if-default-branch .rules:release:stable: rules: - <<: *if-release-tag - <<: *if-security-release-tag ############ # Pipeline # ############ default: image: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-charts-build-base-helm-3.7 tags: - gitlab-org variables: GIT_CLONE_PATH: $CI_BUILDS_DIR/gitlab-runner stages: - test - release - post-release lint: extends: - .rules:default stage: test script: - helm lint . integration test: extends: - .rules:default variables: DOCKER_HOST: "tcp://kubernetes:2375/" DOCKER_TLS_CERTDIR: "" DOCKER_DRIVER: overlay2 INTEGRATION_RUNNER_NAME: integration-test-$CI_COMMIT_SHORT_SHA INTEGRATION_HELM_POD_RELEASE_LABEL: release=$INTEGRATION_RUNNER_NAME stage: test services: - name: docker:20.10.16-dind alias: kubernetes image: docker:20.10.16-git script: # Initialize KIND cluster - apk add --no-cache openssl curl bash - curl -Lo /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.20.4/bin/linux/amd64/kubectl && chmod +x /usr/local/bin/kubectl - curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64 && chmod +x /usr/local/bin/kind - kind create cluster --config=$(pwd)/scripts/kind-config.yaml - kind get kubeconfig|sed -e 's/0.0.0.0/kubernetes/g' > kubeconfig.yaml - export KUBECONFIG=$(pwd)/kubeconfig.yaml - kubectl version - kubectl cluster-info - bash -c "for _i in {0..60}; do kubectl -n default get serviceaccount default -o name > /dev/null 2>&1 && break; sleep 1; done" - bash -c "for _i in {0..60}; do kubectl get nodes|grep -w Ready > /dev/null 2>&1 && break; sleep 1; done" # Install helm latest version instead of pre-installed one in registry.gitlab.com/gitlab-org/gitlab-build-images image - curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash # Run tests - bash -x scripts/integration.sh after_script: - export KUBECONFIG=$(pwd)/kubeconfig.yaml - bash -x scripts/integration_cleanup.sh tags: - gitlab-org-docker release development: extends: - .rules:release:development stage: release script: - helm package . artifacts: paths: - gitlab-runner*.tgz expire_in: 7d allow_failure: true release beta: extends: - .rules:release:beta stage: release variables: S3_URL: s3://${S3_BUCKET}${S3_PATH} REPO_URL: https://${S3_BUCKET}.s3.amazonaws.com${S3_PATH} script: - apk add --no-cache py-pip - pip install awscli - 'beta_info=$(git describe --long | sed -r "s/v[0-9\.]+(-rc[0-9]+)?-//")' - 'build_time=$(date +%s)' - 'sed -r "s/(version: [0-9\.]+-beta)/\1-${build_time}-${beta_info}/" -i Chart.yaml' - 'sed -r "s/appVersion: .*/appVersion: bleeding/" -i Chart.yaml' - 'sed -r "s/imagePullPolicy: IfNotPresent/imagePullPolicy: Always/" -i values.yaml' - mkdir -p public/ - aws s3 cp ${S3_URL}/index.yaml public/index.yaml || true - (cd public; helm package ../) - helm repo index public --merge public/index.yaml --url ${REPO_URL} - aws s3 sync public ${S3_URL} --acl public-read - 'echo "To install repository run: helm repo add gitlab-runner-beta ${REPO_URL} && helm repo update"' release stable: extends: - .rules:release:stable stage: release image: alpine:3.14 script: - apk add --no-cache curl - curl --fail-with-body --request POST --form "token=$CI_JOB_TOKEN" --form ref=master --form "variables[CHART_NAME]=$CI_PROJECT_NAME" --form "variables[RELEASE_REF]=$CI_COMMIT_REF_NAME" https://gitlab.com/api/v4/projects/2860651/trigger/pipeline trigger charts update: extends: - .rules:release:stable stage: post-release image: alpine:3.14 script: - apk add --no-cache curl - curl --fail-with-body --request POST --form "token=${GITLAB_CHARTS_TRIGGER_TOKEN}" --form ref=master --form "variables[DEPS_PIPELINE]=true" https://gitlab.com/api/v4/projects/3828396/trigger/pipeline needs: - job: release stable ############## # Includes # ############## include: - template: Security/Dependency-Scanning.gitlab-ci.yml