From 9fbb10373d3f230244d6bee2fa9cdb1c899d8285 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Wed, 11 Sep 2019 08:56:41 -0400
Subject: [PATCH] comments

---
 .circleci/config.yml | 46 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index cc72cb6..152aae8 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -17,27 +17,54 @@ version: 2.1
 jobs:
   test:
     docker:
+      # Run in a highly Nix-capable environment.  This lets us use Stack's nix
+      # integration and other useful Nix features to specify and run the
+      # build.
       - image: "nixorg/nix:circleci"
 
     environment:
+      # Specify a revision of NixOS/nixpkgs to run against.  This essentially
+      # pins the majority of the software involved in the build.  This
+      # revision is selected arbitrarily.  It's somewhat current as of the
+      # time of this comment.  We can bump it to a newer version when that
+      # makes sense.  Meanwhile, the platform won't shift around beneath us
+      # unexpectedly.
       NIXPKGS_REV: "3c83ad6ac13b67101cc3e2e07781963a010c1624"
 
     steps:
       - run:
+          # Get NIX_PATH set for the rest of the job so that the revision of
+          # nixpkgs we selected will be used everywhere Nix pulls in software.
+          # There is no way to set an environment variable containing the
+          # value of another environment variable on CircleCI except to use
+          # the `BASE_ENV` feature as we do here.
           name: "Setup NIX_PATH Environment Variable"
           command: |
             echo "export NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/$NIXPKGS_REV.tar.gz" >> $BASH_ENV
 
       - restore_cache:
+          # Get all of Nix's state relating to the particular revision of
+          # nixpkgs we're using.  It will always be the same.  CircleCI
+          # artifacts and nixpkgs store objects are probably mostly hosted in
+          # the same place (S3) so there's not a lot of difference for
+          # anything that's pre-built.  For anything we end up building
+          # ourselves, though, this saves us all of the build time (less the
+          # download time).
+          #
+          # Read about caching dependencies: https://circleci.com/docs/2.0/caching/
           name: "Restore Nix Store Paths"
           keys:
             - paymentserver-nix-store-v1-{{ .Environment.NIXPKGS_REV }}
             - paymentserver-nix-store-v1-
 
+      # Get *our* source code.
       - "checkout"
 
       - restore_cache:
-          # Read about caching dependencies: https://circleci.com/docs/2.0/caching/
+          # Restore the cache of Stack's state.  This will have all of the
+          # compiled Haskell libraries we depend on and even the compiled
+          # output of our own libraries, if the source hasn't changed since
+          # the cache was written (but usually it will have).
           name: "Restore Cached Dependencies"
           keys:
             - paymentserver-v1-{{ checksum "stack.yaml" }}-{{ checksum "PaymentServer.cabal" }}
@@ -46,6 +73,20 @@ jobs:
       - run:
           name: "Run Tests"
           command: |
+            # shell.nix gives us the stack we want.  Then stack.yaml specifies
+            # some more of the Nix-based environment to be able to build and
+            # run the tests.
+            #
+            # --no-terminal avoids having fancy progress reports written to
+            # stdout.
+            #
+            # --coverage gathers test coverage information to be published
+            # below.
+            #
+            # --fast turns off compiler optimizations which probably doesn't
+            # make a lot of difference in our code but it can speed up build
+            # times for our dependencies (as well as reduce compiler memory
+            # usage which may be important at least for stripe-core).
             nix-shell shell.nix --run "stack build --no-terminal --test --coverage --fast"
 
       - save_cache:
@@ -62,6 +103,7 @@ jobs:
             - "/nix"
 
       - store_artifacts:
+          # There may be useful build logs here.
           path: ".stack-work/logs"
 
       - run:
@@ -70,6 +112,8 @@ jobs:
             mv $(nix-shell shell.nix --run "stack path --local-install-root")/hpc /tmp
 
       - store_artifacts:
+          # This contains the html coverage report as well as the raw data in
+          # .tix format.
           path: "/tmp/hpc"
           destination: "coverage"
 
-- 
GitLab