diff --git a/.circleci/config.yml b/.circleci/config.yml index 8c4ff6c..389ff30 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,38 +1,74 @@ version: 2 jobs: - build: + compile: docker: - image: haskell:8.2.2 steps: - checkout - restore_cache: keys: - - v1-stack-root-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} - - v1-stack-root-{{ checksum "package.yaml" }}- - - v1-stack-root- - name: Restoring stack root cache - - restore_cache: - keys: - - v1-stack-work-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} - - v1-stack-work-{{ checksum "package.yaml" }}- - - v1-stack-work- - name: Restoring stack work cache + - v1-stack-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} + - v1-stack-{{ checksum "package.yaml" }}- + - v1-stack- + name: Restoring stack cache - run: - name: Setup - command: stack setup - - run: - name: Build - command: stack build --no-run-tests --test - - run: - name: Test - command: stack test - - save_cache: - key: v1-stack-root-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} - name: Caching stack root + name: Compile + command: make build + - persist_to_workspace: + root: . paths: - - /root/.stack + - dist - save_cache: - key: v1-stack-work-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} - name: Caching stack work + key: v1-stack-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} + name: Caching stack paths: - .stack-work + - /root/.stack + + doc-test: + docker: + - image: haskell:8.2.2 + steps: + - checkout + - attach_workspace: + at: . + - run: + name: Doc test + command: make test-doc-test + + for-github: + docker: + - image: alpine + steps: + - run: + name: Passed + command: echo passed + + sdist: + docker: + - image: haskell:8.2.2 + steps: + - checkout + - restore_cache: + keys: + - v1-stack-{{ checksum "package.yaml" }}-{{ checksum "stack.yaml" }} + - v1-stack-{{ checksum "package.yaml" }}- + - v1-stack- + name: Restoring stack cache + - run: + name: Build sdist + command: make sdist + +workflows: + version: 2 + base: + jobs: + - compile + - for-github: + requires: + - doc-test + - sdist + - sdist + - doc-test: + requires: + - compile diff --git a/.gitignore b/.gitignore index a7b9ebe..216ecdf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ ### Project specific ### *.cabal +.make +bin # Created by https://www.gitignore.io/api/vim,osx,linux,macos,emacs,windows,haskell,visualstudiocode diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f2ea6b6 --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ +BIN ?= bin +CABAL ?= cabal +DIST ?= dist +EMPTY ?= .make +PROJECT_NAME ?= rollbar-hs +STACK ?= stack +STACK_WORK ?= .stack-work +VERBOSITY ?= warn + +CABAL_FILE := $(PROJECT_NAME).cabal +DOC_TEST := $(DIST)/build/doc-test/doc-test +GHCID := $(BIN)/ghcid +STACK_FLAGS := --verbosity $(VERBOSITY) + +.DEFAULT_GOAL := build + +$(BIN) $(DIST) $(EMPTY): + mkdir -p $@ + +$(CABAL_FILE): package.yaml + # `stack` has no way to run `hpack` directly. + # We can run `hpack` indirectly with little overhead. + $(STACK) $(STACK_FLAGS) build --dry-run + +$(DOC_TEST): + rm -f $(EMPTY)/build + $(MAKE) $(EMPTY)/build + +$(EMPTY)/build: $(EMPTY)/stack-setup README.md Setup.hs package.yaml stack.yaml src/**/*.hs test/**/*.hs | $(DIST) + $(STACK) $(STACK_FLAGS) build --no-run-tests --test + cp -R $$($(STACK) $(STACK_FLAGS) path --dist-dir)/build $(DIST) + touch $@ + +$(EMPTY)/stack-setup: | $(EMPTY) + $(STACK) $(STACK_FLAGS) setup + touch $@ + +$(GHCID): $(EMPTY)/stack-setup | $(BIN) + $(STACK) $(STACK_FLAGS) install ghcid --local-bin-path $(BIN) + +.PHONT: build +build: $(EMPTY)/build + +.PHONY: cabal-check +cabal-check: $(CABAL_FILE) + $(CABAL) check + +.PHONY: clean +clean: + rm -f $(CABAL_FILE) + rm -fr $(BIN) + rm -fr $(DIST) + rm -fr $(EMPTY) + rm -fr $(STACK_WORK) + +.PHONY: sdist +sdist: cabal-check | $(DIST) + $(CABAL) sdist + +.PHONY: test +test: $(EMPTY)/build test-doc-test + +.PHONY: test-doc-test +test-doc-test: $(DOC_TEST) + $< + +.PHONY: upload-hackage +upload-hackage: sdist + @ $(CABAL) upload $(DIST)/$(PROJECT_NAME)-*.tar.gz + +.PHONY: watch +watch: $(GHCID) + $(GHCID) diff --git a/package.yaml b/package.yaml index 84a0bd7..a0ea4df 100644 --- a/package.yaml +++ b/package.yaml @@ -1,6 +1,9 @@ author: Hardy Jones category: Web copyright: 2018 Hardy Jones +description: | + Provides a type-safe encoding of the Rollbar API. + Also provides functions to communicate with the Rollbar API. extra-source-files: - README.md github: joneshf/rollbar-hs