diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 3e64eb7..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,177 +0,0 @@ -stages: - - test - - build - - release - -variables: - GITHUB_REPO: enix/$CI_PROJECT_NAME - PLATFORMS: linux/amd64,linux/arm64 - STANDALONE_PLATFORMS: linux/amd64,linux/arm64,darwin/amd64,freebsd/amd64,openbsd/amd64,solaris/amd64,windows/amd64,linux/arm,linux/386,windows/386 - CACHE_TAG: $CI_REGISTRY_IMAGE:cache - IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest - -.only-main-and-release: - only: - - main - - release - except: - - tags - -.only-semver: - only: - refs: - - /^v([0-9]|[1-9][0-9]*)\.([0-9]|[1-9][0-9]*)\.([0-9]|[1-9][0-9]*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/ - -.init-docker-buildx: - variables: - DOCKER_CLI_EXPERIMENTAL: enabled - services: - - docker:20-dind - before_script: - - mkdir -p ~/.docker/cli-plugins - - wget -O ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/v0.5.1/buildx-v0.5.1.linux-amd64" - - chmod +x ~/.docker/cli-plugins/docker-buildx - - docker context create $CI_PIPELINE_ID - - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create $CI_PIPELINE_ID --name builder --use - - docker buildx inspect builder - - echo -n "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" - -test: - stage: test - image: golang:1.18.6-alpine - except: - - tags - services: - - docker:20-dind - before_script: - - apk add --update gcc libc-dev curl docker-cli bash - - go install sigs.k8s.io/kind@v0.9.0 - - curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" - - chmod +x kubectl - - mv kubectl /usr/local/bin - - docker info - - kind create cluster --name $CI_PIPELINE_ID --config=test/kind-config.yml - - getent hosts docker - - export IP=$(docker inspect $CI_PIPELINE_ID-control-plane --format '{{ .NetworkSettings.Networks.kind.Gateway }}') - - sed -i -E -e "s/localhost|0\.0\.0\.0/docker/g" "$HOME/.kube/config" - - kubectl --insecure-skip-tls-verify cluster-info - - go mod tidy - script: - - go test -v -failfast -timeout 1m -coverprofile=coverage.cov ./internal - - go tool cover -html=coverage.cov -o coverage.html - after_script: - - kind delete cluster --name $CI_PIPELINE_ID - coverage: '/coverage: (\d+\.\d+)% of statements/' - artifacts: - paths: - - coverage.html - -build: - extends: - - .init-docker-buildx - - .only-main-and-release - stage: build - image: docker:stable-dind - script: - - export IMAGE_TAG="$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME" - - docker buildx build --platform "$PLATFORMS" -t "$IMAGE_TAG" --build-arg "VERSION=devel ($CI_COMMIT_SHORT_SHA)" --cache-from $CACHE_TAG --cache-to $CACHE_TAG --push . - -build-latest: - extends: - - .init-docker-buildx - - .only-semver - stage: build - image: docker:stable-dind - script: - - export IMAGE_TAG="$CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME:1}" - - docker buildx build --platform "$PLATFORMS" -t "$IMAGE_TAG" -t "$IMAGE_TAG_LATEST" --build-arg "VERSION=${CI_COMMIT_REF_NAME:1}" --cache-from $CACHE_TAG --cache-to $CACHE_TAG --push . - -semantic-release: - extends: - - .only-main-and-release - stage: release - image: enix/semantic-release:gitlab - when: manual - before_script: - - git show-ref - script: - - "echo \"{\\\"repository\\\": \\\"https://github.com/${GITHUB_REPO}\\\"}\" > package.json" - - semantic-release --ci - -release-assets: - stage: release - image: golang:1.18.6 - extends: - - .only-semver - before_script: - - git show-ref --tags - script: - - set -o xtrace - - export IFS="," - - > - for platform in $STANDALONE_PLATFORMS; do - export GOOS=$(echo "$platform" | cut -d'/' -f1) - export GOARCH=$(echo "$platform" | cut -d'/' -f2) - BIN=$CI_PROJECT_NAME-$GOOS-$GOARCH - go build -tags netgo,osusergo -o $BIN -ldflags "-X \"github.com/enix/$CI_PROJECT_NAME/v3/internal.Version=${CI_COMMIT_REF_NAME:1}\"" ./cmd/$CI_PROJECT_NAME - ./test/upload-release.sh "github_api_token=$GITHUB_TOKEN" "owner=enix" "repo=$CI_PROJECT_NAME" "tag=$CI_COMMIT_TAG" "filename=$BIN" - done - -docker-hub: - extends: - - .only-semver - stage: release - image: - name: ananace/skopeo:latest - entrypoint: [''] - script: - - export IMAGE_TAG="$CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME:1}" - - export PUBLIC_IMAGE_TAG="docker.io/$DOCKER_HUB_REPOSITORY/$CI_PROJECT_NAME:${CI_COMMIT_REF_NAME:1}" - - export PUBLIC_IMAGE_TAG_LATEST="docker.io/$DOCKER_HUB_REPOSITORY/$CI_PROJECT_NAME:latest" - - skopeo --insecure-policy copy --all --src-creds "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" --dest-creds "$DOCKER_HUB_USER:$DOCKER_HUB_PASSWORD" "docker://${IMAGE_TAG}" "docker://${PUBLIC_IMAGE_TAG}" - - skopeo --insecure-policy copy --all --src-creds "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" --dest-creds "$DOCKER_HUB_USER:$DOCKER_HUB_PASSWORD" "docker://${IMAGE_TAG_LATEST}" "docker://${PUBLIC_IMAGE_TAG_LATEST}" - -quay: - extends: - - .only-semver - stage: release - image: - name: ananace/skopeo:latest - entrypoint: [''] - script: - - export IMAGE_TAG="$CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME:1}" - - export PUBLIC_IMAGE_TAG="$QUAY_REPOSITORY/$CI_PROJECT_NAME:${CI_COMMIT_REF_NAME:1}" - - export PUBLIC_IMAGE_TAG_LATEST="$QUAY_REPOSITORY/$CI_PROJECT_NAME:latest" - - skopeo --insecure-policy copy --all --src-creds "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" --dest-creds "$QUAY_USER:$QUAY_PASSWORD" "docker://${IMAGE_TAG}" "docker://${PUBLIC_IMAGE_TAG}" - - skopeo --insecure-policy copy --all --src-creds "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" --dest-creds "$QUAY_USER:$QUAY_PASSWORD" "docker://${IMAGE_TAG_LATEST}" "docker://${PUBLIC_IMAGE_TAG_LATEST}" - -chart: - extends: - - .only-semver - stage: release - image: debian - needs: - - docker-hub - - quay - before_script: - - apt update -y - - apt install -y curl jq git - - curl -sSL 'https://github.com/helm/chart-releaser/releases/download/v1.4.0/chart-releaser_1.4.0_linux_amd64.tar.gz' | tar xz - - mv cr /usr/bin/cr - - curl -sSL 'https://github.com/mikefarah/yq/releases/download/v4.25.2/yq_linux_amd64.tar.gz' | tar xz - - mv yq_linux_amd64 /usr/bin/yq - - git config --global user.name "Monkeynator" - - git config --global user.email "monkeynator@enix.io" - script: - - cd deploy/charts/x509-certificate-exporter/ - - curl -sL "https://api.github.com/repos/enix/x509-certificate-exporter/releases/tags/${CI_COMMIT_REF_NAME}" | jq -r .body > CHANGELOG.md - - ${CI_PROJECT_DIR}/.gitlab-ci/release-chart.sh "${CI_COMMIT_REF_NAME:1}" "$(cat CHANGELOG.md)" "${CONTAINS_SECURITY_UPDATES:-false}" - - export CHARTS_DIRECTORY=/tmp/charts - - git clone https://github.com/enix/helm-charts $CHARTS_DIRECTORY - - mkdir -p $CHARTS_DIRECTORY/charts/x509-certificate-exporter - - cp -r ** $CHARTS_DIRECTORY/charts/x509-certificate-exporter - - cd $CHARTS_DIRECTORY - - cr package $CHARTS_DIRECTORY/charts/x509-certificate-exporter - - cr upload --skip-existing --owner enix --git-repo helm-charts - - cr index --push -i index.yaml --owner enix --git-repo helm-charts diff --git a/.gitlab-ci/release-chart.sh b/.gitlab-ci/release-chart.sh deleted file mode 100755 index c105fb3..0000000 --- a/.gitlab-ci/release-chart.sh +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/bash - -version="$1" -notes="$2" -containsSecurityUpdates="$3" - -if [ "$version" = "" ]; then - echo "Skipping x509 certificate exporter release because no version parameter was passed to the CI script" - exit -fi - -prerelease="false" -versionComponents=(${version//-/ }) - -if [ ! -z "${versionComponents[1]}" ]; then - prerelease="true" -fi - -echo "Releasing x509 certificate exporter version: $version (prerelease: $prerelease)" - -yq -i ".version = \"$version\"" Chart.yaml -yq -i ".appVersion = \"$version\"" Chart.yaml -yq -i ".annotations[\"artifacthub.io/prerelease\"] = \"$prerelease\"" Chart.yaml -yq -i ".annotations[\"artifacthub.io/containsSecurityUpdates\"] = \"$containsSecurityUpdates\"" Chart.yaml - -changes="[]" -IFS=$'\n' -for line in $notes; do - if [[ "${line:0:1}" == "*" ]]; then - changes=$(echo $changes | jq ". += [$(echo -n ${line:2} | jq -R -s '.')]") - fi -done - -rawChanges="$(echo -n $changes | jq -R -s '.')" -yq -i ".annotations[\"artifacthub.io/changes\"] = $rawChanges" Chart.yaml