Skip to content
Snippets Groups Projects
.gitlab-ci.yml 3.87 KiB
Newer Older
# Taken an adapted from gitlab's example repos:
# https://gitlab.com/gitlab-examples/julia

# An example .gitlab-ci.yml file to test (and optionally report the
# coverage results of) your [Julia][1] packages. Please refer to the
# [documentation][2] for more information about package development in
# Julia.
#
# Here, it is assumed that your Julia package is named
# `MyPackage`. Change it to whatever name you have given to your
# package.
#
# [1]: http://julialang.org/
# [2]: https://docs.julialang.org/en/v1/manual/documentation/index.html

florian's avatar
florian committed
variables:
  JULIALIB_REGISTRY_IMAGE: $CI_REGISTRY/caosdb/src/caosdb-julialib/testenv:$CI_COMMIT_REF_NAME

image: $JULIALIB_REGISTRY_IMAGE
florian's avatar
florian committed

stages:
  - code-style
florian's avatar
florian committed
  - test
  - deploy

# Only check style for Julia 1.6 since support for 1.0 may be dropped anyway
code-style:
florian's avatar
florian committed
  stage: code-style
  image: julia:1.6
  tags: [ docker ]
  script:
    # install git
florian's avatar
florian committed
    - apt-get update && apt-get install -y git
    # install JuliaFormatter
    - julia  -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter"))'
    # try and format the files
    - julia  -e 'using JuliaFormatter; format(".", verbose=true)'
    # check the git diff for possible changes due to the formatting
    - julia -e '
florian's avatar
florian committed
      out = Cmd(`git diff --name-only`) |> read |> String;
      if out == ""
florian's avatar
florian committed
          exit(0);
      else
florian's avatar
florian committed
          @error "Some files have not been formatted !!!";
          write(stdout, out);
          exit(1);
      end'
florian's avatar
florian committed
  allow_failure: true
# Install libcaosdb in docker image
setup:
  tags: [ cached-dind ]
  image: docker:20.10
  stage: setup
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - docker pull $JULIALIB_REGISTRY_IMAGE || true
    - docker build
      --file .docker/Dockerfile
      --pull
      --tag $JULIALIB_REGISTRY_IMAGE .
    - docker push $JULIALIB_REGISTRY_IMAGE
florian's avatar
florian committed
  stage: test
  # Use `docker` runners
  tags: [ docker ]
  # Uncomment below if you would like to run the tests on specific
  # references only, such as the branches `master`, `development`,
  # etc.
  # only:
  #   - master
  #   - development
  script:
    - .docker/install_cpplib.sh
    - export LD_LIBRARY_PATH=/root/.local/lib:$LD_LIBRARY_PATH
    # Let's run the tests. Substitute `coverage = false` below, if you
    # do not want coverage results.
    - julia -e 'using Pkg; Pkg.add(path=pwd());
      Pkg.build("CaosDB");
      Pkg.test("CaosDB"; coverage = true)'
      # Comment out below if you do not want coverage results.
    - julia -e 'using Pkg; Pkg.add("Coverage");
      import CaosDB;
      cd(joinpath(dirname(pathof(CaosDB)), ".."));
      using Coverage; cl, tl = get_summary(process_folder());
      println("(", cl/tl*100, "%) covered")'


# REMARK: Do not forget to enable the coverage feature for your
# project, if you are using code coverage reporting above. This can be
# done by
#
# - Navigating to the `CI/CD Pipelines` settings of your project,
# - Copying and pasting the default `Simplecov` regex example
#   provided, i.e., `\(\d+.\d+\%\) covered` in the `test coverage
#   parsing` textfield.

# Example documentation deployment
pages:
    - julia -e 'using Pkg; Pkg.add(path=pwd()); Pkg.build("CaosDB");' # rebuild Julia (can be put somewhere else I'm sure)
    - julia -e 'using Pkg; import CaosDB; Pkg.add("Documenter")' # install Documenter
    - julia --color=yes docs/make.jl # make documentation
    - mv docs/build public # move to the directory picked up by Gitlab pages
  artifacts:
    paths:
      - public
  only:
    - main

# WARNING: This template is using the `julia` images from [Docker
# Hub][3]. One can use custom Julia images and/or the official ones
# found in the same place. However, care must be taken to correctly
# locate the binary file (`/opt/julia/bin/julia` above), which is
# usually given on the image's description page.
#
# [3]: https://hub.docker.com/_/julia/