Continue adaptions of emba files

* test/infra/default-gitlab-ci.yml: New file, derived from
gitlab-ci.yml.

* test/infra/gitlab-ci.yml (top, test-jobs-pipeline):
Include default-gitlab-ci.yml.
(stages): Remove normal.

* test/infra/test-jobs-generator.sh: Generate also stages entry.
This commit is contained in:
Michael Albinus 2021-11-20 10:07:48 +01:00
parent 88458f7354
commit 9f06977782
4 changed files with 230 additions and 192 deletions

View file

@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI
# GNU Emacs support for the GitLab protocol for CI.
# The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for

View file

@ -0,0 +1,216 @@
# Copyright (C) 2017-2021 Free Software Foundation, Inc.
#
# This file is part of GNU Emacs.
#
# GNU Emacs is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI.
# The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for
# evaluation purposes, thus possibly temporary.
# Maintainer: Ted Zlatanov <tzz@lifelogs.com>
# URL: https://emba.gnu.org/emacs/emacs
# Never run merge request pipelines, they usually duplicate push pipelines
# see https://docs.gitlab.com/ee/ci/yaml/README.html#common-if-clauses-for-rules
# Rules: always run tags and branches named master*, emacs*, feature*, fix*
# Test that it triggers by pushing a tag: `git tag mytag; git push origin mytag`
# Test that it triggers by pushing to: feature/emba, feature1, master, master-2, fix/emba, emacs-299, fix-2
# Test that it doesn't trigger by pushing to: scratch-2, scratch/emba, oldbranch, dev
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: '$CI_COMMIT_TAG'
when: always
- if: '$CI_COMMIT_BRANCH !~ /^(master|emacs|feature|fix)/'
when: never
- when: always
variables:
GIT_STRATEGY: fetch
EMACS_EMBA_CI: 1
# Three hours, see below.
EMACS_TEST_TIMEOUT: 10800
EMACS_TEST_VERBOSE: 1
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
# DOCKER_HOST: tcp://docker:2376
# DOCKER_TLS_CERTDIR: "/certs"
# Put the configuration for each run in a separate directory to
# avoid conflicts.
DOCKER_CONFIG: "/.docker-config-${CI_COMMIT_SHA}"
DOCKER_BUILDKIT: 1
# We don't use ${CI_COMMIT_SHA} to be able to do one bootstrap
# across multiple builds.
BUILD_TAG: ${CI_COMMIT_REF_SLUG}
# Disable if you don't need it, it can be a security risk.
CI_DEBUG_TRACE: "true"
default:
image: docker:19.03.12
timeout: 3 hours
before_script:
- docker info
- echo "docker registry is ${CI_REGISTRY}"
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
.job-template:
variables:
test_name: ${CI_JOB_NAME}-${CI_COMMIT_SHORT_SHA}
rules:
- changes:
- "**Makefile.in"
- .gitlab-ci.yml
- aclocal.m4
- autogen.sh
- configure.ac
- lib/*.{h,c}
- lisp/**.el
- src/*.{h,c}
- test/infra/*
- test/lib-src/*.el
- test/lisp/**.el
- test/misc/*.el
- test/src/*.el
- changes:
# gfilemonitor, kqueue
- src/gfilenotify.c
- src/kqueue.c
# MS Windows
- "**w32*"
# GNUstep
- lisp/term/ns-win.el
- src/ns*.{h,m}
- src/macfont.{h,m}
when: never
# These will be cached across builds.
cache:
key: ${CI_COMMIT_SHA}
paths: []
policy: pull-push
# These will be saved for followup builds.
artifacts:
expire_in: 24 hrs
paths: []
# Using the variables for each job.
script:
- docker pull ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG}
# TODO: with make -j4 several of the tests were failing, for
# example shadowfile-tests, but passed without it.
- 'export PWD=$(pwd)'
- 'docker run -i -e EMACS_EMBA_CI=${EMACS_EMBA_CI} -e EMACS_TEST_TIMEOUT=${EMACS_TEST_TIMEOUT} -e EMACS_TEST_VERBOSE=${EMACS_TEST_VERBOSE} --volumes-from $(docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=${CI_JOB_ID}"):ro --name ${test_name} ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} /bin/bash -c "git fetch ${PWD} HEAD && echo checking out these updated files && git diff --name-only FETCH_HEAD && ( git diff --name-only FETCH_HEAD | xargs git checkout -f FETCH_HEAD ) && make -j4 && make ${make_params}"'
after_script:
# - docker ps -a
# - printenv
# - test -n "$(docker ps -aq -f name=${test_name})" && ( docker export ${test_name} | tar -tvf - )
- test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/test ${test_name}
- test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name}
# - ls -alR ${test_name}
.build-template:
needs: []
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
when: always
- changes:
- "**Makefile.in"
- .gitlab-ci.yml
- aclocal.m4
- autogen.sh
- configure.ac
- lib/*.{h,c}
- lisp/emacs-lisp/*.el
- src/*.{h,c}
- test/infra/*
- changes:
# gfilemonitor, kqueue
- src/gfilenotify.c
- src/kqueue.c
# MS Windows
- "**w32*"
# GNUstep
- lisp/term/ns-win.el
- src/ns*.{h,m}
- src/macfont.{h,m}
when: never
script:
- docker build --pull --target ${target} -t ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} -f test/infra/Dockerfile.emba .
- docker push ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG}
.test-template:
# Do not run fast and normal test jobs when scheduled.
rules:
- if: '$CI_JOB_STAGE =~ "fast|normal" && $CI_PIPELINE_SOURCE == "schedule"'
when: never
- when: always
artifacts:
name: ${test_name}
public: true
expire_in: 1 week
paths:
- ${test_name}/**/*.log
- ${test_name}/**/core
- ${test_name}/core
when: always
.gnustep-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- configure.ac
- src/ns*.{h,m}
- src/macfont.{h,m}
- lisp/term/ns-win.el
- nextstep/**
- test/infra/*
.filenotify-gio-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- lisp/autorevert.el
- lisp/filenotify.el
- lisp/net/tramp-sh.el
- src/gfilenotify.c
- test/infra/*
- test/lisp/autorevert-tests.el
- test/lisp/filenotify-tests.el
.native-comp-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- lisp/emacs-lisp/comp.el
- lisp/emacs-lisp/comp-cstr.el
- src/comp.{h,m}
- test/infra/*
- test/src/comp-resources/*.el
- test/src/comp-tests.el
timeout: 8 hours
# Local Variables:
# add-log-current-defun-header-regexp: "^\\([-_.[:alnum:]]+\\)[ \t]*:"
# End:

View file

@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
# GNU Emacs support for the GitLab protocol for CI
# GNU Emacs support for the GitLab protocol for CI.
# The presence of this file does not imply any FSF/GNU endorsement of
# any particular service that uses that protocol. Also, it is intended for
@ -24,199 +24,15 @@
# Maintainer: Ted Zlatanov <tzz@lifelogs.com>
# URL: https://emba.gnu.org/emacs/emacs
# Never run merge request pipelines, they usually duplicate push pipelines
# see https://docs.gitlab.com/ee/ci/yaml/README.html#common-if-clauses-for-rules
# Rules: always run tags and branches named master*, emacs*, feature*, fix*
# Test that it triggers by pushing a tag: `git tag mytag; git push origin mytag`
# Test that it triggers by pushing to: feature/emba, feature1, master, master-2, fix/emba, emacs-299, fix-2
# Test that it doesn't trigger by pushing to: scratch-2, scratch/emba, oldbranch, dev
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: '$CI_COMMIT_TAG'
when: always
- if: '$CI_COMMIT_BRANCH !~ /^(master|emacs|feature|fix)/'
when: never
- when: always
variables:
GIT_STRATEGY: fetch
EMACS_EMBA_CI: 1
# Three hours, see below.
EMACS_TEST_TIMEOUT: 10800
EMACS_TEST_VERBOSE: 1
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
# DOCKER_HOST: tcp://docker:2376
# DOCKER_TLS_CERTDIR: "/certs"
# Put the configuration for each run in a separate directory to
# avoid conflicts.
DOCKER_CONFIG: "/.docker-config-${CI_COMMIT_SHA}"
DOCKER_BUILDKIT: 1
# We don't use ${CI_COMMIT_SHA} to be able to do one bootstrap
# across multiple builds.
BUILD_TAG: ${CI_COMMIT_REF_SLUG}
# Disable if you don't need it, it can be a security risk.
CI_DEBUG_TRACE: "true"
default:
image: docker:19.03.12
timeout: 3 hours
before_script:
- docker info
- echo "docker registry is ${CI_REGISTRY}"
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
.job-template:
variables:
test_name: ${CI_JOB_NAME}-${CI_COMMIT_SHORT_SHA}
rules:
- changes:
- "**Makefile.in"
- .gitlab-ci.yml
- aclocal.m4
- autogen.sh
- configure.ac
- lib/*.{h,c}
- lisp/**.el
- src/*.{h,c}
- test/infra/*
- test/lib-src/*.el
- test/lisp/**.el
- test/misc/*.el
- test/src/*.el
- changes:
# gfilemonitor, kqueue
- src/gfilenotify.c
- src/kqueue.c
# MS Windows
- "**w32*"
# GNUstep
- lisp/term/ns-win.el
- src/ns*.{h,m}
- src/macfont.{h,m}
when: never
# These will be cached across builds.
cache:
key: ${CI_COMMIT_SHA}
paths: []
policy: pull-push
# These will be saved for followup builds.
artifacts:
expire_in: 24 hrs
paths: []
# Using the variables for each job.
script:
- docker pull ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG}
# TODO: with make -j4 several of the tests were failing, for
# example shadowfile-tests, but passed without it.
- 'export PWD=$(pwd)'
- 'docker run -i -e EMACS_EMBA_CI=${EMACS_EMBA_CI} -e EMACS_TEST_TIMEOUT=${EMACS_TEST_TIMEOUT} -e EMACS_TEST_VERBOSE=${EMACS_TEST_VERBOSE} --volumes-from $(docker ps -q -f "label=com.gitlab.gitlab-runner.job.id=${CI_JOB_ID}"):ro --name ${test_name} ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} /bin/bash -c "git fetch ${PWD} HEAD && echo checking out these updated files && git diff --name-only FETCH_HEAD && ( git diff --name-only FETCH_HEAD | xargs git checkout -f FETCH_HEAD ) && make -j4 && make ${make_params}"'
after_script:
# - docker ps -a
# - printenv
# - test -n "$(docker ps -aq -f name=${test_name})" && ( docker export ${test_name} | tar -tvf - )
- test -n "$(docker ps -aq -f name=${test_name})" && docker cp ${test_name}:checkout/test ${test_name}
- test -n "$(docker ps -aq -f name=${test_name})" && docker rm ${test_name}
# - ls -alR ${test_name}
.build-template:
needs: []
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
when: always
- changes:
- "**Makefile.in"
- .gitlab-ci.yml
- aclocal.m4
- autogen.sh
- configure.ac
- lib/*.{h,c}
- lisp/emacs-lisp/*.el
- src/*.{h,c}
- test/infra/*
- changes:
# gfilemonitor, kqueue
- src/gfilenotify.c
- src/kqueue.c
# MS Windows
- "**w32*"
# GNUstep
- lisp/term/ns-win.el
- src/ns*.{h,m}
- src/macfont.{h,m}
when: never
script:
- docker build --pull --target ${target} -t ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG} -f test/infra/Dockerfile.emba .
- docker push ${CI_REGISTRY_IMAGE}:${target}-${BUILD_TAG}
.test-template:
# Do not run fast and normal test jobs when scheduled.
rules:
- if: '$CI_JOB_STAGE =~ "fast|normal" && $CI_PIPELINE_SOURCE == "schedule"'
when: never
- when: always
artifacts:
name: ${test_name}
public: true
expire_in: 1 week
paths:
- ${test_name}/**/*.log
- ${test_name}/**/core
- ${test_name}/core
when: always
.gnustep-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- configure.ac
- src/ns*.{h,m}
- src/macfont.{h,m}
- lisp/term/ns-win.el
- nextstep/**
- test/infra/*
.filenotify-gio-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- lisp/autorevert.el
- lisp/filenotify.el
- lisp/net/tramp-sh.el
- src/gfilenotify.c
- test/infra/*
- test/lisp/autorevert-tests.el
- test/lisp/filenotify-tests.el
.native-comp-template:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
- if: '$CI_PIPELINE_SOURCE == "schedule"'
changes:
- "**Makefile.in"
- .gitlab-ci.yml
- lisp/emacs-lisp/comp.el
- lisp/emacs-lisp/comp-cstr.el
- src/comp.{h,m}
- test/infra/*
- test/src/comp-resources/*.el
- test/src/comp-tests.el
timeout: 8 hours
# Include defaults.
include: '/test/infra/default-gitlab-ci.yml'
stages:
- build-images
- generator
- trigger
# - fast
- normal
# - normal
- platform-images
- platforms
- native-comp-images
@ -239,7 +55,6 @@ build-image-inotify:
test-jobs-generator:
stage: generator
script:
- pwd
- test/infra/test-jobs-generator.sh > test-jobs.yml
artifacts:
paths:
@ -249,6 +64,7 @@ test-jobs-pipeline:
stage: trigger
trigger:
include:
- local: '/test/infra/default-gitlab-ci.yml'
- artifact: test-jobs.yml
job: test-jobs-generator
strategy: depend

View file

@ -20,7 +20,7 @@
# GNU Emacs support for the gitlab-ci.yml template generation.
# The presence of this file does not imply any FSF/GNU endorsement of
# GitLab or any other particular tool. Also, it is intended for
# any particular service that uses that protocol. Also, it is intended for
# evaluation purposes, thus possibly temporary.
# Maintainer: Michael Albinus <michael.albinus@gmx.de>
@ -52,10 +52,16 @@ for subdir in $SUBDIRS; do
;;
esac
cat <<EOF
stages:
- normal
EOF
cat <<EOF
test${target##check}-inotify:
stage: normal
# extends: [.job-template, .test-template]
extends: [.job-template, .test-template]
rules:
- changes: $changes
variables: