image: registry.gitlab.com/satoshilabs/trezor/trezor-firmware/environment

variables:
  SDL_VIDEODRIVER: "dummy"
  XDG_RUNTIME_DIR: "/var/tmp"

.only_changes_core: &only_changes_core
  only:
    changes:
      - ci/**/*
      - common/**/*
      - core/**/*
      - crypto/**/*
      - python/**/*
      - storage/**/*
      - tests/**/*
      - tools/**/*
      - vendor/**/*

.only_changes_legacy: &only_changes_legacy
  only:
    changes:
      - ci/**/*
      - common/**/*
      - crypto/**/*
      - legacy/**/*
      - python/**/*
      - storage/**/*
      - tests/**/*
      - tools/**/*
      - vendor/**/*


# Core

core fw regular build:
  stage: build
  <<: *only_changes_core
  script:
    - cd core
    - pipenv run make build_cross
    - pipenv run make build_boardloader
    - pipenv run make build_bootloader
    - pipenv run make build_prodtest
    - pipenv run make build_firmware
    - pipenv run make sizecheck
    - cd ..
    - export VERSION=$(./tools/version.sh core/embed/firmware/version.h)
    - cp core/build/firmware/firmware.bin trezor-fw-regular-$VERSION-$CI_COMMIT_SHORT_SHA.bin
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - trezor-fw-regular-*.*.*-$CI_COMMIT_SHORT_SHA.bin
    expire_in: 1 week

core fw btconly build:
  stage: build
  <<: *only_changes_core
  variables:
    BITCOIN_ONLY: "1"
  script:
    - cd core
    - pipenv run make build_firmware
    - mv build/firmware/firmware.bin build/firmware/firmware-bitcoinonly.bin
    - cd ..
    - pipenv run ./tools/check-bitcoin-only core/build/firmware/firmware-bitcoinonly.bin
    - export VERSION=$(./tools/version.sh core/embed/firmware/version.h)
    - cp core/build/firmware/firmware-bitcoinonly.bin trezor-fw-btconly-$VERSION-$CI_COMMIT_SHORT_SHA.bin
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - trezor-fw-btconly-*.*.*-$CI_COMMIT_SHORT_SHA.bin
    expire_in: 1 week

core unix regular build:
  stage: build
  <<: *only_changes_core
  script:
    - cd core
    - pipenv run make build_unix

core unix frozen regular build:
  stage: build
  <<: *only_changes_core
  script:
    - cd core
    - pipenv run make build_unix_frozen
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - core/build/unix/micropython
    - core/src/trezor/res/resources.py
    expire_in: 1 week

core unix frozen btconly build:
  stage: build
  <<: *only_changes_core
  variables:
    BITCOIN_ONLY: "1"
  script:
    - cd core
    - pipenv run make build_unix_frozen
    - mv build/unix/micropython build/unix/micropython-bitcoinonly
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - core/build/unix/micropython-bitcoinonly
    - core/src/trezor/res/resources.py
    expire_in: 1 week

core unix frozen debug build:
  stage: build
  <<: *only_changes_core
  variables:
    PYOPT: "0"
  script:
    - cd core
    - pipenv run make build_unix_frozen
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    untracked: true
    expire_in: 1 week

build core unix frozen regular darwin:
  stage: build
  tags:
    - darwin
  when: manual
  script:
    - . $HOME/.nix-profile/etc/profile.d/nix.sh
    - nix-shell --run "cd core && make build_unix_frozen"
    - mkdir -p TrezorEmu-$CI_COMMIT_SHORT_SHA.app/Contents/{MacOS,libs}
    - cp -v core/build/unix/micropython TrezorEmu-$CI_COMMIT_SHORT_SHA.app/Contents/MacOS/TrezorEmu-$CI_COMMIT_SHORT_SHA
    - dylibbundler -of -b -i /usr/lib/system -d TrezorEmu-$CI_COMMIT_SHORT_SHA.app/Contents/libs -x TrezorEmu-$CI_COMMIT_SHORT_SHA.app/Contents/MacOS/TrezorEmu-$CI_COMMIT_SHORT_SHA
    - mv TrezorEmu-$CI_COMMIT_SHORT_SHA.app trezor-emu-regular-macos-$VERSION-$CI_COMMIT_SHORT_SHA.app
  allow_failure: true
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
      - trezor-emu-regular-macos-$VERSION-$CI_COMMIT_SHORT_SHA.app
    expire_in: 1 week

# Crypto

crypto build:
  stage: build
  only:
    changes:
      - ci/**/*
      - crypto/**/*
  script:
    - cd crypto
    - pipenv run make
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - crypto/tests/aestst
    - crypto/tests/libtrezor-crypto.so
    - crypto/tests/test_check
    - crypto/tests/test_openssl
    expire_in: 1 week


# Legacy

# TODO: add clang https://github.com/trezor/trezor-firmware/issues/44
legacy fw regular build:
  stage: build
  <<: *only_changes_legacy
  variables:
    MEMORY_PROTECT: "0"
  script:
    - cd legacy
    - pipenv run script/cibuild
    - pipenv run make -C bootloader
    - pipenv run make -C demo
    - cd ..
    - export VERSION=$(./tools/version.sh legacy/firmware/version.h)
    - mv legacy/firmware/trezor.bin trezor-fw-regular-$VERSION-$CI_COMMIT_SHORT_SHA.bin
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - trezor-fw-regular-*.*.*-$CI_COMMIT_SHORT_SHA.bin
    expire_in: 1 week

legacy fw debug build:
  stage: build
  <<: *only_changes_legacy
  variables:
    DEBUG_LINK: "1"
    MEMORY_PROTECT: "0"
  script:
    - cd legacy
    - pipenv run script/cibuild

legacy fw btconly build:
  stage: build
  <<: *only_changes_legacy
  variables:
    BITCOIN_ONLY: "1"
    MEMORY_PROTECT: "0"
  script:
    - cd legacy
    - pipenv run script/cibuild
    - mv firmware/trezor.bin firmware/trezor-bitcoinonly.bin
    - cd ..
    - pipenv run ./tools/check-bitcoin-only legacy/firmware/trezor-bitcoinonly.bin
    - export VERSION=$(./tools/version.sh legacy/firmware/version.h)
    - mv legacy/firmware/trezor-bitcoinonly.bin trezor-fw-btconly-$VERSION-$CI_COMMIT_SHORT_SHA.bin
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - trezor-fw-btconly-*.*.*-$CI_COMMIT_SHORT_SHA.bin
    expire_in: 1 week

legacy emu regular build:
  stage: build
  <<: *only_changes_legacy
  variables:
    DEBUG_LINK: "1"
    EMULATOR: "1"
  script:
    - cd legacy
    - pipenv run script/cibuild
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - legacy/firmware/trezor.elf
    expire_in: 1 week

legacy emu btconly build:
  stage: build
  <<: *only_changes_legacy
  variables:
    BITCOIN_ONLY: "1"
    DEBUG_LINK: "1"
    EMULATOR: "1"
  script:
    - cd legacy
    - pipenv run script/cibuild
    - mv firmware/trezor.elf firmware/trezor-bitcoinonly.elf
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_SHORT_SHA"
    paths:
    - legacy/firmware/trezor-bitcoinonly.elf
    expire_in: 1 week