Skip to content

chore: Add nix shell for simple development setup #3399

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

Merged
merged 7 commits into from
Aug 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions cli/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ var errInvalidTimeFormat = xerrors.New("Start time must be in the format hh:mm[a
var errUnsupportedTimezone = xerrors.New("The location you provided looks like a timezone. Check https://ipinfo.io for your location.")

// durationDisplay formats a duration for easier display:
// * Durations of 24 hours or greater are displays as Xd
// * Durations less than 1 minute are displayed as <1m
// * Duration is truncated to the nearest minute
// * Empty minutes and seconds are truncated
// * The returned string is the absolute value. Use sign()
// - Durations of 24 hours or greater are displays as Xd
// - Durations less than 1 minute are displayed as <1m
// - Duration is truncated to the nearest minute
// - Empty minutes and seconds are truncated
// - The returned string is the absolute value. Use sign()
// if you need to indicate if the duration is positive or
// negative.
func durationDisplay(d time.Duration) string {
Expand Down Expand Up @@ -114,7 +114,7 @@ func parseCLISchedule(parts ...string) (*schedule.Schedule, error) {
if loc == nil {
loc, err = tz.TimezoneIANA()
if err != nil {
return nil, xerrors.Errorf("Could not automatically determine your timezone")
loc = time.UTC
}
}

Expand Down
1 change: 0 additions & 1 deletion coderd/util/tz/tz_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ func TimezoneIANA() (*time.Location, error) {
if err != nil {
return nil, xerrors.Errorf("read location of %s: %w", etcLocaltime, err)
}

stripped := strings.Replace(lp, zoneInfoPath, "", -1)
stripped = strings.TrimPrefix(stripped, string(filepath.Separator))
loc, err = time.LoadLocation(stripped)
Expand Down
6 changes: 6 additions & 0 deletions coderd/util/tz/tz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package tz_test

import (
"os"
"runtime"
"testing"

"github.com/stretchr/testify/assert"
Expand All @@ -25,6 +26,11 @@ func Test_TimezoneIANA(t *testing.T) {

//nolint:paralleltest // UnsetEnv
t.Run("NoEnv", func(t *testing.T) {
_, err := os.Stat("/etc/localtime")
if runtime.GOOS == "linux" && err != nil {
// Not all Linux operating systems are guaranteed to have localtime!
t.Skip("localtime doesn't exist!")
}
oldEnv, found := os.LookupEnv("TZ")
if found {
require.NoError(t, os.Unsetenv("TZ"))
Expand Down
3 changes: 3 additions & 0 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

Coder requires Go 1.18+, Node 14+, and GNU Make.

> **Note**:
> Use [Nix](https://nix.dev/) for a one-command setup: `nix-shell`

### Development workflow

Use the following `make` commands and scripts in development:
Expand Down
94 changes: 94 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
description = "Development environments on your infrastructure";

inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
drpc.url = "github:storj/drpc/v0.0.32";
};

outputs = { self, nixpkgs, flake-utils, drpc }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
formatter = pkgs.nixpkgs-fmt;
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
bat
drpc.defaultPackage.${system}
exa
git
go-migrate
go_1_19
golangci-lint
gopls
gotestsum
helm
jq
nfpm
nodePackages.typescript
nodePackages.typescript-language-server
nodejs
openssh
openssl
postgresql
protoc-gen-go
ripgrep
shellcheck
shfmt
sqlc
terraform
typos
yarn
zip
zstd
];
};
}
);
}
3 changes: 3 additions & 0 deletions provisionersdk/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ func TestAgentScript(t *testing.T) {
}
script = strings.ReplaceAll(script, "${ACCESS_URL}", srvURL.String()+"/")
script = strings.ReplaceAll(script, "${AUTH_TYPE}", "token")
// In certain distributions "echo" is a part of coreutils, and determines
// it's functionality based on the exec path name.
script = strings.ReplaceAll(script, "BINARY_NAME=coder", "BINARY_NAME=echo")
// This is intentionally ran in single quotes to mimic how a customer may
// embed our script. Our scripts should not include any single quotes.
// nolint:gosec
Expand Down
4 changes: 2 additions & 2 deletions scripts/build_go_slim.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ done
# Check dependencies
dependencies go
if [[ $compress != 0 ]]; then
dependencies shasum tar zstd
dependencies openssl tar zstd

if [[ $compress != [0-9]* ]] || [[ $compress -gt 22 ]] || [[ $compress -lt 1 ]]; then
error "Invalid value for compress, must in in the range of [1, 22]"
Expand Down Expand Up @@ -114,7 +114,7 @@ if [[ $compress != 0 ]]; then
sha_file=coder.sha1
sha_dest="$dest_dir/$sha_file"
log "--- Generating SHA1 for coder-slim binaries ($sha_dest)"
shasum -b -a 1 coder-* | tee $sha_file
openssl dgst -r -sha1 coder-* | tee $sha_file
echo "$sha_dest"
log
log
Expand Down
10 changes: 10 additions & 0 deletions shell.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
(import
(
fetchTarball {
url = "https://github.com/edolstra/flake-compat/archive/b4a34015c698c7793d592d66adbab377907a2be8.tar.gz";
sha256 = "1qc703yg0babixi6wshn5wm2kgl5y1drcswgszh4xxzbrwkk9sv7";
}
)
{
src = ./.;
}).shellNix