Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Nix environment #2324

Merged
merged 7 commits into from
Dec 24, 2021
Merged

Add Nix environment #2324

merged 7 commits into from
Dec 24, 2021

Conversation

sagikazarmark
Copy link
Member

Overview

Nix allows creating reproducible environments. This PR adds Nix while keeping the rest of the tooling (mostly) backward compatible.

What this PR does / why we need it

"Works on my machine" is still a common answer in 2021 for environment specific issues during development.

Our current tooling setup (using Make) solves some of that by downloading the necessary tools, but not all of them (eg. Go).

Nix provides a more consistent environment, installing almost all dependencies (eg. Docker is still a problem on darwin). Installing Nix itself is fairly trivial, but the Make based tooling continues to work (with a slight change: make deps needs to be run manually now. Change is documented in README)

Special notes for your reviewer

Does this PR introduce a user-facing change?

Downloading tool dependencies now require manually running `make deps`

Signed-off-by: Mark Sagi-Kazar <[email protected]>
Signed-off-by: Mark Sagi-Kazar <[email protected]>
@JoelSpeed
Copy link
Contributor

Nix isn't a project I've worked with before, but it sounds like it could be good for the project. In the past I've tried to make things reproducible by running them within containers, is there any advantage to the Nix approach over say, assuming our developers have docker/podman installed and running everything within a container?

Signed-off-by: Mark Sagi-Kazar <[email protected]>
@sagikazarmark
Copy link
Member Author

Personally, I found running containers slightly inconvenient on macOS: it requires running a VM, IO performance is not always optimal and simply just running Docker Desktop without any containers can make my top notch MacBook Pro generate a lot of heat.

Nix provides a more "native" experience even on macOS. You cd into the project (given direnv is installed) and everything is magically configured, no need to build/update Docker images and you can just start working. If someone updates packages, you automatically get the new environment as soon as you pull the latest changes, no need to manually rebuild container images.

I've spent quite a bit of time with DX in the past couple years: tried using Make (see the current Makefile), containers, build systems (Bazel, Please) and now Nix. So far, Nix is my favorite.

I realize that's somewhat personal preference though which is why I left the current solution intact.

Some cons:

  • The Nix language is famously hard to read, but that's probably okay for the dev env, it doesn't change that much
  • Nix is probably not as widely used as Docker/Podman, but it's easy to install.

@nabokihms
Copy link
Member

I'm not familiar with the tooling, but I definitely like the idea of improving dev environments 👍

I will try to test it and give some feedback.

@JoelSpeed
Copy link
Contributor

Your argument seems reasonable and I know you've been experimenting with a few different choices. If we can settle on one preferred approach, and leave the existing make alone (or can it be called by nix? So as not to duplicate effort), then I think that's the best route for project

@sagikazarmark
Copy link
Member Author

Nowadays I usually do the following: I use Nix for all my development workflows, but keep a make deps target around to download dependencies manually whenever possible. That makes up for the fact that most people don't use Nix, while the core devs can rely on Nix being there for them.

Maintaining a couple targets for dependencies in a Makefile is relatively cheap.

@sagikazarmark
Copy link
Member Author

Any objections against merging this? Let's see if it sticks.

The old toolchain is still in place, so everything should work the same as before.

@nabokihms
Copy link
Member

No objections. I agree to merge this and see how it will go.

Copy link
Contributor

@JoelSpeed JoelSpeed left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, let's merge this and see how we get on

@sagikazarmark
Copy link
Member Author

Cool, thanks!

@sagikazarmark sagikazarmark merged commit c8d55ce into master Dec 24, 2021
xtremerui pushed a commit to concourse/dex that referenced this pull request Feb 9, 2022
The official docker release for this release can be pulled from

```
ghcr.io/dexidp/dex:v2.31.0
```

