Commit graph

1580 commits

Author SHA1 Message Date
Vincent Ambo
bd7c9e4b5a fix(writeElispBin): Use emacsPackagesNg
Ng is used by my Emacs derivation. I don't actually know what they do
differently, but it seems sensible to use the same one in both places.
2019-12-14 12:49:18 +00:00
Vincent Ambo
2b80265a1f refactor(emacs): Rewrite derivation to match depot layout 2019-12-14 12:47:07 +00:00
Vincent Ambo
863f5b146d chore(emacs): Move Nix derivation for building Emacs over from infra 2019-12-14 11:57:11 +00:00
Vincent Ambo
b4f835e21c chore(infra/nixos): Remove deprecated local packages 2019-12-14 11:56:48 +00:00
Vincent Ambo
0a8aa95c73 chore(infra/nixos): Mark folder as "not to be evaluated" 2019-12-14 11:55:31 +00:00
Vincent Ambo
85be796407 fix(build): Import package set correctly for CI builds 2019-12-14 11:52:27 +00:00
Vincent Ambo
74b5054a43 merge(nixos): Merge (unrelated) NixOS config history into infra/ 2019-12-14 11:45:21 +00:00
Vincent Ambo
3f199f9650 chore(nixos): Move NixOS config to infra/nixos 2019-12-14 11:44:01 +00:00
Vincent Ambo
3071ffdc8a chore(third_party): Add derivation for gopkgs/golang/groupcache 2019-12-14 11:37:48 +00:00
Vincent Ambo
a80ebfb067 docs(emacs): Update README file 2019-12-14 11:32:54 +00:00
Vincent Ambo
b938d716ff merge(emacs): Merge (unrelated) emacs.d history into tools/emacs 2019-12-14 11:31:25 +00:00
Vincent Ambo
15c61c0bee chore(emacs): Move emacs config to tools/emacs 2019-12-14 11:30:56 +00:00
Vincent Ambo
00129e06b2 fix(build): Make repository callable in Nix
This is required for some things that expect package sets to be
callable, e.g. Nixery.
2019-12-13 21:32:35 +00:00
Vincent Ambo
dc6e0e86ad chore(third_party): Bump nixpkgs channel
This channel is nixos-unstable on 2019-12-13.
2019-12-13 21:32:02 +00:00
Vincent Ambo
97e25e4dab chore(overrides): Bump buildGo.nix to add ASM support
This is required to build `x/sys`, which is required by the blog_cli
2019-12-13 21:31:37 +00:00
Vincent Ambo
fe01b82c5d refactor(tools/blog_cli): Build with buildGo.nix
This is the first Go package properly built with external dependencies
using buildGo.nix
2019-12-13 21:31:01 +00:00
Vincent Ambo
6220294f94 chore(third_party): Bump gopkgs needed for Google Cloud 2019-12-13 21:30:14 +00:00
Vincent Ambo
7f74980457 feat(external): Compile Go assembly and include it in pkg archive
This was the final step required to add support for packages that make
use of Go assembly, such as golang.org/x/sys.
2019-12-13 21:23:41 +00:00
Vincent Ambo
859c429b2f feat(external): Include *.s (ASM) files in external builds 2019-12-13 15:15:53 +00:00
Vincent Ambo
cfae527cc1 feat(buildGo): Support linking of symabi files for ASM sources 2019-12-13 15:15:22 +00:00
Vincent Ambo
9594203e07 feat(third_party/gopkgs): Import external packages for Google Cloud
These packages contain the Cloud SDK for Go. There is currently a
linker issue (presumably due to something in `buildGo.nix`) that means
that projects using them can not actually be built.
2019-12-13 12:12:06 +00:00
Vincent Ambo
8b10c8d0f3 chore(overrides): Upgrade buildGo.nix 2019-12-13 12:11:50 +00:00
Vincent Ambo
5649c75d01 fix(external): Fix "inverted" local dependencies
Usually in large packages the root depends on one or more
sub-packages (or there is no root), but some projects (e.g.
golang.org/x/oauth2) do it the other way around.

This fix adds compatibility for both ways.
2019-12-13 12:10:32 +00:00
Vincent Ambo
9d5417501b docs(README): Update description of buildGo.external 2019-12-13 00:39:53 +00:00
Vincent Ambo
369c86e0ef fix(proto): Refactor gRPC dependencies to match new external layout
This is now a lot more fine-grained than before, but it actually works
fine.

This stuff is a bit annoying to write by hand. There are multiple
different options available (e.g. carrying an attribute set of all
subpackages in each `external` and only passing that, having a tool
generate this, etc.).
2019-12-13 00:39:53 +00:00
Vincent Ambo
41c28cf60e fix(buildGo): Correctly refer to goGrpc package 2019-12-13 00:39:53 +00:00
Vincent Ambo
d8ef203f78 feat(external): Support foreign dependencies in external packages
Users can supply a list of foreign dependencies in calls to
buildGo.external. These are now appropriately inserted into packages
that *need them* and no further, resolving issues with complex
internal recursion in some repositories!
2019-12-13 00:39:53 +00:00
Vincent Ambo
218b81c709 fix(external): Skip folders with "no buildable Go files"
This error is returned by the build analysis logic if the target
package does not have any relevant Go files, which might be the case
if `+build` flags and such are used.
2019-12-13 00:39:53 +00:00
Vincent Ambo
39e73f42b2 style(external): Minor formatting fixes 2019-12-13 00:39:53 +00:00
Vincent Ambo
0dfa5d15fa fix(buildGo): Update buildGo.proto for compatibility with external
Changes in the structure of buildGo.external meant that the package
layout for the protobuf library is now slightly different.

