diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d027fafcd2844e4e0266f22494c835c717f02a05..8e1a4413d0794315de641c8865824d507f892e35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,15 +38,19 @@ workflow: variables: PIPELINE_TYPE: octez_release_tag_test when: always + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG =~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ + variables: + PIPELINE_TYPE: etherlink_release_tag + when: always - if: $CI_PROJECT_NAMESPACE == "tezos" && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /^octez-v\d+\.\d+(?:\-rc\d+)?$/ && $CI_COMMIT_TAG - !~ /^octez-v\d+\.\d+\-beta\d*$/ + !~ /^octez-v\d+\.\d+\-beta\d*$/ && $CI_COMMIT_TAG !~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ variables: PIPELINE_TYPE: non_release_tag when: always - if: $CI_PROJECT_NAMESPACE != "tezos" && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /^octez-v\d+\.\d+(?:\-rc\d+)?$/ && $CI_COMMIT_TAG - !~ /^octez-v\d+\.\d+\-beta\d*$/ + !~ /^octez-v\d+\.\d+\-beta\d*$/ && $CI_COMMIT_TAG !~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ variables: PIPELINE_TYPE: non_release_tag_test when: always @@ -130,17 +134,21 @@ include: - if: $CI_PROJECT_NAMESPACE != "tezos" && $CI_PIPELINE_SOURCE == "push" && ($CI_COMMIT_TAG =~ /^octez-v\d+\.\d+(?:\-rc\d+)?$/ || $CI_COMMIT_TAG =~ /^octez-v\d+\.\d+\-beta\d*$/) when: always +- local: .gitlab/ci/pipelines/etherlink_release_tag.yml + rules: + - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG =~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ + when: always - local: .gitlab/ci/pipelines/non_release_tag.yml rules: - if: $CI_PROJECT_NAMESPACE == "tezos" && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /^octez-v\d+\.\d+(?:\-rc\d+)?$/ && $CI_COMMIT_TAG - !~ /^octez-v\d+\.\d+\-beta\d*$/ + !~ /^octez-v\d+\.\d+\-beta\d*$/ && $CI_COMMIT_TAG !~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ when: always - local: .gitlab/ci/pipelines/non_release_tag_test.yml rules: - if: $CI_PROJECT_NAMESPACE != "tezos" && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /^octez-v\d+\.\d+(?:\-rc\d+)?$/ && $CI_COMMIT_TAG - !~ /^octez-v\d+\.\d+\-beta\d*$/ + !~ /^octez-v\d+\.\d+\-beta\d*$/ && $CI_COMMIT_TAG !~ /^etherlink-v\d+\.\d+(?:\-rc\d+)?$/ when: always - local: .gitlab/ci/pipelines/schedule_extended_test.yml rules: diff --git a/.gitlab/ci/pipelines/etherlink_release_tag.yml b/.gitlab/ci/pipelines/etherlink_release_tag.yml new file mode 100644 index 0000000000000000000000000000000000000000..d2803c2a1c7b6a64154eafe56dc64b487a5a07b3 --- /dev/null +++ b/.gitlab/ci/pipelines/etherlink_release_tag.yml @@ -0,0 +1,13 @@ +# This file was automatically generated, do not edit. +# Edit file ci/bin/main.ml instead. + +gitlab:publish: + image: ${GCP_REGISTRY}/tezos/docker-images/ci-release:v1.4.0 + stage: publish_package_gitlab + tags: + - gcp + needs: [] + dependencies: [] + interruptible: false + script: + - ./scripts/ci/create_gitlab_etherlink_release.sh diff --git a/ci/bin/main.ml b/ci/bin/main.ml index 172315d05b7774a0be589a247366c49de0f8544b..03f85a4de398999892ae0b3830c21940091c7714 100644 --- a/ci/bin/main.ml +++ b/ci/bin/main.ml @@ -75,10 +75,12 @@ let job_dummy : job = pipeline is defined. At the moment, all these pipelines are defined manually in .yml, but will eventually be generated. *) let () = - (* Matches release tags, e.g. [v1.2.3] or [v1.2.3-rc4]. *) + (* Matches Octez release tags, e.g. [octez-v1.2.3] or [octez-v1.2.3-rc4]. *) let octez_release_tag_re = "/^octez-v\\d+\\.\\d+(?:\\-rc\\d+)?$/" in - (* Matches beta release tags, e.g. [v1.2.3-beta5]. *) + (* Matches Octez beta release tags, e.g. [octez-v1.2.3-beta5]. *) let octez_beta_release_tag_re = "/^octez-v\\d+\\.\\d+\\-beta\\d*$/" in + (* Matches Etherlink release tags, e.g. [etherlink-v1.2.3] or [etherlink-v1.2.3-rc4]. *) + let etherlink_release_tag_re = "/^etherlink-v\\d+\\.\\d+(?:\\-rc\\d+)?$/" in let open Rules in let open Pipeline in (* Matches either Octez release tags or Octez beta release tags, @@ -89,7 +91,10 @@ let () = || has_tag_match octez_beta_release_tag_re) in let has_non_release_tag = - If.(Predefined_vars.ci_commit_tag != null && not has_any_octez_release_tag) + If.( + Predefined_vars.ci_commit_tag != null + && (not has_any_octez_release_tag) + && not (has_tag_match etherlink_release_tag_re)) in register "before_merging" @@ -110,23 +115,29 @@ let () = register "octez_release_tag" If.(on_tezos_namespace && push && has_tag_match octez_release_tag_re) - ~jobs:(Release_tag.jobs Release_tag) ; + ~jobs:(Release_tag.octez_jobs Release_tag) ; register "octez_beta_release_tag" If.(on_tezos_namespace && push && has_tag_match octez_beta_release_tag_re) - ~jobs:(Release_tag.jobs Beta_release_tag) ; + ~jobs:(Release_tag.octez_jobs Beta_release_tag) ; register "octez_release_tag_test" If.(not_on_tezos_namespace && push && has_any_octez_release_tag) - ~jobs:(Release_tag.jobs ~test:true Release_tag) ; + ~jobs:(Release_tag.octez_jobs ~test:true Release_tag) ; + (* To test this type of release, push a tag to a fork of [tezos/tezos] + e.g. [nomadic-labs/tezos] project. *) + register + "etherlink_release_tag" + If.(push && has_tag_match etherlink_release_tag_re) + ~jobs:(Release_tag.etherlink_jobs ()) ; register "non_release_tag" If.(on_tezos_namespace && push && has_non_release_tag) - ~jobs:(Release_tag.jobs Non_release_tag) ; + ~jobs:(Release_tag.octez_jobs Non_release_tag) ; register "non_release_tag_test" If.(not_on_tezos_namespace && push && has_non_release_tag) - ~jobs:(Release_tag.jobs ~test:true Non_release_tag) ; + ~jobs:(Release_tag.octez_jobs ~test:true Non_release_tag) ; register "schedule_extended_test" schedule_extended_tests diff --git a/ci/bin/release_tag.ml b/ci/bin/release_tag.ml index 8f44fc2745208e445b8e5986a0017c85d83b9122..4a2c44c589cab1cb4f3a2217dc8ca67b81e4fa14 100644 --- a/ci/bin/release_tag.ml +++ b/ci/bin/release_tag.ml @@ -40,12 +40,12 @@ type release_tag_pipeline_type = | Beta_release_tag | Non_release_tag -(** Create a release tag pipeline of type {!release_tag_pipeline_type}. +(** Create an Octez release tag pipeline of type {!release_tag_pipeline_type}. If [test] is true (default is [false]), then the Docker images are built of the [Test] type and are published to the GitLab registry instead of Docker hub. *) -let jobs ?(test = false) release_tag_pipeline_type = +let octez_jobs ?(test = false) release_tag_pipeline_type = let job_docker_amd64 = job_docker_build ~__POS__ ~arch:Amd64 (if test then Test else Release) in @@ -127,3 +127,17 @@ let jobs ?(test = false) release_tag_pipeline_type = match (test, release_tag_pipeline_type) with | false, Release_tag -> [job_opam_release] | _ -> [] + +(** Create an etherlink release tag pipeline of type {!release_tag_pipeline_type}. *) +let etherlink_jobs () = + let job_gitlab_release : Tezos_ci.tezos_job = + job + ~__POS__ + ~image:Images.ci_release + ~stage:Stages.publish_package_gitlab + ~interruptible:false + ~dependencies:(Dependent []) + ~name:"gitlab:publish" + ["./scripts/ci/create_gitlab_etherlink_release.sh"] + in + [job_gitlab_release] diff --git a/scripts/ci/create_gitlab_etherlink_release.sh b/scripts/ci/create_gitlab_etherlink_release.sh new file mode 100755 index 0000000000000000000000000000000000000000..9453d92f5c85102fb92d15b51fed4fc04a002e9b --- /dev/null +++ b/scripts/ci/create_gitlab_etherlink_release.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu + +### Create a GitLab Etherlink release with links to all the related resources + +# shellcheck source=./scripts/ci/octez-release.sh +. ./scripts/ci/etherlink-release.sh + +release-cli create \ + --name="${gitlab_release_name}" \ + --tag-name="${CI_COMMIT_TAG}" diff --git a/scripts/ci/etherlink-release.sh b/scripts/ci/etherlink-release.sh new file mode 100644 index 0000000000000000000000000000000000000000..1de4490b5e00b3ad11bdb05598a12105ea6ed7aa --- /dev/null +++ b/scripts/ci/etherlink-release.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +### Compute GitLab release names from git tags + +# Git tags for Etherlink releases are on the form `etherlink-vX.Y`, `etherlink-vX.Y-rcZ` or `etherlink-vX.Y-betaZ`. + +# X +gitlab_release_major_version=$(echo "${CI_COMMIT_TAG}" | sed -nE 's/^etherlink-v([0-9]+)\.([0-9]+)(-rc[0-9]+)?$/\1/p') +# Y +gitlab_release_minor_version=$(echo "${CI_COMMIT_TAG}" | sed -nE 's/^etherlink-v([0-9]+)\.([0-9]+)(-rc[0-9]+)?$/\2/p') +# Z +gitlab_release_rc_version=$(echo "${CI_COMMIT_TAG}" | sed -nE 's/^etherlink-v([0-9]+)\.([0-9]+)(-rc)?([0-9]+)?$/\4/p') + +# Is this a release candidate? +if [ -n "${gitlab_release_rc_version}" ]; then + # Yes, release name: Etherlink Release Candidate X.Y~rcZ + # shellcheck disable=SC2034 + gitlab_release_name="Etherlink Release Candidate ${gitlab_release_major_version}.${gitlab_release_minor_version}~rc${gitlab_release_rc_version}" +else + # No, release name: Etherlink Release X.Y + # shellcheck disable=SC2034 + gitlab_release_name="Etherlink Release ${gitlab_release_major_version}.${gitlab_release_minor_version}" +fi