## What's Changed
* Bump Dex image to v2.30.0 for Kubernetes deployment example by @rdimitrov in dexidp#2232
* Update Go to 1.17 by @sagikazarmark in dexidp#2247
* refactor: move from io/ioutil to io and os package by @Juneezee in dexidp#2278
* feat: Add MySQL ent-based storage driver by @nabokihms in dexidp#2272
* chore: fix ioutil lint error after merging MySQL ent storage by @nabokihms in dexidp#2282
* Add parametrization of grant type supported in discovery endpoint by @ariary in dexidp#2265
* Resolves dexidp#2111 Option to fetch transitive group membership by @snuggie12 in dexidp#2268
* Return valid JWT access token from password grant by @enj in dexidp#2234
* fix: do not update offlinesession lastUsed field if refresh token was not updated by @nabokihms in dexidp#2300
* fix web static file path slash error for win platform by @copperyp in dexidp#2305
* Update grpc by @sagikazarmark in dexidp#2321
* ci: fix container image permissions by @sagikazarmark in dexidp#2329
* feat: print dex version in the logs by @iam-veeramalla in dexidp#2337
* OAuth connector by @xtremerui in dexidp#1630
* fix: return invalid_grant error on claiming token of another client by @nabokihms in dexidp#2344
* chore: warning about deprecated LDAP groupSearch fields by @nabokihms in dexidp#2026
* Add Nix environment by @sagikazarmark in dexidp#2324
* Update dependencies in the examples package by @sagikazarmark in dexidp#2372
* add sigstore to ADOPTERS.md by @bobcallaway in dexidp#2374
* Add claimMapping enforcement by @Happy2C0de in dexidp#2233
* ci: run trivy scan on container image by @sagikazarmark in dexidp#2387
* chore: update gomplate by @sagikazarmark in dexidp#2388
* chore: update golangci-lint download script by @nabokihms in dexidp#2394
* [fix] Replace /teams API w/ /workspaces endpoints by @rahulchheda in dexidp#2390
* ci: add Docker cache to speed builds up by @sagikazarmark in dexidp#2400
* distroless: Dockerfile works with distroless base image by @ankeesler in dexidp#2378
* Update dependencies by @sagikazarmark in dexidp#2404
* Update API package by @sagikazarmark in dexidp#2405

