]> git.apps.os.sepia.ceph.com Git - fscrypt.git/commitdiff
cmd/fscrypt: Initial stub program and docs
authorJoe Richey <joerichey@google.com>
Fri, 31 Mar 2017 17:14:20 +0000 (10:14 -0700)
committerJoe Richey joerichey@google.com <joerichey@google.com>
Tue, 2 May 2017 20:39:17 +0000 (13:39 -0700)
This commit adds in a stub fscrypt program. The binary just tells the
time and the tests do nothing, but the Makefile will build them! This
commit also adds documentation to the README that explains how to get,
build, run, test, format, lint, and install the code.

Also note that the executable is now in the cmd/fscrypt directory. The
library implementing the core functionality will be at the root. This
is essentially point 2 of https://medium.com/@benbjohnson/structuring-applications-in-go-3b04be4ff091

Change-Id: Ib7bd782e458bdf3db456beb978be4c75b4734561

Makefile [new file with mode: 0644]
README.md
cmd/fscrypt/fscrypt.go [new file with mode: 0644]
cmd/fscrypt/fscrypt_test.go [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..a174471
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,57 @@
+# Makefile for fscrypt
+#
+# Copyright 2017 Google Inc.
+# Author: Joe Richey (joerichey@google.com)
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+NAME = fscrypt
+BUILD_DIR = build
+CFLAGS += -O2 -Wall
+
+CMD_DIR = $(NAME)/cmd/$(NAME)
+
+# So we don't have to put our flags in each go file. This also lets the caller
+# of the makefile change the build flags in the normal manner:
+#      make fscrypt "LDFLAGS += -static"
+export CGO_CFLAGS = $(CFLAGS)
+ifdef LDFLAGS
+       GOFLAGS += --ldflags '-extldflags "$(LDFLAGS)"'
+endif
+
+.PHONY: default all $(NAME) go lint format install clean
+
+default: $(NAME)
+all: format lint go $(NAME)
+
+$(NAME):
+       @mkdir -p $(BUILD_DIR)
+       go build $(GOFLAGS) -o $(BUILD_DIR)/$(NAME) $(CMD_DIR)
+
+# Makes sure go files build and tests pass
+go:
+       go build $(GOFLAGS) -o /dev/null ./...
+       go test $(GOFLAGS) ./...
+
+lint:
+       @golint ./... || true
+       @go vet ./...
+
+format:
+       go fmt ./...
+
+install:
+       go install $(GOFLAGS) ./...
+
+clean:
+       rm -rf $(BUILD_DIR)
index c6bfa6a995f190e07a2f2083c2d7cf3dda8598ca..37497a475d9afeca6a8c108a7e0518454a181117 100644 (file)
--- a/README.md
+++ b/README.md
@@ -55,18 +55,31 @@ background. `fscrypt` has a [design document](https://goo.gl/55cCrI) that
 discusses many of the higher level design choices that were made.
 
 Specifically, `fscrypt` contains the following functionality:
-*   TODO
+*   Telling the time (but this is a stub program)
 
 ## Building
 
-<!-- TODO: Change git clone URL before public release -->
-Get the source by running `git clone [REDACTED] fscrypt`.
-You need to [setup your `GOPATH`](https://golang.org/doc/code.html#GOPATH) and
-clone the repository into `$GOPATH/src/fscrypt`.
+`fscrypt` is written in Go, so to build the program you will need to
+[setup Go](https://golang.org/doc/install),
+[setup your `GOPATH`](https://golang.org/doc/code.html#GOPATH), and clone the
+repository into the correct location by running
+```shell <!-- TODO: Change git clone URL before public release -->
+git clone [REDACTED] $GOPATH/src/fscrypt
+```
+You will also want to add `$GOPATH/bin` to your `$PATH`.
+
+Once this is setup, you can run `make fscrypt` to build the executable in
+`build/fscrypt`. The only other build dependencies are `make` and a C compiler.
+Pass `"LDFLAGS += -static"` to `make` to get a static executable. If a Go
+project contains C code, the go compiler produces a dynamically linked binary by
+default.
 
 ## Running and Installing
 
-TODO
+`fscrypt` is a standalone binary, and it currently has no runtime dependencies.
+Installing it just requires placing it in your path or running `make install`.
+Change `$GOBIN` to change the install location of `fscrypt`; by default it is
+installed to `$GOPATH/bin`.
 
 ## Example Usage
 
@@ -74,7 +87,21 @@ TODO
 
 ## Contributing
 
-TODO
+If you are making changes to the `fscrypt` component, you will need the
+following additional commands:
+*   `make go` - Checks that all the go files build and tests pass.
+*   `make format` - Formats all of the go code.
+*   `make lint` - Checks the code for style errors, requires
+    [`golint`](https://github.com/golang/lint) to be installed.
+*   `make all` - Does the above three commands and builds `fscrypt`.
+
+Make sure that `$GOPATH/bin` is in you `$PATH`. All the above dependencies can
+be installed with:
+```bash
+> go get -u github.com/golang/lint/golint
+```
+
+These commands should be run before submitting any changes.
 
 ## Known Issues
 
diff --git a/cmd/fscrypt/fscrypt.go b/cmd/fscrypt/fscrypt.go
new file mode 100644 (file)
index 0000000..191d4fb
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * fscrypt.go - Stub file which currently just prints out the time
+ *
+ * Copyright 2017 Google Inc.
+ * Author: Joe Richey (joerichey@google.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+fscrypt is a comprehensive command line tool for managing filesystem encryption.
+
+It currently just tells the time.
+*/
+package main
+
+import (
+       "fmt"
+       "time"
+)
+
+func main() {
+       fmt.Printf("The time is now: %v\n", time.Now())
+}
diff --git a/cmd/fscrypt/fscrypt_test.go b/cmd/fscrypt/fscrypt_test.go
new file mode 100644 (file)
index 0000000..cbeacdf
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * fscrypt_test.go - Stub test file that has one test that always passes.
+ *
+ * Copyright 2017 Google Inc.
+ * Author: Joe Richey (joerichey@google.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package main
+
+import (
+       "testing"
+)
+
+func TestTrivial(t *testing.T) {}