openflexure-microscope-server/.gitlab-ci.yml
Richard Bowman 3ca469cca6 Install dev dependencies
We now install with --dev to make sure development dependencies
are included.  I've also removed "poetry run"
from the "poe" commands, as we are
already in an active virtual environment, so
it's unnecessary (and also broken).

Finally, I added a tarball of the vue app to
the output distribution.
2021-03-29 14:57:18 +01:00

202 lines
4.4 KiB
YAML

stages:
- analysis
- testing
- build
- package
- deploy
# Re-usable block to install (and cache) Poetry and openflexure-microscope-server
.python-install-template: &python-install
before_script:
- python3 -m venv .venv # NB this does not overwrite an existing cached venv
- source .venv/bin/activate
- pip install pipenv # Should be cached after first run
- pipenv install --dev # Should be cached after first run - will just check packages are present
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- .cache/pip
- .venv
# Re-usable block to install (and cache) openflexure-microscope-server static app
.node-install-template: &node-install
before_script:
- cd openflexure_microscope/api/static/
- npm install
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- openflexure_microscope/api/static/node_modules
# Python static analysis with PyLint
pylint:
stage: analysis
image: python:3.7
retry: 1
<<: *python-install
script:
- poe pylint
only:
- branches
- merge_requests
- tags
- web
# Python type checking with Mypy
mypy:
stage: analysis
image: python:3.7
retry: 1
<<: *python-install
script:
- poe mypy
artifacts:
reports:
cobertura: openflexure_microscope/cobertura.xml
only:
- branches
- merge_requests
- tags
- web
# Python style analysis with Black
black:
stage: analysis
image: python:3.7
retry: 1
allow_failure: true
<<: *python-install
script:
# Run static build script
- poe black_check
only:
- branches
- merge_requests
- tags
- web
# Python unit tests with PyTest
pytest:
stage: testing
image: python:3.7
retry: 1
<<: *python-install
script:
- poe test
only:
- branches
- merge_requests
- tags
- web
# JavaScript linting with ESLint (via Vue CLI)
eslint:
stage: analysis
image: node:15
<<: *node-install
script:
# Build JS application for production
- npm run lint
only:
- branches
- merge_requests
- tags
- web
# Build JS app
build:
stage: build
image: node:15
<<: *node-install
script:
# Build JS application for production
- npm run build
artifacts:
name: "dist"
expire_in: 1 week
paths:
- "./openflexure_microscope/api/static/dist/"
only:
- merge_requests
- tags
- web
# Package application into distribution tarball
package:
stage: package
dependencies:
- build
image: ubuntu:latest
script:
# Build distribution archive
- mkdir -p dist
- tar -c --exclude-vcs --exclude-from .tarignore -vzf dist/openflexure-microscope-server-${CI_COMMIT_REF_NAME}.tar.gz .
- tar -c --exclude-vcs --exclude-from .tarignore -vzf dist/openflexure-microscope-webapp-${CI_COMMIT_REF_NAME}.tar.gz ./openflexure_microscope/api/static/dist/
- cd dist/
- sha256sum openflexure-microscope-server-${CI_COMMIT_REF_NAME}.tar.gz > openflexure-microscope-server-${CI_COMMIT_REF_NAME}.tar.gz.sha256
- sha256sum openflexure-microscope-webapp-${CI_COMMIT_REF_NAME}.tar.gz > openflexure-microscope-webapp-${CI_COMMIT_REF_NAME}.tar.gz.sha256
artifacts:
name: "dist"
expire_in: 1 week
paths:
- "./dist/openflexure-microscope-server-${CI_COMMIT_REF_NAME}.tar.gz"
- "./dist/openflexure-microscope-server-${CI_COMMIT_REF_NAME}.tar.gz.sha256"
- "./dist/openflexure-microscope-webapp-${CI_COMMIT_REF_NAME}.tar.gz"
- "./dist/openflexure-microscope-webapp-${CI_COMMIT_REF_NAME}.tar.gz.sha256"
only:
- merge_requests
- tags
- web
# Deploy to builds.openflexure.org
deploy:
stage: deploy
dependencies:
- package
image: ubuntu:latest
before_script:
- "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY_BATH_OPENFLEXURE_BASE64" | base64 --decode)
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
# Install rsync if not already installed
- "which rsync || ( apt-get update -y && apt-get install rsync -y )"
# Upload the builds folder to openflexure-microscope builds
- rsync -hrvz -e ssh dist/ ci-user@openflexure.bath.ac.uk:/var/www/build/openflexure-microscope-server
# Run update-latest.py on the build server
- ssh -t ci-user@openflexure.bath.ac.uk "/var/www/build/update-latest.py"
only:
- tags
- web