## Dependency updates
* build(deps): bump entgo.io/ent from 0.8.0 to 0.9.0 by @dependabot in dexidp#2226
* build(deps): bump golang from 1.16.6-alpine3.13 to 1.16.7-alpine3.13 by @dependabot in dexidp#2225
* build(deps): bump google.golang.org/grpc from 1.39.0 to 1.39.1 by @dependabot in dexidp#2227
* build(deps): bump google.golang.org/api from 0.52.0 to 0.53.0 by @dependabot in dexidp#2235
* build(deps): bump google.golang.org/grpc from 1.39.1 to 1.40.0 by @dependabot in dexidp#2236
* build(deps): bump alpine from 3.14.0 to 3.14.1 by @dependabot in dexidp#2229
* build(deps): bump github.com/go-ldap/ldap/v3 from 3.3.0 to 3.4.0 by @dependabot in dexidp#2239
* build(deps): bump google.golang.org/api from 0.53.0 to 0.54.0 by @dependabot in dexidp#2241
* build(deps): bump github.com/AppsFlyer/go-sundheit from 0.4.0 to 0.5.0 by @dependabot in dexidp#2240
* build(deps): bump google.golang.org/protobuf from 1.26.0 to 1.27.1 in /api/v2 by @dependabot in dexidp#2243
* build(deps): bump google.golang.org/grpc from 1.36.1 to 1.40.0 in /api/v2 by @dependabot in dexidp#2242
* build(deps): bump github.com/go-ldap/ldap/v3 from 3.4.0 to 3.4.1 by @dependabot in dexidp#2246
* build(deps): bump entgo.io/ent from 0.9.0 to 0.9.1 by @dependabot in dexidp#2249
* build(deps): bump alpine from 3.14.1 to 3.14.2 by @dependabot in dexidp#2258
* build(deps): bump google.golang.org/api from 0.54.0 to 0.55.0 by @dependabot in dexidp#2259
* build(deps): bump google.golang.org/api from 0.55.0 to 0.56.0 by @dependabot in dexidp#2262
* build(deps): bump github.com/lib/pq from 1.10.2 to 1.10.3 by @dependabot in dexidp#2263
* build(deps): bump github.com/russellhaering/goxmldsig from 1.1.0 to 1.1.1 by @dependabot in dexidp#2270
* build(deps): bump golang from 1.17.0-alpine3.14 to 1.17.1-alpine3.14 by @dependabot in dexidp#2269
* build(deps): bump google.golang.org/api from 0.56.0 to 0.57.0 by @dependabot in dexidp#2277
* build(deps): bump github.com/coreos/go-oidc/v3 from 3.0.0 to 3.1.0 by @dependabot in dexidp#2279
* build(deps): bump golang from 1.17.1-alpine3.14 to 1.17.2-alpine3.14 by @dependabot in dexidp#2292
* build(deps): bump go.etcd.io/etcd/client/pkg/v3 from 3.5.0 to 3.5.1 by @dependabot in dexidp#2298
* build(deps): bump go.etcd.io/etcd/client/v3 from 3.5.0 to 3.5.1 by @dependabot in dexidp#2299
* build(deps): bump google.golang.org/grpc from 1.40.0 to 1.41.0 by @dependabot in dexidp#2285
* build(deps): bump github.com/mattn/go-sqlite3 from 1.14.8 to 1.14.9 by @dependabot in dexidp#2302
* build(deps): bump google.golang.org/grpc from 1.40.0 to 1.41.0 in /api/v2 by @dependabot in dexidp#2286
* build(deps): bump google.golang.org/api from 0.57.0 to 0.58.0 by @dependabot in dexidp#2287
* build(deps): bump google.golang.org/api from 0.58.0 to 0.59.0 by @dependabot in dexidp#2303
* build(deps): bump google.golang.org/api from 0.59.0 to 0.60.0 by @dependabot in dexidp#2308
* build(deps): bump golang from 1.17.2-alpine3.14 to 1.17.3-alpine3.14 by @dependabot in dexidp#2317
* build(deps): bump github.com/lib/pq from 1.10.3 to 1.10.4 by @dependabot in dexidp#2320
* build(deps): bump alpine from 3.14.2 to 3.14.3 by @dependabot in dexidp#2325
* build(deps): bump alpine from 3.14.3 to 3.15.0 by @dependabot in dexidp#2336
* build(deps): bump google.golang.org/api from 0.60.0 to 0.61.0 by @dependabot in dexidp#2341
* build(deps): bump golang from 1.17.3-alpine3.14 to 1.17.4-alpine3.14 by @dependabot in dexidp#2345
* build(deps): bump google.golang.org/api from 0.61.0 to 0.62.0 by @dependabot in dexidp#2348
* build(deps): bump golang from 1.17.4-alpine3.14 to 1.17.5-alpine3.14 by @dependabot in dexidp#2349
* build(deps): bump github.com/spf13/cobra from 1.2.1 to 1.3.0 by @dependabot in dexidp#2354
* build(deps): bump google.golang.org/api from 0.62.0 to 0.63.0 by @dependabot in dexidp#2353
* build(deps): bump google.golang.org/grpc from 1.42.0 to 1.43.0 by @dependabot in dexidp#2355
* build(deps): bump google.golang.org/grpc from 1.42.0 to 1.43.0 in /api/v2 by @dependabot in dexidp#2356
* build(deps): bump github.com/mattn/go-sqlite3 from 1.14.9 to 1.14.10 by @dependabot in dexidp#2362
* build(deps): bump golang from 1.17.5-alpine3.14 to 1.17.6-alpine3.14 by @dependabot in dexidp#2363
* build(deps): bump google.golang.org/api from 0.63.0 to 0.64.0 by @dependabot in dexidp#2364
* build(deps): bump google.golang.org/api from 0.64.0 to 0.65.0 by @dependabot in dexidp#2368
* build(deps): bump github.com/prometheus/client_golang from 1.11.0 to 1.12.0 by @dependabot in dexidp#2380
* build(deps): bump google.golang.org/grpc from 1.43.0 to 1.44.0 by @dependabot in dexidp#2384
* build(deps): bump google.golang.org/grpc from 1.43.0 to 1.44.0 in /api/v2 by @dependabot in dexidp#2385
* build(deps): bump go.etcd.io/etcd/client/v3 from 3.5.1 to 3.5.2 by @dependabot in dexidp#2395
* build(deps): bump aquasecurity/trivy-action from 0.2.1 to 0.2.2 by @dependabot in dexidp#2398
* build(deps): bump google.golang.org/api from 0.65.0 to 0.67.0 by @dependabot in dexidp#2399
* build(deps): bump github.com/prometheus/client_golang from 1.12.0 to 1.12.1 by @dependabot in dexidp#2393

## New Contributors
* @rdimitrov made their first contribution in dexidp#2232
* @Juneezee made their first contribution in dexidp#2278
* @ariary made their first contribution in dexidp#2265
* @snuggie12 made their first contribution in dexidp#2268
* @enj made their first contribution in dexidp#2234
* @copperyp made their first contribution in dexidp#2305
* @iam-veeramalla made their first contribution in dexidp#2337
* @bobcallaway made their first contribution in dexidp#2374
* @Happy2C0de made their first contribution in dexidp#2233
* @rahulchheda made their first contribution in dexidp#2390
* @ankeesler made their first contribution in dexidp#2378

**Full Changelog**: dexidp/dex@v2.30.0...v2.31.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants