git.iko.soy/typeable/rollbar-hs
on master help sign in
Separate the compile stage from testing
5deb32bjoneshf
.circleci/config.yml+29−11
@@ -1,6 +1,6 @@
1version: 2
1version: 2
2jobs:
2jobs:
3− sdist:
3+ compile:
4 docker:
4 docker:
5 - image: haskell:8.2.2
5 - image: haskell:8.2.2
6 steps:
6 steps:
@@ -12,10 +12,20 @@ jobs:
12 - v1-stack-
12 - v1-stack-
13 name: Restoring stack cache
13 name: Restoring stack cache
14 - run:
14 - run:
15− name: Build sdist
15+ name: Compile
16− command: make sdist
16+ command: make build
17+ - presist_to_workspace:
18+ root: dist
19+ paths:
20+ - '*'
21+ - save_cache:
22+ key: v1-stack-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }}
23+ name: Caching stack
24+ paths:
25+ - .stack-work
26+ - /root/.stack
17
27
18− test:
28+ sdist:
19 docker:
29 docker:
20 - image: haskell:8.2.2
30 - image: haskell:8.2.2
21 steps:
31 steps:
@@ -26,19 +36,27 @@ jobs:
26 - v1-stack-{{ checksum "package.yaml" }}-
36 - v1-stack-{{ checksum "package.yaml" }}-
27 - v1-stack-
37 - v1-stack-
28 name: Restoring stack cache
38 name: Restoring stack cache
39+ - run:
40+ name: Build sdist
41+ command: make sdist
42+
43+ test:
44+ docker:
45+ - image: haskell:8.2.2
46+ steps:
47+ - checkout
48+ - attach_workspace:
49+ at: dist
29 - run:
50 - run:
30 name: Test
51 name: Test
31 command: make test
52 command: make test
32− - save_cache:
33− key: v1-stack-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }}
34− name: Caching stack
35− paths:
36− - .stack-work
37− - /root/.stack
38
53
39workflows:
54workflows:
40 version: 2
55 version: 2
41 base:
56 base:
42 jobs:
57 jobs:
58+ - compile
43 - sdist
59 - sdist
44− - test
60+ - test:
61+ requires:
62+ - compile
Makefile+19−12
@@ -8,29 +8,37 @@ STACK_WORK ?= .stack-work
8VERBOSITY ?= warn
8VERBOSITY ?= warn
9
9
10CABAL_FILE := $(PROJECT_NAME).cabal
10CABAL_FILE := $(PROJECT_NAME).cabal
11+DOC_TEST := $(DIST)/build/doc-test/doc-test
11GHCID := $(BIN)/ghcid
12GHCID := $(BIN)/ghcid
12STACK_FLAGS := --verbosity $(VERBOSITY)
13STACK_FLAGS := --verbosity $(VERBOSITY)
13
14
14−.DEFAULT_GOAL := build
15+.DEFAULT_GOAL := $(EMPTY)/build
15
16
16$(BIN) $(DIST) $(EMPTY):
17$(BIN) $(DIST) $(EMPTY):
17 mkdir -p $@
18 mkdir -p $@
18
19
19−$(EMPTY)/stack-setup: | $(EMPTY)
20− $(STACK) $(STACK_FLAGS) setup
21− touch $@
22−
23−$(GHCID): $(EMPTY)/stack-setup | $(BIN)
24− $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
25−
26$(CABAL_FILE): package.yaml
20$(CABAL_FILE): package.yaml
27 # `stack` has no way to run `hpack` directly.
21 # `stack` has no way to run `hpack` directly.
28 # We can run `hpack` indirectly with little overhead.
22 # We can run `hpack` indirectly with little overhead.
29 $(STACK) $(STACK_FLAGS) build --dry-run
23 $(STACK) $(STACK_FLAGS) build --dry-run
30
24
31−.PHONY: build
25+$(DOC_TEST): $(EMPTY)/build golden/**/*.json
26+ $@
27+
32−build: $(EMPTY)/stack-setup
28+$(EMPTY)/build: $(EMPTY)/stack-setup README.md Setup.hs package.yaml stack.yaml src/**/*.hs test/**/*.hs | $(DIST)
33 $(STACK) $(STACK_FLAGS) build --no-run-tests --test
29 $(STACK) $(STACK_FLAGS) build --no-run-tests --test
30+ cp -R $$($(STACK) $(STACK_FLAGS) path --dist-dir)/build $(DIST)/build
31+ touch $@
32+
33+$(EMPTY)/doc-test: $(EMPTY)/build
34+ touch $@
35+
36+$(EMPTY)/stack-setup: | $(EMPTY)
37+ $(STACK) $(STACK_FLAGS) setup
38+ touch $@
39+
40+$(GHCID): $(EMPTY)/stack-setup | $(BIN)
41+ $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN)
34
42
35.PHONY: cabal-check
43.PHONY: cabal-check
36cabal-check: $(CABAL_FILE)
44cabal-check: $(CABAL_FILE)
@@ -49,8 +57,7 @@ sdist: cabal-check | $(DIST)
49 $(CABAL) sdist
57 $(CABAL) sdist
50
58
51.PHONY: test
59.PHONY: test
52−test: build
60+test: $(DOC_TEST)
53− $(STACK) $(STACK_FLAGS) test
54
61
55.PHONY: upload-hackage
62.PHONY: upload-hackage
56upload-hackage: sdist
63upload-hackage: sdist