diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5ecf49a3393a4c1e6686e9f6295b1b31dc2b778..2a2fe6b3fb5ac96a8956b2e6e8426482d739a46e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,325 +1,25 @@ -# include: -# - project: 'cl-docker-images/ci-helpers' -# file: '/cl-docker-images-default-pipeline.yml' - include: - - template: 'Workflows/Branch-Pipelines.gitlab-ci.yml' + - project: 'cl-docker-images/ci-helpers' + file: '/cl-docker-images-default-pipeline-v2.yml' variables: - CANONICAL_NAMESPACE: daewok CL_DOCKER_IMAGES_AMD64: "1" CL_DOCKER_IMAGES_ARM64V8: "1" CL_DOCKER_IMAGES_WINAMD64: "1" WINDOWS_PARENT_IMAGES: "openjdk:15-windowsservercore-1809;openjdk:11-windowsservercore-1809;openjdk:8-windowsservercore-1809;openjdk:15-windowsservercore-ltsc2016;openjdk:11-windowsservercore-ltsc2016;openjdk:8-windowsservercore-ltsc2016" -stages: - - update nightly - - generate manifest - - build - - push - - put shared - - readme - -############################################################################## -# Nightly version updater - -Update nightly images: - stage: update nightly - image: alpine - script: - - apk add git openssh-client jq curl ca-certificates bash - - ./update.sh nightly - - | - if git diff --quiet; then - exit 0 - fi - - NEW_COMMIT="$(grep -e "^ENV ABCL_COMMIT" nightly/buster/jdk-11/Dockerfile | cut -d" " -f 3)" - - mkdir -p ~/.ssh - - ssh-keyscan "$CI_SERVER_HOST" > ~/.ssh/known_hosts - - git remote add origin-ssh "git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git" - - git add . - - git config user.name "$GITLAB_USER_NAME" - - git config user.email "$GITLAB_USER_EMAIL" - - git commit -m "Update nightly to commit $NEW_COMMIT" - - chmod 600 $NIGHTLY_DEPLOY_PRIVATE_KEY - - GIT_SSH_COMMAND="ssh -i $NIGHTLY_DEPLOY_PRIVATE_KEY" git push origin-ssh HEAD:$CI_COMMIT_BRANCH - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - -############################################################################## -# Fixup manifest - -Generate manifest: - stage: generate manifest - script: - - mkdir -p build - - | - echo "GitFetch: refs/heads/$CI_COMMIT_REF_NAME" > "build/$CI_PROJECT_NAME" - - | - ./generate-stackbrew-library.sh all >> "build/$CI_PROJECT_NAME" - - sed -i "s/github.com/gitlab.common-lisp.net/" "build/$CI_PROJECT_NAME" - artifacts: - paths: - - build/ - tags: - - bashbrew-amd64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - when: on_success - - -############################################################################## -# Build - -.Bashbrew build Linux: - stage: build - variables: - BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE - BASHBREW_LIBRARY: $CI_PROJECT_DIR/build - BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew - BASHBREW_DEBUG: "true" - script: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker info - - mkdir -p cache - - | - parents="$(bashbrew cat --format '{{- range $.Entries -}} - {{- if not ($.SkipConstraints .) -}} - {{- $.DockerFroms . | join "\n" -}} - {{- "\n" -}} - {{- end -}} - {{- end -}}' $CI_PROJECT_NAME \ - | { grep -vE '^$|^scratch$|^'"$CANONICAL_NAMESPACE/$CI_PROJECT_NAME"'(:|$)' || true; } \ - | sort -u)" - - echo "$parents" - - | - for parent in $parents; do - echo "Pulling $parent" - docker pull --platform=$DOCKER_PLATFORM "$parent" - done - - retry -t 3 -d 60 -- bashbrew build $CI_PROJECT_NAME - - docker images - - bashbrew tag --target-namespace=$CANONICAL_NAMESPACE$ARCH$CI_PIPELINE_IID $CI_PROJECT_NAME - cache: - paths: - - cache - key: $ARCH - -.Bashbrew build win: - stage: build - variables: - BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE - BASHBREW_LIBRARY: $CI_PROJECT_DIR/build - BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew - BASHBREW_DEBUG: "true" - ARCH: winamd64 - BASHBREW_ARCH: windows-amd64 - script: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker info - # Make the user specify the parent images. I don't feel like figuring out - # how to automatically figure them out using powershell. - - $parentArray = $WINDOWS_PARENT_IMAGES.split(";") - - foreach ($parent in $parentArray){ docker pull $parent } - - bashbrew --constraint windowsservercore-ltsc2016 --constraint windowsservercore-1809 build $CI_PROJECT_NAME - - docker images - - bashbrew --constraint windowsservercore-ltsc2016 --constraint windowsservercore-1809 tag --target-namespace=$CANONICAL_NAMESPACE$ARCH$CI_PIPELINE_IID $CI_PROJECT_NAME - cache: - paths: - - cache - key: $ARCH - tags: - - bashbrew-winamd64 - -Bashbrew build - amd64: - extends: .Bashbrew build Linux - variables: - ARCH: amd64 - BASHBREW_ARCH: amd64 - DOCKER_PLATFORM: linux/amd64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: '$CL_DOCKER_IMAGES_AMD64 && $CI_COMMIT_REF_PROTECTED == "true"' - tags: - - bashbrew-amd64 - -Bashbrew build - arm64: - extends: .Bashbrew build Linux - variables: - ARCH: arm64v8 - BASHBREW_ARCH: arm64v8 - DOCKER_PLATFORM: linux/arm64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: '$CL_DOCKER_IMAGES_ARM64V8 && $CI_COMMIT_REF_PROTECTED == "true"' - tags: - - bashbrew-arm64v8 - -Bashbrew build - arm32v7: - extends: .Bashbrew build Linux - variables: - ARCH: arm32v7 - BASHBREW_ARCH: arm32v7 - DOCKER_PLATFORM: linux/arm/v7 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: '$CL_DOCKER_IMAGES_ARM32V7 && $CI_COMMIT_REF_PROTECTED == "true"' - tags: - - bashbrew-arm32v7 - -Bashbrew build - winamd64: - extends: .Bashbrew build win - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: '$CL_DOCKER_IMAGES_WINAMD64 && $CI_COMMIT_REF_PROTECTED == "true"' - - -############################################################################## -# Push - -.Bashbrew push Linux: - stage: push - variables: - BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE - BASHBREW_LIBRARY: $CI_PROJECT_DIR/build - BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew - BASHBREW_DEBUG: "true" - script: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker info - - mkdir -p cache - - bashbrew --namespace=$CANONICAL_NAMESPACE$ARCH$CI_PIPELINE_IID tag --target-namespace=$CANONICAL_NAMESPACE$ARCH $CI_PROJECT_NAME - - retry -t 3 -d 60 -- bashbrew --namespace=$CANONICAL_NAMESPACE$ARCH push $CI_PROJECT_NAME - cache: - paths: - - cache - key: $ARCH - -.Bashbrew push win: - stage: push - variables: - BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE - BASHBREW_LIBRARY: $CI_PROJECT_DIR/build - BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew - BASHBREW_DEBUG: "true" - ARCH: winamd64 - BASHBREW_ARCH: windows-amd64 - script: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker info - - bashbrew --constraint windowsservercore-ltsc2016 --constraint windowsservercore-1809 --namespace=$CANONICAL_NAMESPACE$ARCH$CI_PIPELINE_IID tag --target-namespace=$CANONICAL_NAMESPACE$ARCH $CI_PROJECT_NAME - - bashbrew --constraint windowsservercore-ltsc2016 --constraint windowsservercore-1809 --namespace=$CANONICAL_NAMESPACE$ARCH push $CI_PROJECT_NAME - cache: - paths: - - cache - key: $ARCH - tags: - - bashbrew-winamd64 - -Bashbrew push - amd64: - extends: .Bashbrew push Linux - variables: - ARCH: amd64 - BASHBREW_ARCH: amd64 - DOCKER_PLATFORM: linux/amd64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && $CL_DOCKER_IMAGES_AMD64 - tags: - - bashbrew-amd64 - -Bashbrew push - arm64: - extends: .Bashbrew push Linux - variables: - ARCH: arm64v8 - BASHBREW_ARCH: arm64v8 - DOCKER_PLATFORM: linux/arm64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && $CL_DOCKER_IMAGES_ARM64V8 - tags: - - bashbrew-arm64v8 - -Bashbrew push - arm32v7: - extends: .Bashbrew push Linux - variables: - ARCH: arm32v7 - BASHBREW_ARCH: arm32v7 - DOCKER_PLATFORM: linux/arm/v7 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && $CL_DOCKER_IMAGES_ARM32V7 - tags: - - bashbrew-arm32v7 - -Bashbrew push - winamd64: - extends: .Bashbrew push win - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && $CL_DOCKER_IMAGES_WINAMD64 - ############################################################################## # Put shared -Bashbrew put-shared: - stage: put shared +put-shared clfoundation: + extends: Bashbrew put-shared variables: - BASHBREW_NAMESPACE: $CANONICAL_NAMESPACE - BASHBREW_LIBRARY: $CI_PROJECT_DIR/build - BASHBREW_CACHE: $CI_PROJECT_DIR/cache/bashbrew - BASHBREW_DEBUG: "true" - script: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker info - - mkdir -p cache - - retry -t 3 -d 60 -- bashbrew --arch-namespace amd64=${CANONICAL_NAMESPACE}amd64 --arch-namespace arm32v7=${CANONICAL_NAMESPACE}arm32v7 --arch-namespace arm64v8=${CANONICAL_NAMESPACE}arm64v8 --arch-namespace windows-amd64=${CANONICAL_NAMESPACE}winamd64 put-shared "$CI_PROJECT_NAME" - tags: - - bashbrew-amd64 - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) - cache: - paths: - - cache - key: put-shared + BASHBREW_NAMESPACE: clfoundation ############################################################################## # Readme -Pushrm: - # We have to take the long way around to do this because Gitlab CI does not - # allow creating a job with no script. Ideally we would just use the - # container's entrypoint to do the work for us. We can't even override the - # entrypoint because the pushrm image is FROM scratch which doesn't have a - # shell... Watch https://gitlab.com/gitlab-org/gitlab/-/issues/19717 - stage: readme - script: - - docker info - - ./generate-readme.sh < build/$CI_PROJECT_NAME > build/hub-description.md - - | - docker run -i \ - -v $(pwd):/app \ - -e DOCKER_USER=$DOCKER_README_USERNAME -e DOCKER_PASS="$DOCKER_README_PASSWORD" \ - chko/docker-pushrm:1 \ - --file /app/build/hub-description.md \ - --debug \ - $CANONICAL_NAMESPACE/$CI_PROJECT_NAME - artifacts: - paths: - - build/hub-description.md - rules: - - if: '$CI_PIPELINE_SOURCE == "schedule" && $SCHEDULE_TYPE == "nightly-update"' - when: never - - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) - tags: - - bashbrew-amd64 +Pushrm clfoundation: + extends: Pushrm + variables: + README_NAMESPACE: clfoundation