stages:
  - build
  - package
  - publish

image:                  parity/rust:gitlab-ci

cache:
  key:                  "${CI_JOB_NAME}"
  paths:
    - ${CI_PROJECT_DIR}/target/
    - ${CI_PROJECT_DIR}/cargo/
    - node_modules/
    - .cache
    - $HOME/.cache

.releaseable_branches:  # list of git refs for building GitLab artifacts (think "pre-release binaries")
  only:                 &releaseable_branches
    - schedules # Our nightly builds from schedule, on `master`
    - "v*" # Our version tags
    - ci-package
    - next
    - tags

.publishable_branches:  # list of git refs for publishing builds to the "production" locations
  only:                 &publishable_branches
    - schedules # Our nightly builds from schedule, on `master`
    - "v*" # Our version tags
    - ci-package

before_script:
  - npm install
  - export VERSION=$(node -p "require('./package.json').version")

# Stage - build
build:
  stage:                build
  script:
    - scripts/lint.sh
    - scripts/test.sh
    - scripts/build.sh
    - scripts/push-precompiled.sh
  tags:
    - rust-stable

# Stage package binaries
package:binaries:linux:
  stage:                package
  only:                 *releaseable_branches
  script:
    - npm run release --linux
  artifacts:
    name:               "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
    when:               on_success
    expire_in:          1 week
    paths:
      - dist/*.deb
      - dist/*.snap
      - dist/*.AppImage
      - dist/*.xz
  tags:
    - rust-stable
package:binaries:mac:
  stage:                package
  only:                 *releaseable_branches
  script:
    - export ELECTRON_BUILDER_ALLOW_UNRESOLVED_DEPENDENCIES=true
    - npm run release -- --mac
  artifacts:
    name:               "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
    when:               on_success
    expire_in:          1 week
    paths:
      - dist/*.pkg
  tags:
    - osx
package:binaries:windows:
  stage:                package
  only:                 *releaseable_branches
  image:                electronuserland/builder:wine
  script:
    - npm run release -- --win
  artifacts:
    name:               "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
    when:               on_success
    expire_in:          1 week
    paths:
      - dist/*.exe
  tags:
    - rust-stable
# Stage publish
publish:snap:
  stage:                publish
  only:                 *publishable_branches
  image:                snapcore/snapcraft:stable
  dependencies:
    - package:binaries:linux
  variables:
    BUILD_ARCH: amd64
  before_script:
    - export VERSION=$(node -p "require('./package.json').version")&&echo "Version:" $VERSION
  script:
    - scripts/publish-snap.sh
  tags:
    - rust-stable
