variables: GIT_SUBMODULE_STRATEGY: recursive DOCKER_HUB_CI_REPO: daewok/clpm-ci include: - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml' - local: "/.gitlab-ci.versions.yml" stages: - prep - build - test ############################################################################## # Build Docker images for CI ############################################################################## .alpine-image: stage: prep image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] variables: GIT_SUBMODULE_STRATEGY: none script: - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - | /kaniko/executor --cache --cache-repo $CI_REGISTRY_IMAGE/kaniko \ --context $CI_PROJECT_DIR \ --build-arg sbcl_version=$SBCL_VERSION \ --build-arg alpine_version=$ALPINE_VERSION \ --dockerfile $CI_PROJECT_DIR/docker/Dockerfile.alpine-ci \ --destination $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-alpine$ALPINE_VERSION-$ARCH rules: - if: '($CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && ($ARCH == "amd64" || ($ARCH == "arm" && $CLPM_CI_LINUX_ARM64) || ($ARCH == "arm64" && $CLPM_CI_LINUX_ARM64))' changes: - .gitlab-ci.versions.yml - docker/Dockerfile.alpine-ci .debian-image: stage: prep image: name: gcr.io/kaniko-project/executor:debug entrypoint: [""] variables: GIT_SUBMODULE_STRATEGY: none script: - mkdir -p /kaniko/.docker - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - | /kaniko/executor --cache --cache-repo $CI_REGISTRY_IMAGE/kaniko \ --context $CI_PROJECT_DIR \ --build-arg sbcl_version=$SBCL_VERSION \ --build-arg debian_version=$DEBIAN_VERSION \ --customPlatform=linux/$ARCH \ --dockerfile $CI_PROJECT_DIR/docker/Dockerfile.debian-ci \ --destination $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-$DEBIAN_VERSION-$ARCH rules: - if: '($CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) && ($ARCH == "amd64" || ($ARCH == "arm" && $CLPM_CI_LINUX_ARM64) || ($ARCH == "arm64" && $CLPM_CI_LINUX_ARM64))' changes: - .gitlab-ci.versions.yml - docker/Dockerfile.debian-ci alpine-image:amd64: extends: .alpine-image variables: ARCH: amd64 alpine-image:arm64: extends: .alpine-image variables: ARCH: arm64 tags: - arm64 debian-image:amd64: extends: .debian-image variables: ARCH: amd64 debian-image:arm64: extends: .debian-image variables: ARCH: arm64 tags: - arm64 debian-image:arm: extends: .debian-image variables: ARCH: arm tags: - arm64 ############################################################################## # Utils ############################################################################## .git-repo-needed: before_script: # This looks a little funky, but only one of # $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME and $CI_COMMIT_BRANCH will ever be # defined at once. - | if [ -z "$CI_COMMIT_TAG" ]; then git checkout -B $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME $CI_COMMIT_BRANCH $CI_COMMIT_SHA fi .git-repo-needed:windows: variables: GIT_STRATEGY: clone GIT_SUBMODULE_STRATEGY: none GIT_CHECKOUT: "false" before_script: # This looks a little funky, but only one of # $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME and $CI_COMMIT_BRANCH will ever be # defined at once. - | if ($CI_COMMIT_TAG) { git checkout $CI_COMMIT_TAG } else { git checkout -B $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME $CI_COMMIT_BRANCH $CI_COMMIT_SHA } - git submodule init - git submodule update ############################################################################## # Build static releases ############################################################################## .static-release: stage: build image: $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-alpine$ALPINE_VERSION-$ARCH extends: .git-repo-needed script: - sbcl --script scripts/build-release.lisp --static artifacts: paths: - releases/ expire_in: 2 weeks static-release:linux:amd64: extends: .static-release variables: ARCH: amd64 static-release:linux:arm64: extends: .static-release variables: ARCH: arm64 tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' ############################################################################## # Build dynamic releases ############################################################################## .dynamic-release: stage: build image: $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-$DEBIAN_VERSION-$ARCH extends: .git-repo-needed script: - sbcl --script scripts/build-release.lisp artifacts: paths: - releases/ expire_in: 2 weeks dynamic-release:linux:amd64: extends: .dynamic-release variables: ARCH: amd64 dynamic-release:linux:arm64: extends: .dynamic-release variables: ARCH: arm64 tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' dynamic-release:linux:arm: extends: .dynamic-release variables: ARCH: arm tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' dynamic-release:macos:amd64: stage: build extends: .dynamic-release tags: - macos-0.4-amd64 needs: [] rules: - if: '$CLPM_CI_MACOS_AMD64' dynamic-release:windows:amd64: stage: build image: $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-windowsservercore extends: .git-repo-needed:windows script: - $env:WIX = "C:\wix" - sbcl --script scripts/build-release.lisp - sbcl --script scripts/build-msi.lisp artifacts: paths: - releases/ expire_in: 2 weeks rules: - if: '$CLPM_CI_WINDOWS_AMD64' needs: [] tags: - windows-amd64 ############################################################################## # Tests ############################################################################## .linux-test: stage: test image: clfoundation/sbcl:$SBCL_VERSION extends: .git-repo-needed script: # Install from the release archive! - VERSION=$(sbcl --script scripts/version.lisp) - cd /tmp - tar xvf $CI_PROJECT_DIR/releases/$VARIANT/clpm-$VERSION-linux-$ARCH.tar.gz - cd clpm-$VERSION-linux-$ARCH - sh install.sh - clpm version -VV - cd $CI_PROJECT_DIR - sbcl --script scripts/test.lisp test-static-release:linux:amd64: extends: .linux-test variables: ARCH: amd64 VARIANT: static needs: - static-release:linux:amd64 test-static-release:linux:arm64: extends: .linux-test variables: ARCH: arm64 VARIANT: static needs: - static-release:linux:arm64 tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' test-dynamic-release:linux:amd64: extends: .linux-test variables: ARCH: amd64 VARIANT: dynamic needs: - dynamic-release:linux:amd64 test-dynamic-release:linux:arm64: extends: .linux-test variables: ARCH: arm64 VARIANT: dynamic needs: - dynamic-release:linux:arm64 tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' .test-dynamic-release:linux:arm: extends: .linux-test # We need an image that specifes the arch directly since we're testing on an # arm64 machine. image: $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-$DEBIAN_VERSION-$ARCH variables: ARCH: arm VARIANT: dynamic needs: - dynamic-release:linux:arm tags: - arm64 rules: - if: '$CLPM_CI_LINUX_ARM64' test-dynamic-release:macos:amd64: stage: test extends: .git-repo-needed variables: ARCH: amd64 VARIANT: dynamic script: # Install from the release archive! - VERSION=$(sbcl --script scripts/version.lisp) - cd /tmp - tar xvf $CI_PROJECT_DIR/releases/$VARIANT/clpm-$VERSION-darwin-$ARCH.tar.gz - cd clpm-$VERSION-darwin-$ARCH - sudo sh install.sh - clpm version -VV - cd $CI_PROJECT_DIR - sbcl --script scripts/test.lisp needs: - dynamic-release:macos:amd64 tags: - macos-0.4-amd64 rules: - if: '$CLPM_CI_MACOS_AMD64' # test-dynamic-release:windows:amd64: # stage: test # extends: .git-repo-needed:windows # image: $CI_REGISTRY_IMAGE/ci:$SBCL_VERSION-windowsservercore # variables: # ARCH: amd64 # VARIANT: dynamic # script: # - $VERSION = sbcl --script scripts/version.lisp # - cp "releases/$VARIANT/clpm-$VERSION-windows-amd64.msi" "C:\clpm-installer.msi" # - Start-Process msiexec.exe -Wait -ArgumentList '/I C:\clpm-installer.msi' # - Update-SessionEnvironment # - clpm version -VV # - sbcl --script scripts/test.lisp # needs: # - dynamic-release:windows:amd64 # tags: # - windows-amd64 # rules: # - if: '$CLPM_CI_WINDOWS_AMD64'