aboutsummaryrefslogtreecommitdiff
path: root/.circleci/config.yml
blob: fec66bda1b3a11a2f725f621289ea3d770b41b32 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
version: 2.1

executors:
  default:
    docker:
      - image: circleci/node:10-stretch-browsers
    environment:
      - FIREFOX_VERSION: "68.0esr"
      - GECKODRIVER_VERSION: "0.24.0"
    working_directory: ~

commands:
  install_firefox:
    steps:
      - restore_cache:
          key: firefox-bin
          paths:
            - ~/firefox
      - run:
          name: Install Firefox
          command: |
            test -d ~/firefox/${FIREFOX_VERSION} && exit 0
            url=https://ftp.mozilla.org/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2
            curl -sSL -o- "$url" | tar xvfj -
            mkdir -p ~/firefox
            mv firefox ~/firefox/${FIREFOX_VERSION}
      - save_cache:
          key: firefox-bin
          paths:
            - ~/firefox
      - run: echo 'export PATH=~/firefox/$FIREFOX_VERSION:$PATH' >> $BASH_ENV

  install_geckodriver:
    steps:
      - run:
          name: Install geckodriver
          command: |
            mkdir -p geckodriver

            url=https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz
            curl -sSLf "$url" | tar  -C geckodriver xvf -

            echo 'export PATH=~/geckodriver/$GECKODRIVER_VERSION:$PATH' >> $BASH_ENV

  setup_npm:
    steps:
      - restore_cache:
          key: dependency-cache-{{ checksum "package-lock.json" }}
      - run:
          name: Install dependencies
          command: npm install
      - save_cache:
          key: dependency-cache-{{ checksum "package-lock.json" }}
          paths:
            - node_modules

jobs:
  build:
    executor:
      name: default
    steps:
      - install_firefox
      - checkout
      - setup_npm
      - run: npm run lint
      - run:
          # NOTE: Karma loads ts-node automatically and treats karma.conf.js as a TypeScript.
          # Karma does not starts by karma.conf.js transpile failure, and this hack removes
          # ts-node module from the local before test.
          # See: https://github.com/karma-runner/karma/issues/3329
          name: Remove node-ts from node_modules
          command: mv node_modules/ts-node node_modules/ts-node.orig
      - run: npm test
      - run: npm run package

  e2e:
    executor:
      name: default
    steps:
      - run: sudo apt-get update && sudo apt-get -y install xsel
      - install_firefox
      - checkout
      - setup_npm
      - run: npm run build
      - run: npm run test:e2e

  deploy:
    executor:
      name: default
    steps:
      - checkout
      - setup_npm
      - run: npm run package
      - run:
          name: Deploy to AMO
          command: |
            version=$(jq -r '.version' manifest.json)
            ./script/deploy vim-vixen@i-beam.org "$version" "vim-vixen-${version}.zip"

workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - e2e:
          filters:
            branches:
              ignore: /^greenkeeper\/.*/
  deploy:
    jobs:
      - build:
          filters:
            tags:
              only: /^.*/
            branches:
              ignore: /.*/
      - e2e:
          filters:
            tags:
              only: /^.*/
            branches:
              ignore: /.*/
      - deploy:
          requires:
            - build
            - e2e
          filters:
            tags:
              only: /^.*/
            branches:
              ignore: /.*/