100 lines
3.2 KiB
YAML
100 lines
3.2 KiB
YAML
# Build the project
|
|
build:
|
|
needs: []
|
|
image: $CI_REGISTRY/libretunes/ops/docker-leptos:latest
|
|
script:
|
|
- cargo-leptos build
|
|
|
|
.docker:
|
|
image: docker:latest
|
|
services:
|
|
- docker:dind
|
|
tags:
|
|
- docker
|
|
before_script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
|
|
# Build the docker image and push it to the registry
|
|
docker-build:
|
|
needs: ["build"]
|
|
extends: .docker
|
|
script:
|
|
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
|
|
# If running on the default branch, tag as latest
|
|
- if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]; then docker tag
|
|
$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
|
$CI_REGISTRY_IMAGE:latest; fi
|
|
- docker push $CI_REGISTRY_IMAGE --all-tags
|
|
|
|
# Run leptos tests
|
|
leptos-tests:
|
|
needs: ["build"]
|
|
image: $CI_REGISTRY/libretunes/ops/docker-leptos:latest
|
|
script:
|
|
- cargo-leptos test
|
|
|
|
# Run all tests
|
|
tests:
|
|
needs: ["build"]
|
|
image: $CI_REGISTRY/libretunes/ops/docker-leptos:latest
|
|
script:
|
|
- cargo test --all-targets --all-features
|
|
|
|
# Generate docs
|
|
cargo-doc:
|
|
needs: []
|
|
image: rust:slim
|
|
script:
|
|
- cargo doc --no-deps
|
|
artifacts:
|
|
paths:
|
|
- target/doc
|
|
|
|
# Start the review environment
|
|
start-review:
|
|
extends: .docker
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
when: manual
|
|
script:
|
|
- apk add curl openssl
|
|
- cd cicd
|
|
- echo "$CLOUDFLARE_TUNNEL_AUTH_JSON" > tunnel-auth.json
|
|
- ./add-dns.sh $CLOUDFLARE_ZONE_ID review-$CI_COMMIT_SHORT_SHA libretunes-auto-review $CLOUDFLARE_API_TOKEN $CLOUDFLARE_TUNNEL_ID
|
|
- ./create-tunnel-config.sh http://libretunes:3000 review-$CI_COMMIT_SHORT_SHA.libretunes.xyz $CLOUDFLARE_TUNNEL_ID
|
|
- export COMPOSE_PROJECT_NAME=review-$CI_COMMIT_SHORT_SHA
|
|
- export POSTGRES_PASSWORD=$(openssl rand -hex 16)
|
|
- export LIBRETUNES_VERSION=$CI_COMMIT_SHORT_SHA
|
|
- docker compose --file docker-compose-cicd.yml pull
|
|
- docker compose --file docker-compose-cicd.yml create
|
|
- export CONFIG_VOL_NAME=review-${CI_COMMIT_SHORT_SHA}_cloudflared-config
|
|
- export TMP_CONTAINER_NAME=$(docker run --rm -d -v $CONFIG_VOL_NAME:/data busybox sh -c "sleep infinity")
|
|
- docker cp tunnel-auth.json $TMP_CONTAINER_NAME:/data/auth.json
|
|
- docker cp cloudflared-tunnel-config.yml $TMP_CONTAINER_NAME:/data/config.yml
|
|
- docker stop $TMP_CONTAINER_NAME
|
|
- docker compose --file docker-compose-cicd.yml up -d
|
|
environment:
|
|
name: review/$CI_COMMIT_SHORT_SHA
|
|
url: https://review-$CI_COMMIT_SHORT_SHA.libretunes.xyz
|
|
on_stop: stop-review
|
|
auto_stop_in: 1 week
|
|
|
|
# Stop the review environment
|
|
stop-review:
|
|
needs: ["start-review"]
|
|
extends: .docker
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
when: manual
|
|
allow_failure: true
|
|
script:
|
|
- apk add jq curl
|
|
- ./cicd/remove-dns.sh $CLOUDFLARE_ZONE_ID review-$CI_COMMIT_SHORT_SHA.libretunes.xyz libretunes-auto-review $CLOUDFLARE_API_TOKEN
|
|
- export COMPOSE_PROJECT_NAME=review-$CI_COMMIT_SHORT_SHA
|
|
- export LIBRETUNES_VERSION=$CI_COMMIT_SHORT_SHA
|
|
- docker compose --file cicd/docker-compose-cicd.yml down
|
|
- docker compose --file cicd/docker-compose-cicd.yml rm -f -v
|
|
environment:
|
|
name: review/$CI_COMMIT_SHORT_SHA
|
|
action: stop
|