local CacheVolume = "cache"; local Cache(name, settings) = { name: name, image: "drillster/drone-volume-cache", volumes: [ { name: CacheVolume, path: "/cache" } ], settings: settings + { mount: ["/nix/store"] } }; local Pipeline(channel) = { kind: "pipeline", type: "docker", name: channel, // This is ignored by the drone-cli YAML translator, so unfortunately, it has // to be copy-pasted into relevant steps. environment: { NIXPKGS_ALLOW_UNFREE: 1, NUR_REPO: "xeals", CACHIX_CACHE: "xeals", CACHIX_SIGNING_KEY: { from_secret: "cachix_key" }, }, volumes: [ { name: CacheVolume, host: { path: "/tmp/drone/cache" } } ], steps: [ Cache("restore-nix-store", { restore: true }), { name: "build", image: "nixos/nix", commands: [ "nix-channel --add https://nixos.org/channels/" + channel + " nixos", "nix-channel --update", "nix-build ci.nix -A buildOutputs", "nix eval -f default.nix 'lib'", "nix eval -f default.nix 'modules'", "nix eval -f default.nix 'overlays'" ], environment: { NIXPKGS_ALLOW_UNFREE: 1 } }, { name: "deploy", image: "nixpkgs/cachix", commands: [ 'nix-build ci.nix -A cacheOutputs | cachix push "${CACHIX_CACHE}"'//, // 'if [[ "cron" != "${DRONE_BUILD_EVENT}" && -z "${DRONE_PULL_REQUEST}" && "master" = "${DRONE_BRANCH}" ]]; then // curl -XPOST "https://nur-update.herokuapp.com/update?repo=${NUR_REPO}"; fi' ], environment: { NIXPKGS_ALLOW_UNFREE: 1, NUR_REPO: "xeals", CACHIX_CACHE: "xeals", CACHIX_SIGNING_KEY: { from_secret: "cachix_key" }, }, }, Cache("save-nix-store", { rebuild: true }) + { when: { status: [ "success", "failure" ] } }, ] }; [ Pipeline("nixpkgs-unstable"), Pipeline("nixos-unstable"), Pipeline("nixos-20.03"), ]