ligo/.gitlab-ci.yml

466 lines
12 KiB
YAML
Raw Normal View History

# TODO: remove this as submodules aren't used anymore.
variables:
2019-05-14 20:17:39 +04:00
GIT_SUBMODULE_STRATEGY: recursive
build_binary_script: "./scripts/distribution/generic/build.sh"
package_binary_script: "./scripts/distribution/generic/package.sh"
LIGO_REGISTRY_IMAGE_BASE_NAME: "${CI_PROJECT_PATH}/${CI_PROJECT_NAME}"
WEBIDE_IMAGE_NAME: "registry.gitlab.com/${CI_PROJECT_PATH}/ligo_webide"
2019-05-27 14:06:56 +04:00
stages:
- test
- build_and_package_binaries
2019-11-10 02:34:20 +04:00
- build_docker
- build_and_deploy
2020-03-06 21:35:14 +04:00
- ide-unit-test
- ide-build
- ide-e2e-test
- ide-deploy
- nix
- nix-push
2020-05-15 19:57:22 +04:00
- versioning
2020-01-23 21:47:24 +04:00
# TODO provide sensible CI for master
dont-merge-to-master:
stage: test
script:
- "false"
only:
- master
2020-03-06 21:35:14 +04:00
.build_binary: &build_binary
stage: test # To run in sequence and save CPU usage, use stage: build_and_package_binaries
script:
- export COMMIT_DATE="$(git show --no-patch --format=%ci)"
- $build_binary_script "$target_os_family" "$target_os" "$target_os_version"
- $package_binary_script "$target_os_family" "$target_os" "$target_os_version"
artifacts:
paths:
- dist/package/**/*
.website_build: &website_build
stage: build_and_deploy
2020-03-04 20:10:59 +04:00
image: node:12
dependencies:
- build-and-package-debian-9
- build-and-package-debian-10
- build-and-package-ubuntu-18-04
- build-and-package-ubuntu-19-10
before_script:
- export COMMIT_DATE="$(git show --no-patch --format=%ci)"
- export TERM=dumb
2019-06-07 13:56:03 +04:00
- scripts/install_native_dependencies.sh
2019-09-06 06:02:18 +04:00
- scripts/install_opam.sh # TODO: or scripts/install_build_environment.sh ?
2019-06-07 13:56:03 +04:00
- export PATH="/usr/local/bin${PATH:+:}${PATH:-}"
- eval $(opam config env)
2019-09-06 06:02:18 +04:00
- scripts/setup_switch.sh
2019-06-07 13:56:03 +04:00
- eval $(opam config env)
2019-09-08 00:52:00 +04:00
- scripts/setup_repos.sh
2019-06-07 13:56:03 +04:00
# install deps for internal documentation
2019-09-07 16:25:32 +04:00
- scripts/install_vendors_deps.sh
2019-09-08 00:52:00 +04:00
- opam install -y odoc
2019-09-07 16:25:32 +04:00
- scripts/build_ligo_local.sh
2019-06-07 13:56:03 +04:00
# build with odoc
- dune build @doc
2019-10-01 18:21:01 +04:00
# copy .deb packages into website
- find dist -name \*.deb -exec sh -c 'cp {} gitlab-pages/website/static/deb/ligo_$(basename $(dirname {})).deb' \;
2020-03-04 22:39:06 +04:00
# yarn
- cd gitlab-pages/website
2020-03-04 22:39:06 +04:00
- yarn install
script:
2020-03-04 22:39:06 +04:00
- yarn build
# move internal odoc documentation to the website folder
2020-03-04 18:09:53 +04:00
- mv ../../_build/default/_doc/_html/ build/odoc
2019-06-06 17:45:45 +04:00
after_script:
2020-04-15 14:17:04 +04:00
- cp -r gitlab-pages/website/build public
- cp -r gitlab-pages/website/sitemap.xml public/sitemap.xml
artifacts:
paths:
- public
2019-05-27 14:06:56 +04:00
.docker: &docker
image: docker:19.03.5
2019-05-27 14:06:56 +04:00
services:
- docker:19.03.5-dind
.before_script: &before_script
before_script:
# Install dependencies
# rsync is needed by opam to sync a package installed from a local directory with the copy in ~/.opam
- export COMMIT_DATE="$(git show --no-patch --format=%ci)"
- export TERM=dumb
- scripts/install_native_dependencies.sh
2019-09-06 06:02:18 +04:00
- scripts/install_opam.sh # TODO: or scripts/install_build_environment.sh ?
- export PATH="/usr/local/bin${PATH:+:}${PATH:-}"
- eval $(opam config env)
2019-09-06 06:02:18 +04:00
- scripts/setup_switch.sh
- eval $(opam config env)
2019-09-08 00:52:00 +04:00
- scripts/setup_repos.sh
2020-05-15 19:57:22 +04:00
version_scheduled_job:
stage: versioning
script:
- scripts/versioning.sh
only:
- schedules
2019-06-06 19:59:03 +04:00
local-dune-job:
<<: *before_script
2019-05-27 14:06:56 +04:00
stage: test
script:
2019-09-06 06:02:18 +04:00
- scripts/install_vendors_deps.sh
- scripts/build_ligo_local.sh
2019-11-21 22:28:38 +04:00
- dune runtest
2019-12-26 21:12:07 +04:00
- make coverage
artifacts:
paths:
- _coverage_all
2020-01-23 20:33:09 +04:00
only:
- merge_requests
- dev
2020-05-15 19:57:22 +04:00
- tags
- triggers
- /^.*-run-dev$/
2019-09-07 15:30:46 +04:00
# Run a docker build without publishing to the registry
build-current-docker-image:
2019-09-08 00:52:00 +04:00
stage: build_docker
2019-11-10 02:34:20 +04:00
dependencies:
- build-and-package-debian-10
2019-09-07 15:30:46 +04:00
<<: *docker
script:
- export COMMIT_DATE="$(git show --no-patch --format=%ci)"
- sh scripts/build_docker_image.sh next
- sh scripts/test_cli.sh
2020-01-23 20:33:09 +04:00
only:
- merge_requests
2019-05-27 14:06:56 +04:00
# When a MR/PR is merged to dev
2019-05-27 14:06:56 +04:00
# take the previous build and publish it to Docker Hub
2019-06-06 19:59:03 +04:00
build-and-publish-latest-docker-image:
stage: build_and_deploy
2019-05-27 14:06:56 +04:00
<<: *docker
2019-11-10 02:34:20 +04:00
dependencies:
- build-and-package-debian-10
script:
- sh scripts/build_docker_image.sh $(if test "$CI_COMMIT_REF_NAME" = "dev"; then echo next; else echo next-attempt; fi)
- sh scripts/test_cli.sh
- echo ${LIGO_REGISTRY_PASSWORD} | docker login -u ${LIGO_REGISTRY_USER} --password-stdin
2020-02-18 19:18:51 +04:00
- docker push ${LIGO_REGISTRY_IMAGE_BUILD:-ligolang/ligo}:$(if test "$CI_COMMIT_REF_NAME" = "dev"; then echo next; else echo next-attempt; fi)
rules:
# Only deploy docker when from the dev branch AND on the canonical ligolang/ligo repository
- if: '$CI_COMMIT_REF_NAME =~ /^(dev|.*-run-dev)$/ && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
# It'd be a good idea to generate those jobs dynamically,
# based on desired targets
build-and-package-debian-9:
<<: *docker
# To run in sequence and save CPU usage, use stage: build_and_package_binaries
stage: test
variables:
target_os_family: "debian"
target_os: "debian"
target_os_version: "9"
<<: *build_binary
2020-01-23 20:33:09 +04:00
only:
- dev
2020-05-15 19:57:22 +04:00
- tags
- /^.*-run-dev$/
build-and-package-debian-10:
<<: *docker
# To run in sequence and save CPU usage, use stage: build_and_package_binaries
stage: test
variables:
target_os_family: "debian"
target_os: "debian"
target_os_version: "10"
<<: *build_binary
2020-01-23 20:33:09 +04:00
# this one is merge_requests and dev, because the debian 10 binary
# is used for build-current-docker-image and for
# build-and-publish-latest-docker-image
only:
- merge_requests
- dev
2020-05-15 19:57:22 +04:00
- tags
- /^.*-run-dev$/
build-and-package-ubuntu-18-04:
<<: *docker
# To run in sequence and save CPU usage, use stage: build_and_package_binaries
stage: test
variables:
target_os_family: "debian"
target_os: "ubuntu"
target_os_version: "18.04"
<<: *build_binary
2020-01-23 20:33:09 +04:00
only:
- dev
2020-05-15 19:57:22 +04:00
- tags
- /^.*-run-dev$/
build-and-package-ubuntu-19-10:
<<: *docker
# To run in sequence and save CPU usage, use stage: build_and_package_binaries
stage: test
variables:
target_os_family: "debian"
target_os: "ubuntu"
target_os_version: "19.10"
<<: *build_binary
2020-01-23 20:33:09 +04:00
only:
- dev
2020-05-15 19:57:22 +04:00
- tags
- /^.*-run-dev$/
2020-01-23 20:33:09 +04:00
# Pages are deployed from dev, be careful not to override 'next'
2019-06-06 17:45:45 +04:00
# in case something gets merged into 'dev' while releasing.
pages:
<<: *website_build
rules:
- if: '$CI_COMMIT_REF_NAME == "dev" && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
pages-attempt:
<<: *website_build
rules:
- if: '$CI_COMMIT_REF_NAME =~ /^.*-run-dev$/ && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
# WEBIDE jobs
run-webide-unit-tests:
2020-03-06 21:35:14 +04:00
stage: ide-unit-test
dependencies:
- build-and-package-debian-10
image: node:12-buster
script:
2020-03-06 21:35:14 +04:00
- mv $(realpath dist/package/debian-10/*.deb) ligo_deb10.deb
- apt-get update && apt-get -y install libev-dev perl pkg-config libgmp-dev libhidapi-dev m4 libcap-dev bubblewrap rsync
- dpkg -i ligo_deb10.deb
- cd tools/webide/packages/server
- npm ci
2020-03-06 21:35:14 +04:00
- export LIGO_CMD=/bin/ligo && npm run test
rules:
2020-05-15 19:57:22 +04:00
- if: '$TAG_JOB != "true"'
changes:
2020-03-06 21:35:14 +04:00
- tools/webide/**
when: always
build-publish-ide-image:
stage: build_and_deploy
<<: *docker
script:
- ls -F
- find dist/
- find dist/package/ -name '*ligo_*deb'
- mv $(realpath dist/package/debian-10/*.deb) tools/webide/ligo_deb10.deb
2020-03-04 02:41:16 +04:00
- cp -r src/test/examples tools/webide/packages/client/examples
- cd tools/webide
- echo "${CI_BUILD_TOKEN}" | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com
- >
docker build
-t "${WEBIDE_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}"
--build-arg GIT_TAG="${CI_COMMIT_SHA}"
--build-arg GIT_COMMIT="${CI_COMMIT_SHORT_SHA}"
2020-03-04 02:41:16 +04:00
--build-arg EXAMPLES_DIR_SRC=packages/client/examples
.
- docker push "${WEBIDE_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}"
rules:
2020-05-15 19:57:22 +04:00
- if: '$TAG_JOB != "true"'
changes:
2020-03-06 21:35:14 +04:00
- tools/webide/**
when: always
2020-05-15 19:57:22 +04:00
if: '$CI_COMMIT_REF_NAME == "dev"'
when: always
run-webide-e2e-tests:
stage: ide-e2e-test
<<: *docker
image: tmaier/docker-compose
script:
- cd tools/webide/packages/e2e
- export WEBIDE_IMAGE="${WEBIDE_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}"
- docker-compose run e2e
rules:
2020-05-15 19:57:22 +04:00
- if: '$TAG_JOB != "true"'
changes:
2020-03-06 21:35:14 +04:00
- tools/webide/**
when: always
2020-05-15 19:57:22 +04:00
if: '$CI_COMMIT_REF_NAME == "dev"'
when: always
deploy-handoff:
# Handoff deployment duties to private repo
stage: ide-deploy
variables:
IDE_DOCKER_IMAGE: "registry.gitlab.com/${CI_PROJECT_PATH}/ligo_webide"
LIGO_COMMIT_REF_NAME: "${CI_COMMIT_SHORT_SHA}"
trigger: ligolang/ligo-webide-deploy
rules:
- if: '$CI_COMMIT_REF_NAME == "dev"'
when: always
##### The following jobs will replace the ones above! #####
# TODO: add jobs for deploying the website, build a docker image and deploy it
.prepare_nix: &prepare_nix
image: nixos/nix:latest
before_script:
- nix-env -f channel:nixos-unstable -iA gnutar gitMinimal cachix
- export COMMIT_DATE="$(git show --no-patch --format=%ci)"
- echo "sandbox = true" > /etc/nix/nix.conf
# A temporary caching solution
- cachix use balsoft
# TODO Don't upload everything, use a post-build-hook to only upload what can't be substituted
- cachix push -w balsoft &
# The binary produced is useless by itself
binary-nix:
stage: nix
<<: *prepare_nix
only:
- merge_requests
- dev
- /^.*-run-dev$/
script:
- nix-build nix -A ligo-bin
doc-nix:
stage: nix
<<: *prepare_nix
only:
- merge_requests
- dev
- /^.*-run-dev$/
script:
- nix-build nix -A ligo-doc
- cp -Lr result/share/doc result-doc
artifacts:
paths:
- result-doc
test-nix:
stage: nix
<<: *prepare_nix
only:
- merge_requests
- dev
- /^.*-run-dev$/
script:
- nix-build nix -A ligo-coverage
- cp -Lr result/share/coverage result-coverage
artifacts:
paths:
- result-coverage
# FIXME For some reason, e2e tests can't build on CI.
.webide-e2e-nix:
stage: nix
<<: *prepare_nix
rules:
- changes:
- tools/webide/**
when: always
- if: '$CI_COMMIT_REF_NAME =~ /^(dev|.*-run-dev)$/ && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
script:
- nix-build nix -A ligo-editor.e2e
docker-nix:
stage: nix
only:
- merge_requests
- dev
- /^.*-run-dev$/
<<: *prepare_nix
script:
- nix-build nix -A ligo-docker
- cp -L result ligo.tar.gz
artifacts:
paths:
- ligo.tar.gz
docker-push-nix:
stage: nix-push
<<: *docker
dependencies:
- docker-nix
needs:
- docker-nix
rules:
# Only deploy docker when from the dev branch AND on the canonical ligolang/ligo repository
- if: '$CI_COMMIT_REF_NAME =~ /^(dev|.*-run-dev)$/ && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
script:
- echo ${LIGO_REGISTRY_PASSWORD} | docker login -u ${LIGO_REGISTRY_USER} --password-stdin
- docker load -i=./ligo.tar.gz
- export LIGO_REGISTRY_FULL_NAME=${LIGO_REGISTRY_IMAGE_BUILD:-ligolang/ligo}:$(if test "$CI_COMMIT_REF_NAME" = "dev"; then echo next-nix; else echo next-attempt-nix; fi)
- docker tag ligo "${LIGO_REGISTRY_FULL_NAME}"
- docker push "${LIGO_REGISTRY_FULL_NAME}"
webide-docker-nix:
stage: nix
only:
- merge_requests
- dev
- /^.*-run-dev$/
<<: *prepare_nix
script:
- nix-build nix -A ligo-editor-docker
- cp -L result webide.tar.gz
artifacts:
paths:
- webide.tar.gz
webide-push-nix:
stage: nix-push
<<: *docker
dependencies:
- webide-docker-nix
needs:
- webide-docker-nix
rules:
# Only deploy docker when from the dev branch AND on the canonical ligolang/ligo repository
- if: '$CI_COMMIT_REF_NAME =~ /^(dev|.*-run-dev)$/ && $CI_PROJECT_PATH == "ligolang/ligo"'
when: always
script:
- echo "${CI_BUILD_TOKEN}" | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com
- docker load -i=./webide.tar.gz
- docker tag ligo-editor "${WEBIDE_IMAGE_NAME}:nix${CI_COMMIT_SHORT_SHA}"
- docker push "${WEBIDE_IMAGE_NAME}:nix${CI_COMMIT_SHORT_SHA}"
static-binary-nix:
stage: nix
<<: *prepare_nix
only:
- dev
- /^.*-run-dev$/
script:
- nix-build nix -A ligo-static
# Check that the binary is truly static and has 0 dependencies
- test $(nix-store -q --references ./result | wc -l) -eq 0
- cp -Lr result/bin result-static
artifacts:
paths:
- result-static
website-nix:
stage: nix
<<: *prepare_nix
only:
- dev
- /^.*-run-dev$/
script:
- nix-build nix -A ligo-website
- cp -Lr result/ result-website
artifacts:
paths:
- result-website