app/.gitlab-ci.yml

150 lines
3.9 KiB
YAML

stages:
- test
- ui
- build
- deploy
- release
test:
image: "rust:slim-buster"
stage: test
script:
- mkdir dist
- touch dist/index.html
- cargo test
build-ui:
stage: ui
image: node:16.13-slim
script:
- apt-get update
- apt-get -y install libssl-dev
- npm install
- npm run build
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG
artifacts:
paths:
- dist/
build-x64-bin:
dependencies:
- build-ui
image: "rust:slim-buster"
stage: build
tags:
- linux
rules:
- if: $CI_COMMIT_TAG
script:
- cargo build --release
- cd target/release
- tar -czf ../../vade-linux-x64.tar.gz vade
- cd ../../
artifacts:
paths:
- target/release/vade
- vade-linux-x64.tar.gz
build-musl-bin:
dependencies:
- build-ui
stage: build
image: 'rust:latest'
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG
script:
- rustup target add x86_64-unknown-linux-musl
- apt update && apt install -y musl-tools musl-dev
- update-ca-certificates
- cargo build --target x86_64-unknown-linux-musl --release
- cd target/x86_64-unknown-linux-musl/release/
- tar -czf ../../../vade-linux-musl.tar.gz vade
- cd ../../../
artifacts:
paths:
- vade-linux-musl.tar.gz
- target/x86_64-unknown-linux-musl/release/vade
build-arm-bin:
dependencies:
- build-ui
stage: build
image: 'rust:latest'
rules:
- if: $CI_COMMIT_TAG
script:
- rustup target add armv7-unknown-linux-gnueabihf
- apt update
- apt-get -y install gcc-arm-linux-gnueabihf
- cargo build --target armv7-unknown-linux-gnueabihf --release
- cd target/armv7-unknown-linux-gnueabihf/release/
- tar -czf ../../../vade-linux-arm.tar.gz vade
- cd ../../../
artifacts:
paths:
- target/armv7-unknown-linux-gnueabihf/release/vade
- vade-linux-arm.tar.gz
build-win-bin:
dependencies:
- build-ui
stage: build
tags:
- windows
rules:
- if: $CI_COMMIT_TAG
script:
- cargo build --release
artifacts:
paths:
- target/release/vade.exe
deploy-dev-docker:
dependencies:
- build-musl-bin
stage: deploy
image: docker:latest
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker build -t $CI_REGISTRY/vade/vade-mecum .
- docker push $CI_REGISTRY/vade/vade-mecum
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG
deploy-binaries:
dependencies:
- build-x64-bin
- build-musl-bin
- build-arm-bin
- build-win-bin
image: curlimages/curl:latest
stage: deploy
rules:
- if: $CI_COMMIT_TAG
script:
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ./vade-linux-x64.tar.gz "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/bin/$CI_COMMIT_TAG/vade-linux-x64-$CI_COMMIT_TAG.tar.gz"'
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ./vade-linux-arm.tar.gz "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/bin/$CI_COMMIT_TAG/vade-linux-arm-$CI_COMMIT_TAG.tar.gz"'
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ./vade-linux-musl.tar.gz "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/bin/$CI_COMMIT_TAG/vade-linux-musl-$CI_COMMIT_TAG.tar.gz"'
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ./target/release/vade.exe "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/bin/$CI_COMMIT_TAG/vade.exe"'
release:
stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest
rules:
- if: $CI_COMMIT_TAG
script:
- echo "running release_job"
release:
name: 'Release v$CI_COMMIT_TAG'
description: 'Version $CI_COMMIT_TAG'
tag_name: '$CI_COMMIT_TAG'
ref: '$CI_COMMIT_TAG'
assets:
links:
- name: 'vade-linux-x64-$CI_COMMIT_TAG.tar.gz'
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/linux-bin/$CI_COMMIT_TAG/vade-linux-x64-$CI_COMMIT_TAG.tar.gz'