From 78349a40a1ec0203b7f0d543cf3d25395fbd961b Mon Sep 17 00:00:00 2001 From: Caspar Jungbacker Date: Fri, 23 Feb 2024 12:10:40 +0100 Subject: [PATCH] [Feature][CI] Add draft book workflow --- .gitlab-ci.yml | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c27ed4e..ddacb01 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,3 @@ -image: continuumio/miniconda:latest - stages: - test - build @@ -9,8 +7,8 @@ variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" REGISTRY_HOST: localhost:5000 TAG_LATEST: $REGISTRY_HOST/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME:latest - TAG_COMMIT: $REGISTRY_HOST/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA - + TAG_DRAFT: $REGISTRY_HOST/$CI_PROJECT_NAME-draft/$CI_COMMIT_REF_NAME:latest + cache: paths: - .cache/pip @@ -18,31 +16,33 @@ cache: # This job tests if the book compiles gracefully after a new addition test-build: stage: test + image: python:3.11-bullseye rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" - before_script: - - python -V - - conda env create -f environment.yml - - conda init bash - - source ~/.bashrc - - conda activate jupyter-book-env script: + - pip install -r requirements.txt - jupyter-book clean book/ - jupyter-book build book/ +# This job builds the Docker container build-book: stage: build image: docker rules: - if: $CI_COMMIT_BRANCH == "publish" && $CI_PIPELINE_SOURCE == "push" + variables: + TAG: $TAG_LATEST + - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" + variables: + TAG: $TAG_DRAFT before_script: - docker info script: - - docker build -t $TAG_LATEST . - - docker push $TAG_LATEST - - docker image prune -f + - if [ "$TAG" = "$TAG_LATEST" ]; then sed --in-place=".bak" '/# START DRAFT/,/# END DRAFT/{//!d}' book/_config.yml; fi + - docker build -t $TAG . + - docker push $TAG +# This job takes down the existing container and starts the new one deploy-book: stage: deploy image: docker @@ -51,9 +51,25 @@ deploy-book: before_script: - docker info - docker stop $CI_PROJECT_NAME || exit_code=$? - - if [ $exit_code -ne 0 ]; then echo "Container $CI_PROJECT_NAME not found, cannot stop"; else docker rm $CI_PROJECT_NAME; fi + - if [ $exit_code -ne 0 ]; then echo "Container not found, cannot stop"; else docker rm $CI_PROJECT_NAME; fi script: - - docker run -d --restart always -p 8000:8000 --name $CI_PROJECT_NAME $TAG_LATEST + - docker run -d --restart always -p 8000:8000 --name $CI_PROJECT_NAME $TAG_LATEST # Make sure to use a different port for each book! environment: name: production - url: https://interactivetextbooks.citg.tudelft.nl/$CI_PROJECT_NAME \ No newline at end of file + url: https://interactivetextbooks.citg.tudelft.nl/jupyter-book-manual + +# Deploy the draft version of the book +deploy-draft: + stage: deploy + image: docker + rules: + - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" + before_script: + - docker info + - docker stop $CI_PROJECT_NAME-draft || exit_code=$? + - if [ $exit_code -ne 0 ]; then echo "Container not found, cannot stop"; else docker rm $CI_PROJECT_NAME-draft; fi + script: + - docker run -d --restart always -p 8018:8000 --name $CI_PROJECT_NAME-draft $TAG_DRAFT + environment: + name: draft + url: https://interactivetextbooks.citg.tudelft.nl/jupyter-book-manual-draft \ No newline at end of file