diff --git a/.gitlab/.gitlab-ci.yml b/.gitlab/.gitlab-ci.yml new file mode 100644 index 00000000..1a38339e --- /dev/null +++ b/.gitlab/.gitlab-ci.yml @@ -0,0 +1,87 @@ +# +# Gitlab CI Configuration +# +# Copyright (C) 2019-2025 Udo Steinberg, BlueRock Security, Inc. +# +# This file is part of the NOVA microhypervisor. +# +# NOVA is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# NOVA 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 version 2 for more details. +# + +variables: + GIT_DEPTH: 5 + +default: + image: registry.gitlab.com/bedrocksystems/docker-image:latest + +workflow: + rules: + - if: '$CI_MERGE_REQUEST_DRAFT == "true"' # skip draft MRs + when: never + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # push to default branch + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG' # push to any tag + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # merge request + - if: '$CI_PIPELINE_SOURCE == "pipeline"' # multi-project pipeline + - if: '$CI_PIPELINE_SOURCE == "schedule"' # scheduled run + - if: '$CI_PIPELINE_SOURCE == "web"' # pipeline run from UI + +stages: + - build + - release + +.build: + stage: build + variables: + IDIR: 'NOVA' + HOST: 'x86_64' + HGCC: '/opt/${HOST}-linux/bin/${HOST}-linux-g++' + PRFX: '/opt/${ARCH}-linux/bin/${ARCH}-linux-' + script: + - ${PRFX}gcc --version + - mkdir ${IDIR} + - time make -s -j ${NJOBS} ARCH=${ARCH} INS_DIR=${IDIR} PREFIX_${ARCH}=${PRFX} HST_CC=${HGCC} install + artifacts: + paths: + - ${IDIR}/ + +build-aarch64: + extends: .build + variables: + ARCH: 'aarch64' + +build-x86_64: + extends: .build + variables: + ARCH: 'x86_64' + +# Work around https://gitlab.com/gitlab-org/gitlab-runner/-/issues/6400 +release-version: + stage: build + rules: + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG =~ /^release-/' # push to release tag + script: + - echo NOVA_VERSION=${CI_COMMIT_TAG//release-/} > version.env + artifacts: + reports: + dotenv: version.env + +release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG =~ /^release-/' # push to release tag + script: + - echo Releasing ${NOVA_VERSION} + release: + tag_name: $CI_COMMIT_TAG + name: 'Release ${NOVA_VERSION}' + description: 'NOVA Microhypervisor Release ${NOVA_VERSION}' + dependencies: + - release-version diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS new file mode 100644 index 00000000..9bc7dc05 --- /dev/null +++ b/.gitlab/CODEOWNERS @@ -0,0 +1,4 @@ +# Rules defined later take precedence over rules defined earlier + +# Default +* udo@hypervisor.org