mirror of
https://gitlab.com/veilid/veilid.git
synced 2024-12-25 15:29:32 -05:00
d38f3cb42f
Targets have been parallelized so that initial push of the container cache should build the whole build a little quicker, plus the container should now use the cache for more of the build and so speed up normal builds to just the compilation and test of the code that has changed The `build_cache` target now builds a `build-cache:latest` container that is stored in the GitLab project Container Registry, and then used (if it exists) by the `test_build` target. The `build_cache` task runs under 3 conditions, 1. the container does not exist, 2. if scheduled, 3. if run manually from the Pipelines page in the GitLab interface. It is recommended that the build is set up to run on a weekly schedule via the `Pipeline schedules` page in GitLab with the schedule of `0 2 * * 6`.
151 lines
3.9 KiB
YAML
151 lines
3.9 KiB
YAML
variables:
|
|
NO_DOCKER: 1
|
|
FORCE_COLOR: 1
|
|
EARTHLY_EXEC_CMD: "/bin/sh"
|
|
GIT_SUBMODULE_STRATEGY: normal
|
|
|
|
stages:
|
|
- prepare
|
|
- test
|
|
- build_packages
|
|
- release
|
|
- distribute
|
|
|
|
# base earthly setup for jobs
|
|
.base:
|
|
tags: [ saas-linux-medium-amd64 ]
|
|
image: docker
|
|
services:
|
|
- docker:dind
|
|
|
|
.earthly: &earthly_setup
|
|
- apk update && apk add git
|
|
- wget https://github.com/earthly/earthly/releases/download/v0.7.15/earthly-linux-amd64 -O /usr/local/bin/earthly
|
|
- chmod +x /usr/local/bin/earthly
|
|
- earthly bootstrap
|
|
- echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
|
|
- test "$CI_PROJECT_PATH" != "veilid/veilid" && project_args="--CI_PROJECT_PATH=$CI_PROJECT_PATH"
|
|
|
|
# Create the build container if:
|
|
# - no container in the registry
|
|
# - run as part of a schedule
|
|
# - run manually from the pipelines web page
|
|
build_cache:
|
|
extends: .base
|
|
stage: prepare
|
|
script:
|
|
- if ! docker manifest inspect registry.gitlab.com/$CI_PROJECT_PATH/build-cache:latest > /dev/null || [[ "$CI_PIPELINE_SOURCE" == "schedule" ]] || [[ "$CI_PIPELINE_SOURCE" == "web" ]] ; then
|
|
- *earthly_setup
|
|
- earthly --use-inline-cache --save-inline-cache --strict --push -P +build-linux-cache $project_args
|
|
- else
|
|
- echo "No need to rebuild"
|
|
- fi
|
|
|
|
# Runs a basic unit test build, this task will use the `build-cache:latest` as set up in the projects Container Registry
|
|
test_build:
|
|
extends: .base
|
|
stage: test
|
|
only:
|
|
- main
|
|
- pushes
|
|
- merge_requests
|
|
script:
|
|
- *earthly_setup
|
|
- earthly --use-inline-cache +unit-tests-linux --BASE=container $project_args
|
|
resource_group: test
|
|
when: manual
|
|
|
|
release_job:
|
|
stage: release
|
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
script:
|
|
- echo "running release_job"
|
|
release: # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
|
|
tag_name: '$CI_COMMIT_TAG'
|
|
description: '$CI_COMMIT_TAG'
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
create_build_machines:
|
|
stage: build_packages
|
|
tags:
|
|
- build-orchestration
|
|
script:
|
|
- /home/gitlab-runner/build-machine-ctl.sh create amd64-deb
|
|
- /home/gitlab-runner/build-machine-ctl.sh create arm64-deb
|
|
- /home/gitlab-runner/build-machine-ctl.sh create amd64-rpm
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
package_amd64_deb:
|
|
stage: build_packages
|
|
needs:
|
|
- create_build_machines
|
|
tags:
|
|
- build-amd64-deb
|
|
script:
|
|
- earthly bootstrap
|
|
- earthly +package-linux-amd64-deb
|
|
- /home/gitlab-runner/scp-to-orchestrator.sh
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
package_arm64_deb:
|
|
stage: build_packages
|
|
needs:
|
|
- create_build_machines
|
|
tags:
|
|
- build-arm64-deb
|
|
script:
|
|
- earthly bootstrap
|
|
- earthly +package-linux-arm64-deb
|
|
- /home/gitlab-runner/scp-to-orchestrator.sh
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
package_amd64_rpm:
|
|
stage: build_packages
|
|
needs:
|
|
- create_build_machines
|
|
tags:
|
|
- build-amd64-rpm
|
|
script:
|
|
- earthly bootstrap
|
|
- earthly +package-linux-amd64-rpm
|
|
- /home/gitlab-runner/scp-to-orchestrator.sh
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
build_repositories:
|
|
stage: distribute
|
|
tags:
|
|
- build-orchestration
|
|
script:
|
|
- /home/gitlab-runner/distribute-packages.sh
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
deploy_repos:
|
|
stage: distribute
|
|
needs:
|
|
- build_repositories
|
|
tags:
|
|
- repo-server
|
|
script:
|
|
- /home/gitlab-runner/deploy-repo.sh
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|
|
|
|
delete_build_machines:
|
|
stage: distribute
|
|
needs:
|
|
- deploy_repos
|
|
tags:
|
|
- build-orchestration
|
|
script:
|
|
- /home/gitlab-runner/build-machine-ctl.sh delete amd64-deb
|
|
- /home/gitlab-runner/build-machine-ctl.sh delete arm64-deb
|
|
- /home/gitlab-runner/build-machine-ctl.sh delete amd64-rpm
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG =~ /v\d.+/'
|