1 |
|
2 |
|
3 |
|
4 | references:
|
5 |
|
6 | container_config_node: &container_config_node
|
7 | working_directory: ~/project/build
|
8 | docker:
|
9 | - image: circleci/node:12-browsers
|
10 |
|
11 | workspace_root: &workspace_root
|
12 | ~/project
|
13 |
|
14 | attach_workspace: &attach_workspace
|
15 | attach_workspace:
|
16 | at: *workspace_root
|
17 |
|
18 | npm_cache_keys: &npm_cache_keys
|
19 | keys:
|
20 | - v3-dependency-npm-{{ checksum "package.json" }}-
|
21 | - v3-dependency-npm-{{ checksum "package.json" }}
|
22 | - v3-dependency-npm-
|
23 |
|
24 | cache_npm_cache: &cache_npm_cache
|
25 | save_cache:
|
26 | key: v3-dependency-npm-{{ checksum "package.json" }}-{{ epoch }}
|
27 | paths:
|
28 | - ./node_modules/
|
29 |
|
30 | restore_npm_cache: &restore_npm_cache
|
31 | restore_cache:
|
32 | <<: *npm_cache_keys
|
33 |
|
34 | filters_only_main: &filters_only_main
|
35 | branches:
|
36 | only: main
|
37 |
|
38 | filters_ignore_main: &filters_ignore_main
|
39 | branches:
|
40 | ignore: main
|
41 |
|
42 | filters_ignore_tags: &filters_ignore_tags
|
43 | tags:
|
44 | ignore: /.*/
|
45 |
|
46 | filters_version_tag: &filters_version_tag
|
47 | tags:
|
48 | only:
|
49 | - /^v?\d+\.\d+\.\d+(?:-beta\.\d+)?$/
|
50 | branches:
|
51 | ignore: /.*/
|
52 |
|
53 | version: 2
|
54 |
|
55 | jobs:
|
56 |
|
57 | build:
|
58 | <<: *container_config_node
|
59 | steps:
|
60 | - checkout
|
61 | - run:
|
62 | name: Checkout next-ci-shared-helpers
|
63 | command: git clone --depth 1 git@github.com:Financial-Times/next-ci-shared-helpers.git .circleci/shared-helpers
|
64 | - *restore_npm_cache
|
65 | - run:
|
66 | name: Install project dependencies
|
67 | command: make install
|
68 | - run:
|
69 | name: shared-helper / npm-install-peer-deps
|
70 | command: .circleci/shared-helpers/helper-npm-install-peer-deps
|
71 | - run:
|
72 | name: shared-helper / npm-update
|
73 | command: .circleci/shared-helpers/helper-npm-update
|
74 | - run:
|
75 | name: shared-helper / generate-build-state-artifacts
|
76 | command: .circleci/shared-helpers/helper-generate-build-state-artifacts
|
77 | when: always
|
78 | - *cache_npm_cache
|
79 | - store_artifacts:
|
80 | path: build-state
|
81 | destination: build-state
|
82 | - persist_to_workspace:
|
83 | root: *workspace_root
|
84 | paths:
|
85 | - build
|
86 |
|
87 | test:
|
88 | <<: *container_config_node
|
89 | steps:
|
90 | - *attach_workspace
|
91 | - run:
|
92 | name: Run tests
|
93 | command: make test
|
94 | environment:
|
95 | JEST_JUNIT_OUTPUT: test-results/jest/results.xml
|
96 | MOCHA_FILE: test-results/mocha/results.xml
|
97 | - store_test_results:
|
98 | path: test-results
|
99 | - store_artifacts:
|
100 | path: test-results
|
101 | destination: test-results
|
102 |
|
103 | publish:
|
104 | <<: *container_config_node
|
105 | steps:
|
106 | - *attach_workspace
|
107 | - run:
|
108 | name: shared-helper / npm-store-auth-token
|
109 | command: .circleci/shared-helpers/helper-npm-store-auth-token
|
110 | - run: npx snyk monitor --org=customer-products --project-name=Financial-Times/n-test
|
111 | - run:
|
112 | name: shared-helper / npm-version-and-publish-public
|
113 | command: .circleci/shared-helpers/helper-npm-version-and-publish-public
|
114 |
|
115 | workflows:
|
116 |
|
117 | version: 2
|
118 |
|
119 | build-test:
|
120 | jobs:
|
121 | - build:
|
122 | filters:
|
123 | <<: *filters_ignore_tags
|
124 | - test:
|
125 | requires:
|
126 | - build
|
127 |
|
128 | build-test-publish:
|
129 | jobs:
|
130 | - build:
|
131 | filters:
|
132 | <<: *filters_version_tag
|
133 | - test:
|
134 | filters:
|
135 | <<: *filters_version_tag
|
136 | requires:
|
137 | - build
|
138 | - publish:
|
139 | filters:
|
140 | <<: *filters_version_tag
|
141 | requires:
|
142 | - test
|
143 |
|
144 | nightly:
|
145 | triggers:
|
146 | - schedule:
|
147 | cron: "0 0 * * *"
|
148 | filters:
|
149 | <<: *filters_only_main
|
150 | jobs:
|
151 | - build:
|
152 | context: next-nightly-build
|
153 | - test:
|
154 | requires:
|
155 | - build
|
156 | context: next-nightly-build
|