arrdem / katamari

Roll up all your software into artifacts!
67 stars 4 forks source link

Rewrite deps at prep time to achieve consistent behavior #34

Closed arrdem closed 5 years ago

arrdem commented 5 years ago

This patch leverages the manifest prep time across all tools.deps (eg. JVM) backed targets to run some shared initializer code in the JVM extension that reads Katamari's current global default deps.edn data sources.

After that step in manifest prep, at rule prep time all the JVM manifests use the version pinning information currently somewhat magically delivered by the deps config to rewrite! their dependencies. This fixes #19 properly, by making the pinned and versioned deps part of the rule as it is content hashed for fingerprinting.

A (global) version bump will now cause target(s) to become stale.

Fixes #16, #19


Also includes a plan task for inspecting the prepped buildgraph, config and resulting plan, as well as some work on Maxwell and the planning machinery required to get it working as documented and intended. It was pretty broken.

arrdem commented 5 years ago

etc/bootstrap.sh looks good

$ ./kat plan me.arrdem/katamari+uberjar | jq '.buildgraph.targets["me.arrdem/katamari"]'
{
  "target": "me.arrdem/katamari",
  "paths": [
    "/Users/reid.mckenzie/Documents/dat/git/arrdem/katamari/src/katamari/src",
    "/Users/reid.mckenzie/Documents/dat/git/arrdem/katamari/src/katamari/resources"
  ],
  "deps": {
    "org.clojure/clojure": {
      "mvn/version": "1.9.0"
    },
    "org.clojure/tools.logging": {
      "mvn/version": "0.5.0-alpha"
    },
    "compojure/compojure": {
      "mvn/version": "1.6.1"
    },
    "clj-fuzzy/clj-fuzzy": {
      "mvn/version": "0.4.1"
    },
    "ring/ring-jetty-adapter": {
      "mvn/version": "1.7.0-RC1"
    },
    "ring/ring-json": {
      "mvn/version": "0.5.0-beta1"
    },
    "instaparse/instaparse": {
      "mvn/version": "1.4.9"
    },
    "cider/cider-nrepl": {
      "mvn/version": "0.18.0"
    },
    "cheshire/cheshire": {
      "mvn/version": "5.8.0"
    },
    "me.arrdem/roll-jvm": null,
    "me.arrdem/maxwell": null,
    "nrepl/nrepl": {
      "mvn/version": "0.4.0"
    },
    "ch.qos.logback/logback-classic": {
      "mvn/version": "RELEASE"
    },
    "ring/ring": {
      "mvn/version": "1.7.0-RC1"
    },
    "me.arrdem/roll": null
  },
  "manifest": "clojure-library",
  "rollfile": "/Users/reid.mckenzie/Documents/dat/git/arrdem/katamari/src/katamari/Rollfile"
}