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.
202 lines
4.4 KiB
YAML
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
|