stages: - tests - package - integration - prerelease - release workflow: rules: - changes: - .gitlab/**/* - app/**/* - bin/duniter - neon/**/* - releases/**/* - rust-libs/**/* - test/**/* - .gitlab-ci.yml - index.ts - package.json - package-lock.json - server.ts .env: &env image: registry.duniter.org/docker/duniter-ci:v0.0.4 tags: - redshift before_script: - export NVM_DIR="$HOME/.nvm" - . "$NVM_DIR/nvm.sh" - nvm install 10 - nvm use 10 - export RUSTFLAGS="-D warnings" .cached_nvm: &cached_nvm <<: *env cache: untracked: true paths: - node_modules/ .rust_env: image: registry.duniter.org/docker/rust/rust-x64-stable-ci:latest tags: - redshift before_script: - export PATH="$HOME/.cargo/bin:$PATH" - rustup show && rustc --version && cargo --version #pages: # <<: *env # stage: pages # cache: {} # script: # - npm i # - npm doc # - mkdir -p public # - cp .gitlab/pages/pages-index.html public/index.html # - sed -i "s/{BRANCH}/$CI_COMMIT_REF_NAME/g" public/index.html # - mv typedoc public/ # - echo "$CI_JOB_ID" # - curl "https://git.duniter.org/nodes/typescript/duniter/-/jobs/$CI_JOB_ID/artifacts/raw/coverage.tar.gz" # - tar xzf coverage.tar.gz # - mv coverage "public/coverage" # - ls public # artifacts: # untracked: true # paths: # - public # only: # - loki # - dev tests: <<: *env rules: - if: $CI_COMMIT_REF_NAME =~ /^wip*$/ when: manual - if: $CI_COMMIT_TAG when: never - if: '$CI_MERGE_REQUEST_ID ||$CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH =~ /^release/' - when: manual stage: tests script: - npm i - npm run format:check - npm test # Push coverage to GitLab pages - tar cvzf coverage.tar.gz coverage/ # Code coverage display in GitLab - sed -n 23p coverage/index.html | grep -Po "\d+.\d+" | sed -e "s/\(.*\)/\1%<\/coverage>/" coverage: '/(\d+.\d+\%)<\/coverage>/' artifacts: paths: - coverage.tar.gz expire_in: 72h .integration_rules: &integration_rules allow_failure: true rules: - if: $CI_COMMIT_TAG when: never - when: manual sync_g1: <<: *env <<: *integration_rules stage: integration script: - npm i - bash .gitlab/test/check_g1_sync.sh sync_gtest: <<: *env <<: *integration_rules stage: integration script: - npm i - bash .gitlab/test/check_gt_sync.sh .build_releases: &build_releases stage: package image: duniter/release-builder:v1.4.0 cache: {} tags: - redshift artifacts: paths: &releases_artifacts - work/bin/ releases:test: <<: *build_releases allow_failure: true rules: - if: $CI_COMMIT_TAG when: never - when: manual script: - rm -rf node_modules/ - bash "release/arch/linux/build-lin.sh" "$(date +%Y%m%d).$(date +%H%M).$(date +%S)" artifacts: paths: *releases_artifacts expire_in: 72h releases:x64: <<: *build_releases rules: - if: $CI_COMMIT_TAG script: - rm -rf node_modules/ - bash "release/arch/linux/build-lin.sh" "${CI_COMMIT_TAG#v}" artifacts: paths: *releases_artifacts expire_in: 6 mos .docker-build-app-image: stage: package image: docker:18.06 tags: - redshift services: - docker:18.06-dind before_script: - docker info script: - docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG || true - docker build --cache-from $CI_REGISTRY_IMAGE:$IMAGE_TAG --pull -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" -f release/docker/Dockerfile . - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY - docker push "$CI_REGISTRY_IMAGE:$IMAGE_TAG" package:test:docker-test-image: extends: .docker-build-app-image allow_failure: true rules: - if: $CI_COMMIT_TAG when: never - if: '$CI_COMMIT_BRANCH == "dev"' when: never - when: manual variables: IMAGE_TAG: "test-image" package:dev:docker: extends: .docker-build-app-image rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_BRANCH == "dev" variables: IMAGE_TAG: "dev" package:prod:docker: stage: package rules: - if: $CI_COMMIT_TAG image: docker:18.06 tags: - redshift services: - docker:18.06-dind script: - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG" -f release/docker/Dockerfile . - docker login -u "gitlab-ci-token" -p "$CI_BUILD_TOKEN" $CI_REGISTRY - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG" - docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD" - docker tag "$CI_REGISTRY_IMAGE:$CI_BUILD_TAG" "duniter/duniter:$CI_BUILD_TAG" - docker push "duniter/duniter:$CI_COMMIT_TAG" - docker tag "$CI_REGISTRY_IMAGE:$CI_BUILD_TAG" duniter/duniter - docker push duniter/duniter .release_jobs: &release_jobs image: rdadev/jinja2:py3.6 tags: - redshift script: - python3 .gitlab/releaser prerelease: <<: *release_jobs rules: - if: $CI_COMMIT_TAG stage: prerelease variables: RELEASE_BIN_DIR: work/bin/ SOURCE_EXT: '["tar.gz", "zip"]' publish: <<: *release_jobs rules: - if: $CI_COMMIT_TAG when: manual stage: release variables: RELEASE_BIN_DIR: work/bin/ WIKI_RELEASE: Releases allow_failure: false