image: registry.gitlab.com/ryuslash/emacs-config

stages:
  - pre-package-multifile
  - package
  - unit-test
  - integration-test
  - deploy

package-oni-conf:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-conf/dist
  script:
    - cask --path oni-conf package
  artifacts:
    paths:
      - oni-conf/dist/

package-oni-css:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-css/dist
  script:
    - cask --path oni-css package
  artifacts:
    paths:
      - oni-css/dist/

package-oni-elisp:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-elisp/dist
  script:
    - cask --path oni-elisp package
  artifacts:
    paths:
      - oni-elisp/dist/

package-oni-haml:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-haml/dist
  script:
    - cask --path oni-haml package
  artifacts:
    paths:
      - oni-haml/dist/

package-oni-html:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-html/dist
  script:
    - cask --path oni-html package
  artifacts:
    paths:
      - oni-html/dist/

package-oni-nxml:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-nxml/dist
  script:
    - cask --path oni-nxml package
  artifacts:
    paths:
      - oni-nxml/dist/

package-oni-org:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-org/dist
  script:
    - cask --path oni-org package
  artifacts:
    paths:
      - oni-org/dist/

package-oni-php:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-php/dist
  script:
    - cask --path oni-php package
  artifacts:
    paths:
      - oni-php/dist/

package-oni-python:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-python/dist
  script:
    - cask --path oni-python package
  artifacts:
    paths:
      - oni-python/dist/

package-oni-ruby:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-ruby/dist
  script:
    - cask --path oni-ruby package
  artifacts:
    paths:
      - oni-ruby/dist/

package-oni-twig:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-twig/dist
  script:
    - cask --path oni-twig package
  artifacts:
    paths:
      - oni-twig/dist/

package-oni-csharp:
  stage: pre-package-multifile
  before_script:
    - rm -rf oni-csharp/dist
  script:
    - cask --path oni-csharp package
  artifacts:
    paths:
      - oni-csharp/dist/

package:
  stage: package
  dependencies:
    - package-oni-conf
    - package-oni-css
    - package-oni-elisp
    - package-oni-haml
    - package-oni-html
    - package-oni-nxml
    - package-oni-org
    - package-oni-php
    - package-oni-python
    - package-oni-ruby
    - package-oni-twig
    - package-oni-csharp
  before_script:
    - rm -rf bin/
    - mkdir bin/
  script: make package
  artifacts:
    paths:
      - bin/

unit-test-oni-alert:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-alert TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-bookmark:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-bookmark TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-conf:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-conf TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-core:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-core TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-elisp:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-elisp TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-grep:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-grep TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-highlight-indent-guides:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-highlight-indent-guides TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-org:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-org TEST_ARCHIVE=$(realpath bin/)

unit-test-oni-php:
  stage: unit-test
  dependencies:
    - package
  script: make unit-test-oni-php TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-alert:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-alert TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-autohotkey:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-autohotkey TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-bat:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-bat TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-bats:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-bats TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-company:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-company TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-conf:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-conf TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-counsel:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-counsel TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-csharp:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-csharp TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-css:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-css TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-bookmark:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-bookmark TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-browse-url:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-browse-url TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-core:
  stage: integration-test
  dependencies:
    - package
  before_script:
    - mkdir -p ~/.emacs.d/data/
  script: make integration-test-oni-core TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-cpp:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-cpp TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-docker:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-docker TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-fish:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-fish TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-gui:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-gui TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-haskell:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-haskell TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-ivy:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-ivy TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-json:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-json TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-lua:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-lua TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-org:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-org TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-paredit:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-paredit TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-prescient:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-prescient TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-scheme:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-scheme TEST_ARCHIVE=$(realpath bin/)

integration-test-oni-yasnippet:
  stage: integration-test
  dependencies:
    - package
  script: make integration-test-oni-yasnippet TEST_ARCHIVE=$(realpath bin/)

deploy:
  only:
    - master
  stage: deploy
  image: instrumentisto/rsync-ssh
  dependencies:
    - package
  before_script:
    - chmod 600 "$DEPLOY_KEY"
  script:
    - rsync -e "ssh -o \"UserKnownHostsFile $KNOWN_HOSTS\" -p 4511 -i $DEPLOY_KEY" -v -c -r --delete bin/ "elpa@ryuslash.org:"