stages: - build - image - deploy # Define some conditions to run the whole pipeline workflow: rules: - if: $CI_MERGE_REQUEST_ID # Run on MRs - if: $CI_COMMIT_TAG # Run on tags - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run on master # Customize the build rules and the artifacts here. You probably want to adjust # "opam.locked" # We define a cache in order to keep the switch with the dependencies installed, # unless the opam.locked file has changed. build: stage: build image: debian:buster before_script: - apt update - apt install -yqq --no-install-recommends ca-certificates curl opam git pkg-config m4 - opam init --disable-sandboxing --bare -ya - opam switch create ocaml-base-compiler.4.12.0 - eval "$(opam env)" - opam pin add . -y --no-action - opam install opam-depext - opam depext -y osh - opam install ./*.opam -y --deps-only --with-test --with-doc script: - opam exec -- dune build --profile release @all - opam exec -- dune runtest - mv _build/default/src/osh.exe . artifacts: paths: - osh.exe include: - project: 'OCamlPro/gitlab-deployments' ref: master file: deploy.yml # Builds and pushes the Docker image using Kaniko make-image: extends: .make-image # defined in deploy.yml variables: DOCKERFILE: /kaniko/Dockerfile # don't need a local 'git clone' GIT_STRATEGY: "none" before_script: # Write the Dockerfile for the image we want to generate # Here we inherit from nginx and just add the contents of our web-app - | echo "\ FROM bitnami/nginx:latest ADD osh.exe /opt/bitnami/nginx/sbin/nginx USER 0 RUN apt update && apt install -yqq libev4 curl libcurl4 libcurl4-gnutls-dev USER 1001 " > $DOCKERFILE # Deployments are pre-defined in the "dev" environment; they will be stopped # after 3 days unless they are on the default branch (master). # To define production deployments, ensure the domain name is correct, and set # the corresponding DNS record as "CNAME" to "a.ocaml.pro" deploy-prod: extends: .deploy-prod variables: PUBLIC_HOST: osh.ocamlpro.com