`proto` has been amended to work with the new structure. Callers of
buildGo.proto do not need to be updated (i.e. the example still
works).
2019-12-13 00:39:53 +00:00
Vincent Ambo
875628a097 feat(external): Switch between packages & programs automatically 2019-12-13 00:39:53 +00:00
Vincent Ambo
f5e3183de1 feat(buildGo): Expose new external builder 2019-12-13 00:39:53 +00:00
Vincent Ambo
c5373a69fe feat(external): Implement builder function for externals
Implements a builder function that calls the analysis tool on the
provided source and builds up the required attribute set, including
local dependencies.
2019-12-13 00:39:53 +00:00
Vincent Ambo
bbf3a418a5 feat(external): Add fully qualified import path to analyser output
This is used by Nix to build the derivation names for individual
packages.
2019-12-13 00:39:53 +00:00
Vincent Ambo
1fd80fb201 fix(external): Correctly set names for root packages
Fixes the prefix trimming logic for package names and source files if
the source files appear in the package root (which is, unsurprisingly,
very common).
2019-12-13 00:39:53 +00:00
Vincent Ambo
b20e46d60b fix(external): Ensure findGoDirs "finds" top-level directory
Due to the lexical walk order of `filepath.Walk` the previous
directory identification logic failed under certain conditions if the
top-level directory contained Go files that showed up *after* the
first subdirectories.

To simplify the logic a set of directories is now gathered instead on
a file-level.
2019-12-13 00:39:53 +00:00
Vincent Ambo
a5473293e7 feat(external): Return references in more useable format for Nix
Sub-packages of external dependencies are traversed by Nix as a tree
of attribute sets which need to be accessed by "path". To make this
easier, the dependency analyser now returns "paths" as string lists.
2019-12-13 00:39:53 +00:00
Vincent Ambo
fb4dd76146 feat(external): Implement tool to analyse external dependencies
Adds a tool that can analyse dependencies that were not originally
meant to be built with buildGo.nix and return information that can be
used to construct appropriate Nix dependencies.

The tool will return information about package-local and foreign
dependencies separately to let Nix determine whether all required
dependencies are provided and to correctly link together sub-packages.

To avoid listing standard library imports in the dependencies, a list
of all packages in the standard library is generated statically to
allow for those to be filtered out during the analysis.

This tool is still work-in-progress.
2019-12-13 00:39:53 +00:00
Vincent Ambo
e60dfabc21 feat(buildGo): Expose Go import path for packages 2019-12-13 00:39:53 +00:00
Vincent Ambo
57f37743c2 fix(buildGo): Ensure 'proto' libraries are overridable 2019-12-13 00:39:53 +00:00
Vincent Ambo
c40e8a4061 feat(buildGo): Add new traversing external' implementation
Adds an alternative implementation of a builder for external packages
which traverses packages and builds up an attribute set tree out of
their structure.

Currently this is not functional because there is no useable method of
specifying dependencies within that package set.
2019-12-13 00:39:53 +00:00
Vincent Ambo
050b3aabaf fix(read-tree): Only add marker to imported attribute sets
Sometimes things that get imported are (intentionally) not attribute
sets, e.g. for build functions.

Those should not be merged with the marker because, well, that's not
possible.
2019-12-10 14:46:05 +00:00
Vincent Ambo
c93130c8c3 feat(aoc2019): Solve day 3 puzzles
Now this was quite something.
2019-12-10 14:45:28 +00:00
Vincent Ambo
da64d852ea refactor(read-tree): Simplify tree recursion logic
Rewrites the previous initial tick-tocking recursion into a more
straightforward style.

Every attribute set that is imported by readTree now also contains an
attribute called `__readTree` set to `true` which acts as a marker for
other types of tree traversals.

Unfortunately directories without any children or importable content
still result in empty attribute sets, but overall this might be the
better tradeoff vs. having to follow the recursion all the way at each
subtree level to determine which children exist.
2019-12-09 23:23:13 +00:00
Vincent Ambo
2b6b76570e feat(read-tree): Mark derivations that have children
Adds a `__treeChildren` attribute that is set to `true` on derivations
that have children, e.g. for cases where a folder contains a
`default.nix` but has subdirectories with additional things in them.
2019-12-09 19:51:15 +00:00
Vincent Ambo
c81be2f836 feat(aoc2019): Solve day 2 puzzles 2019-12-09 14:43:09 +00:00
Vincent Ambo
85fa12da33 feat(aoc2019): Solve day 1 puzzles 2019-12-09 14:43:01 +00:00
Vincent Ambo
ded10fbd83 feat(tools): Add auto-dispatch for Advent of Code solutions 2019-12-09 12:27:07 +00:00
Vincent Ambo
9fb24840ab chore: Remove old 'external' folder
What was the point of this? Noone knows!
2019-12-09 12:26:45 +00:00
Vincent Ambo
124e185628 fix(read-tree): Always import with locatedAt attribute 2019-12-09 12:22:33 +00:00