dubeejw closed pull request #184: Create tarball for Nginx container in
OpenWhisk as part of release deploy script
URL: https://github.com/apache/incubator-openwhisk-cli/pull/184
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/.gitignore b/.gitignore
index fa48daa7..c1d724d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,16 @@
javascript/
wsk
+wsk.exe
scripts
Godeps/_workspace
+
+# IDE-related exclusions
.idea/
*.iml
-.gradle
+
+# Gradle build working directories
+/.gradle/
+/.gogradle/
+/build/
+/release/
+/vendor/
diff --git a/.travis.yml b/.travis.yml
index 85df8539..d6da2dd0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,30 +8,36 @@ matrix:
sudo: required
group: deprecated-2017Q3
go: 1.8
- env:
- secure:
"Br0fD9CAKm8gqyEuwmltNJd4dGJCxPpj6feugHlO+CFFwfE/+kJKkpTlsDuRfrUzUDlWiETNPf0XGSjvPFqZExnLCE9XQh2+XF6u+S3YBWfM+rbbyRVAK6BlTwmt0u3jRJ2JP7spedTGZA+qfIWI+UkwoOexo7NcqtMPLahiZzheaaad8y3J+crHQCrB/kPrhLqKVMEOkIbveFdfV2QLfCOWgqP8e1LGZhPZ2N4QcNo0iB5uI4ZyYszTZDniXFKxz7kBs4tl4ZQDqRHqL02qKPsjbvjrZp83ql+PbC2dpgXi9YpaDuBEqKKX1rTQP5ppcwbobot5U3ItHWzpXbLCdsWxvbde/0enjMmOF1wwl71hPYIf7PkQmNAWXRtL2Z1TguO/dKCeXBLDER4YDQ79GYpikAMqnrRLou4rsyZrNUzg8aHbELzAHppDSpqEJN8ymGgWgmWBT8yPaWVwN5CjPFOxLPrVEObcwcNSGOcOvtmUGCnXKSZminNZUjz5QfWqpA+LYCUIbeOI2X2D+iQWklWONaU2A+PcNLaaegwwj4K+9ZlU08Ed8Ud5ZGhjN9s72OtoFPdSHAyBgf/qxIdnTzmmE+SQ90mDtG3VqjHy28Ix7cIGqaIEC8shFb0kKHqQ7AVkLPm0bsh2fbbYu/5YVpXHfxlKWfOLBV14bHUq3v0="
services: docker
+env:
+ secure:
"Br0fD9CAKm8gqyEuwmltNJd4dGJCxPpj6feugHlO+CFFwfE/+kJKkpTlsDuRfrUzUDlWiETNPf0XGSjvPFqZExnLCE9XQh2+XF6u+S3YBWfM+rbbyRVAK6BlTwmt0u3jRJ2JP7spedTGZA+qfIWI+UkwoOexo7NcqtMPLahiZzheaaad8y3J+crHQCrB/kPrhLqKVMEOkIbveFdfV2QLfCOWgqP8e1LGZhPZ2N4QcNo0iB5uI4ZyYszTZDniXFKxz7kBs4tl4ZQDqRHqL02qKPsjbvjrZp83ql+PbC2dpgXi9YpaDuBEqKKX1rTQP5ppcwbobot5U3ItHWzpXbLCdsWxvbde/0enjMmOF1wwl71hPYIf7PkQmNAWXRtL2Z1TguO/dKCeXBLDER4YDQ79GYpikAMqnrRLou4rsyZrNUzg8aHbELzAHppDSpqEJN8ymGgWgmWBT8yPaWVwN5CjPFOxLPrVEObcwcNSGOcOvtmUGCnXKSZminNZUjz5QfWqpA+LYCUIbeOI2X2D+iQWklWONaU2A+PcNLaaegwwj4K+9ZlU08Ed8Ud5ZGhjN9s72OtoFPdSHAyBgf/qxIdnTzmmE+SQ90mDtG3VqjHy28Ix7cIGqaIEC8shFb0kKHqQ7AVkLPm0bsh2fbbYu/5YVpXHfxlKWfOLBV14bHUq3v0="
+ global:
+ - build_file_name=wsk
+ - zip_file_name=OpenWhisk_CLI
git:
depth: 3
before_install:
- - pip install --upgrade pip setuptools
+ - export DEPLOY_BUILD_READY=false
install:
- - ./tools/travis/setupscan.sh
- - export DEPLOY_BUILD_READY=false
- - go get -u github.com/golang/lint/golint
- - go get -u github.com/stretchr/testify
- - go get -u github.com/spf13/viper
- - go get -u github.com/tools/godep
+ - cd $TRAVIS_BUILD_DIR/..
+ - pip install --upgrade pip setuptools
+ - git clone https://github.com/jonpspri/gogradle.git
+ - cd gogradle && ./gradlew --console=plain assemble
+
+before_script:
+ - cd $TRAVIS_BUILD_DIR/..
+ - git clone https://github.com/apache/incubator-openwhisk-utilities.git
+ - git clone https://github.com/apache/incubator-openwhisk.git
+ - ./incubator-openwhisk/tools/travis/setup.sh
script:
+ - cd $TRAVIS_BUILD_DIR
+ - ./gradlew --console=plain release
- ./tools/travis/test_openwhisk.sh
-after_script:
- - make clean
-
after_success:
- DEPLOY_BUILD_READY=true
# This tag is automatically generated for the latest merged commit in master
branch.
@@ -45,13 +51,7 @@ after_success:
fi
before_deploy:
- - go get github.com/inconshreveable/mousetrap
- - go get github.com/mattn/go-isatty
- - export build_file_name=wsk
- - export zip_file_name=OpenWhisk_CLI
- - chmod +x tools/travis/build_tag_releases.sh
- - ./tools/travis/build_tag_releases.sh $build_file_name $zip_file_name
- - export RELEASE_PKG_FILE=$(ls $zip_file_name-*.*)
+ - export RELEASE_PKG_FILE=$(cd './release' && ls "${zip_file_name}-*.tgz"
"${zip_file_name}-*.zip")
- echo "Deploying $RELEASE_PKG_FILE to GitHub releases."
deploy:
@@ -59,7 +59,9 @@ deploy:
api_key:
secure:
Yh1aYiM/qIWkPMSVjGUq1g9TjpACjavQ00QAqp4oqghNZc6xBcmdzsfD2VjzVPHleNI1FIZyjJ1x6laRfWBzRkAcJcjUHXA2bO/V0jqePVmgVm75WwTZ/9EaWIJeAg5CQMm5DGS28Yhc60C0ut3ZzKMWGTiKb73UADXPTGd/tjndxjfksX/THXPuInKB9QZesmluBAC2am/x/6J311WA2wqe0p1+9JFwMr8XwIcwzCwgi/d9CFpS1RnVpLE/ORSgmN/dFbZ7A/qVbx377QoxKiEB0jmUwi13f7REFAw18JdgzbQCH3X4HNu9pCJwHEAq3lP2CfmHbAXcViBeji/Xh9PPJVV9TYqO+uT8oPxCPJND1A/3O2xJ8LyZ/FP2bWqG/Ds/8SZCvxfOR/X77opUeZ4qAp7HJMVCsFi3TsnmzxCe0BOxCppVJLhoSZ2rOAPJi9mKgS/Z/VA5VhNNmnPtkReEWK4vT9h3/iCwv9anvC0RKeLckSHpCm5C5otNXtV4L990fL5L5krMatxynHnCmmhYeLg/Ns+5ncax58Y8hmhnhzTqbPGHpe79bJRfvwRI9lboq7kEj4x5O/M16TKRfQ8ZU5UHvrCPdlTfT7NUXRGZkvWX20X6Ta/DRROTF+xZGiq7da3Oi+xyNDx/LmymfR49thjzgIPXVZolknGYQ9Q=
file_glob: true
- file: ${zip_file_name}-*.*
+ file:
+ - release/${zip_file_name}-*.tgz
+ - release/${zip_file_name}-*.zip
overwrite: true
skip_cleanup: true
on:
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index bedb6f70..00000000
--- a/Dockerfile
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM golang:1.8
-
-# Install zip
-RUN apt-get -y update && \
- apt-get -y install zip
-
-ENV GOPATH=/
-
-# Download and install tools
-RUN echo "Installing the godep tool"
-RUN go get github.com/tools/godep
-
-ADD . /src/github.com/apache/incubator-openwhisk-cli
-
-# Load all of the dependencies from the previously generated/saved godep
generated godeps.json file
-RUN echo "Restoring Go dependencies"
-RUN cd /src/github.com/apache/incubator-openwhisk-cli && /bin/godep restore -v
-
-# wsk binary will be placed under a build folder
-RUN mkdir /src/github.com/apache/incubator-openwhisk-cli/build
-
-ARG CLI_OS
-ARG CLI_ARCH
-
-# Build the Go wsk CLI binaries and compress resultant binaries
-RUN chmod +x /src/github.com/apache/incubator-openwhisk-cli/build.sh
-RUN cd /src/github.com/apache/incubator-openwhisk-cli && ./build.sh
diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
deleted file mode 100644
index dc56ddad..00000000
--- a/Godeps/Godeps.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "ImportPath": "github.com/apache/incubator-openwhisk-cli",
- "GoVersion": "go1.",
- "GodepVersion": "v74",
- "Deps": [
- {
- "ImportPath": "github.com/cloudfoundry/jibber_jabber",
- "Rev": "bcc4c8345a21301bf47c032ff42dd1aae2fe3027"
- },
- {
- "ImportPath": "github.com/fatih/color",
- "Comment": "v0.1-19-g87d4004",
- "Rev": "87d4004f2ab62d0d255e0a38f1680aa534549fe3"
- },
- {
- "ImportPath": "github.com/google/go-querystring/query",
- "Rev": "9235644dd9e52eeae6fa48efd539fdc351a0af53"
- },
- {
- "ImportPath": "github.com/hokaccha/go-prettyjson",
- "Rev": "f75235bd99dad4e98ff360db8372d5c0ef1d054a"
- },
- {
- "ImportPath": "github.com/inconshreveable/mousetrap",
- "Rev": "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
- },
- {
- "ImportPath": "github.com/mattn/go-colorable",
- "Comment": "v0.0.6-9-gd228849",
- "Rev": "d228849504861217f796da67fae4f6e347643f15"
- },
- {
- "ImportPath": "github.com/mattn/go-isatty",
- "Rev": "66b8e73f3f5cda9f96b69efd03dd3d7fc4a5cdb8"
- },
- {
- "ImportPath": "github.com/mitchellh/go-homedir",
- "Rev": "1111e456ffea841564ac0fa5f69c26ef44dafec9"
- },
- {
- "ImportPath": "github.com/nicksnyder/go-i18n/i18n/...",
- "Comment": "v1.4.0",
- "Rev": "37e5c2de3e03e4b82693e3fcb4a6aa2cc4eb07e3"
- },
- {
- "ImportPath": "github.com/spf13/cobra",
- "Rev": "1238ba19d24b0b9ceee2094e1cb31947d45c3e86"
- },
- {
- "ImportPath": "github.com/spf13/pflag",
- "Rev": "367864438f1b1a3c7db4da06a2f55b144e6784e0"
- },
- {
- "ImportPath": "golang.org/x/sys/unix",
- "Rev": "7f918dd405547ecb864d14a8ecbbfe205b5f930f"
- },
- {
- "ImportPath": "gopkg.in/yaml.v2",
- "Rev": "cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b"
- },
- {
- "ImportPath": "github.com/ghodss/yaml",
- "Comment": "v1.0.0",
- "Rev": "0ca9ea5df5451ffdf184b4428c902747c2c11cd7"
- },
- {
- "ImportPath":
"github.com/apache/incubator-openwhisk-client-go/whisk",
- "Rev": "ba3bbee442357a239667ef6de378d5b7d33e0ceb"
- }
- ]
-}
diff --git a/Godeps/Readme b/Godeps/Readme
deleted file mode 100644
index 4cdaa53d..00000000
--- a/Godeps/Readme
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory tree is generated automatically by godep.
-
-Please do not edit.
-
-See https://github.com/tools/godep for more information.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 5425c776..00000000
--- a/Makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-SOURCEDIR=.
-
-SOURCES := $(shell find $(SOURCEDIR) -name '*.go')
-BINARY=wsk
-
-VERSION=1.0.0
-
-BUILD=`git rev-parse HEAD`
-
-deps:
- @echo "Installing dependencies"
- godep restore -v
-
-LDFLAGS=-ldflags "-X main.CLI_BUILD_TIME=`date -u '+%Y-%m-%dT%H:%M:%S%:z'`"
-
-updatedeps:
- @echo "Updating all dependencies"
- @go get -d -u -f -fix -t ./...
-
-# Build the project
-build: deps
- go build ${LDFLAGS} -o ${BINARY}
-
-test:
- @echo "Launch the unit tests."
- go test ./... -tags=unit
-
-native_test:
- @echo "Launch the native tests for the commands."
- go test -v ./... -tags=native
-
-# Run the integration test against OpenWhisk
-integration_test:
- @echo "Launch the integration tests."
- go test -v ./... -tags=integration
-
-format:
- @echo "Formatting"
- go fmt ./...
-
-lint: format
- @echo "Linting"
- golint .
-
-install:
- go install
-
-# Cleans our project: deletes binaries
-clean:
- if [ -f ${BINARY} ] ; then rm ${BINARY}; fi
-
-.PHONY: clean install
diff --git a/README.md b/README.md
index b2bba772..83f566e5 100644
--- a/README.md
+++ b/README.md
@@ -4,110 +4,161 @@
# Disclaimer
-This project is currently on an experimental stage. We periodically
synchronize the source code and test cases of this
-repository with the [CLI
folder](https://github.com/apache/incubator-openwhisk/tree/master/tools/cli/go-whisk-cli)
and the [test
folder](https://github.com/apache/incubator-openwhisk/tree/master/tests) in
OpenWhisk. The framework of test cases is under construction
-for this repository. Please contribute to the [CLI
folder](https://github.com/apache/incubator-openwhisk/tree/master/tools/cli/go-whisk-cli)
in OpenWhisk for any CLI changes, before we officially announce the separation
+This project is currently on an experimental stage. We periodically synchronize
+the source code and test cases of this repository with the [CLI
+folder](https://github.com/apache/incubator-openwhisk/tree/master/tools/cli/go-whisk-cli)
+and the [test
+folder](https://github.com/apache/incubator-openwhisk/tree/master/tests) in
+OpenWhisk. The framework of test cases is under construction for this
+repository. Please contribute to the [CLI
+folder](https://github.com/apache/incubator-openwhisk/tree/master/tools/cli/go-whisk-cli)
+in OpenWhisk for any CLI changes, before we officially announce the separation
of OpenWhisk CLI from OpenWhisk.
+The OpenWhisk Command Line Interface (OpenWhisk CLI) is a unified tool that
+provides a consistent interface to interact with OpenWhisk services. With this
+tool to download and configure, you are able to manage OpenWhisk services from
+the command line and automate them through scripts.
-The OpenWhisk Command Line Interface (OpenWhisk CLI) is a unified tool that
provides a consistent interface to
-interact with OpenWhisk services. With this tool to download and configure,
you are able to manage OpenWhisk services
-from the command line and automate them through scripts.
+# Where to download the binary of OpenWhisk CLI
+The OpenWhisk CLI is available on the release page: [click here to
+download](https://github.com/apache/incubator-openwhisk-cli/releases). We
+currently have binaries available for Linux, Mac OS and Windows under i386 and
+amd64 architectures. Linux versions are also available under Linux on Z, Power
+and 64-bit ARM architectures. You can download the binary, which fits your
+local environment.
-# Where to download the binary of OpenWhisk CLI
+# How to build the binary locally
-The OpenWhisk CLI is available on the release page: [click here to
download](https://github.com/apache/incubator-openwhisk-cli/releases).
-We currently have binaries available for Linux, Mac OS and windows under amd64
architecture. You can download the
-binary, which fits your local environment.
+The OpenWhisk CLI is written in the Go language. You have two options to build
+the binary locally:
+1. Build using the packaged Gradle scripts (including the 'gogradle' plugin),
+now the preferred build method.
+2. Compile in your local Go environment,
-# How to build the binary locally
+## Build the binary with Gradle
-You can also choose to build the binaries locally from the source code with Go
tool.
+**Note:** For those who may have used the Gradle build previously, it has been
+re-engineered to no longer required Docker or Go to be pre-installed on your
+system. Using the [gogradle](https://github.com/gogradle/gogradle) plugin,
+Gradle now uses a prexisting Go environment to build if it can be located, or
+downloads and installs an environment within the build directory.
-Make sure that you have Go installed [installing
Go](https://golang.org/doc/install), and `$GOPATH` is defined [Go development
environment](https://golang.org/doc/code.html).
+To build with Gradle, open an terminal, go to the directory of OpenWhisk CLI
+home directory, and build the binary via the following command under Linux or
+Mac:
+
+```
+$ ./gradlew compile -PnativeCompile
+```
-Then download the source code of the OpenWhisk CLI and the dependencies by
typing:
+or run the following command for Windows:
```
-$ cd $GOPATH
-$ go get github.com/apache/incubator-openwhisk-cli
+$ ./gradlew.bat compile -PnativeCompile
```
+After the build, you can find the binary `wsk` or `wsk.exe` in the build folder
+under the OpenWhisk CLI home directory. In addition, it is also available under
+the folder `build/<os>-<architecture>/`. For example, if your local operating
+system is Mac, and the CPU architecture is amd64, the binary can be found at
+`build/mac-amd64/wsk` and `build/mac`.
+
+If you would like to build the binaries available for all the operating systems
+and architectures, run the following command:
+
+```
+$ ./gradlew compile
+```
-## Build the binary with Go
+The build script will place the binaries into the folder `build/<os>-<cpu
arc>/`
+for each operating system and CPU architecture pair. The build supports both
+amd64 and 386 for Linux, Mac and Windows operating systems, as well as Power,
+64-bit ARM, and S390X architectures for Linux.
-Open an terminal, go to the directory of OpenWhisk CLI home directory, and
build the binary via the following command:
+A binary compatible with the local architecture will be placed at `build/wsk`
+(`build\wsk.exe` on Windows).
+
+To specify a build for specific architectures, you can provide a comma or
+space-delimited list of hyphenated os-architecture pairs, like this:
```
-$ go build -o wsk
+$ ./gradlew compile -PbuildPlatforms=linux-amd64,mac-amd64,windows-amd64
```
-If you would like to build the binary for a specific operating system, you may
add the arguments GOOS and
-GOARCH into the Go build command. Since it is only applicable under amd64
architecture, you have to set GOARCH
-to amd64. GOOS can be set to "linux" "darwin" or "windows".
+The build library understands most representations of most Operating Systems.
-For example, run the following command to build the binary for Linux:
+Tests can be run using the Gradle script as well:
```
-$ GOOS=linux GOARCH=amd64 go build -o wsk
+$ ./gradlew goTests -PgoTags=unit
+$ ./gradlew goTests -PgoTags=native
```
-If it is executed successfully, you can find your binary `wsk` directly under
OpenWhisk CLI home directory.
+Integration tests are best left to the Travis build as they depend on a fully
+functional OpenWhisk environment.
-## Build the binary with Docker and Gradle
+## Compile the binary using your local Go environment
-This is the second choice for you to build the binary. Make sure that you have
Docker and gradle on your machine:
-[installing Docker](https://docs.docker.com/engine/installation/) and
[installing Gradle](https://gradle.org/install) for your local machine.
+Make sure that you have Go installed [installing
+Go](https://golang.org/doc/install), and `$GOPATH` is defined [Go development
+environment](https://golang.org/doc/code.html).
-After that, open an terminal, go to the directory of OpenWhisk CLI home
directory, and
-build the binary via the following command under Linux or Mac:
+Then download the source code of the OpenWhisk CLI and the dependencies by
+typing:
```
-$ ./gradlew buildBinaries
+$ cd $GOPATH
+$ go get github.com/apache/incubator-openwhisk-cli
+$ cd $GOPATH/src/github.com/apache/incubator-openwhisk-cli
```
-or run the following command for Windows:
+Unfortunately, it has become necessary to lock dependencies versions to obtain
a
+clean build of wsk. To that end, it's now necessary to populate the `vendors`
+folder using the versions selected in the `build.gradle`:
```
-$ ./gradlew.bat buildBinaries
+$ ./gradlew goVendor
```
-Finally, you can find the binary `wsk` or `wsk.exe` in the bin folder under
the OpenWhisk CLI home directory. In
-addition, it is also available under the folder bin/\<os\>/\<cpu arc\>/. For
example, if your local operating system is Mac,
-and the CPU architecture is amd64, the binary and its compressed package can
also be found under bin/mac/amd64/.
+Once vendor is populated, it's possible to build the binary:
-OpenWhisk CLI(`wsk`) is produced in a Docker container during the build
process which is copied from the
-Docker container to the local file system in the following directory: bin.
This binary will be platform
-specific, it will only run on the operating system, and CPU architecture that
matches the build machine.
+```
+$ go build -o wsk
+```
+
+If you would like to build the binary for a specific operating system, you may
+add the arguments GOOS and GOARCH into the Go build command. GOOS can
+be set to "linux" "darwin" or "windows".
-If you would like to build the binaries available for all the operating
systems and architectures, run the following
-command:
+For example, run the following command to build the binary for Linux:
```
-$ ./gradlew buildBinaries -PcrossCompileCLI=true
+$ GOOS=linux GOARCH=amd64 go build -o wsk-$GOOS-$GOARCH
```
-Then, you will find the binaries and their compressed packages generated under
the folder bin/\<os\>/\<cpu arc\>/ for each
-operating system and CPU architecture pair. We supports both amd64 and 386 for
Linux, Mac and Windows operating systems.
-
+If it is executed successfully, you can find your binary `wsk` directly under
+OpenWhisk CLI home directory.
# How to use the binary
-When you have the binary, you can copy the binary to any folder, and add
folder into the system PATH in order to
-run the OpenWhisk CLI command. To get the CLI command help, execute the
following command:
+When you have the binary, you can copy the binary to any folder, and add folder
+into the system PATH in order to run the OpenWhisk CLI command. To get the CLI
+command help, execute the following command:
```
$ wsk --help
```
-To get CLI command debug information, include the -d, or --debug flag when
executing this command.
-
+To get CLI command debug information, include the -d, or --debug flag when
+executing this command.
# Continuous Integration
-In order to build OpenWhisk CLI binaries with good quality, OpenWhisk CLI uses
Travis CI as the continuous
-delivery service for Linux and Mac. OpenWhisk CLI is a Go project. Currently
Travis CI supports the environments
-of Linux and Mac, but it is not available for Windows. We will add support of
AppVeyor CI in future to run the
-test cases and build the binary for Windows.
+In order to build OpenWhisk CLI binaries with good quality, OpenWhisk CLI uses
+Travis CI as the continuous delivery service for Linux and Mac. OpenWhisk CLI
is
+a Go project. Currently Travis CI supports the environments of Linux and Mac,
+but it is not available for Windows. We will add support of AppVeyor CI in
+future to run the test cases and build the binary for Windows.
diff --git a/build.gradle b/build.gradle
index b2e471d6..3a6d6eff 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,93 +1,290 @@
-ext.dockerImageName = "cli"
-ext.dockerContainerName = "cli"
-ext.dockerBuildArgs = getDockerBuildArgs()
-apply from: 'gradle/docker.gradle'
+/*
+ Holding these lines for when gogradle 0.8.2 is released (hopefully with
+ pull #194 (https://github.com/gogradle/gogradle/pull/194)
+plugins {
+ id 'com.github.blindpirate.gogradle' version '0.8.2'
+}
+*/
-task removeBinary(type: Delete) {
- delete "${projectDir}/bin/wsk"
- delete "${projectDir}/bin/mac"
- delete "${projectDir}/bin/linux"
- delete "${projectDir}/bin/windows"
+buildscript {
+ repositories {
+ mavenLocal()
+ jcenter()
+ }
+ dependencies {
+ classpath "org.antlr:antlr4:4.6"
+ classpath group: 'com.google.inject', name: 'guice', version: '4.1.0'
+ classpath group: 'org.apache.commons', name: 'commons-lang3', version:
'3.5'
+ classpath group: 'org.apache.commons', name: 'commons-collections4',
version: '4.1'
+ classpath group: 'commons-codec', name: 'commons-codec', version:
'1.10'
+ classpath group: 'commons-io', name: 'commons-io', version: '2.5'
+ classpath 'com.google.guava:guava:20.0'
+ classpath 'com.github.zafarkhaja:java-semver:0.9.0'
+ classpath group: 'org.jsoup', name: 'jsoup', version: '1.7.2'
+ classpath group: 'com.fasterxml.jackson.core', name:
'jackson-databind', version: '2.8.5'
+ classpath group: 'com.fasterxml.jackson.core', name:
'jackson-annotations', version: '2.8.5'
+ classpath group: 'com.google.code.findbugs', name: 'annotations',
version: '3.0.1'
+ classpath group: 'com.fasterxml.jackson.dataformat', name:
'jackson-dataformat-yaml', version: '2.8.5'
+ classpath group: 'net.lingala.zip4j', name: 'zip4j', version: '1.3.2'
+ classpath group: 'org.apache.ant', name: 'ant', version: '1.10.0'
+ classpath group: 'com.typesafe.sbt', name: 'sbt-interface', version:
'0.13.13'
+ classpath group: 'com.fasterxml.jackson.dataformat', name:
'jackson-dataformat-xml', version: '2.6.3'
+ classpath group: 'org.codehaus.woodstox', name: 'woodstox-core-asl',
version: '4.4.1'
+ classpath group: 'org.jooq', name: 'joor', version: '0.9.6'
+ classpath 'com.moandjiezana.toml:toml4j:0.7.2'
+ classpath files('../gogradle/build/libs/gogradle-0.8.1.jar')
+ }
}
-task distBinary(dependsOn: [removeBinary, buildBinaries]) {
- doLast {
- run(dockerBinary + ["rm", "-f", dockerContainerName], true)
- run(dockerBinary + ["run", "--name", dockerContainerName,
dockerTaggedImageName])
+apply plugin: 'com.github.blindpirate.gogradle'
- // Copy all Go binaries from Docker into openwhisk/bin folder
- run(dockerBinary + ["cp", dockerContainerName +
- ":/src/github.com/apache/incubator-openwhisk-cli/build/.",
"${projectDir}/bin"])
+golang {
+ packagePath = 'github.com/apache/incubator-openwhisk-cli' as String
+ buildTags = (rootProject.findProperty('goTags')?:'').split(',')
+}
- run(dockerBinary + ["rm", "-f", dockerContainerName])
+dependencies {
+ golang {
+ // BEGIN - Imported from Godeps
+ build(['name':'github.com/cloudfoundry/jibber_jabber',
'version':'bcc4c8345a21301bf47c032ff42dd1aae2fe3027', 'transitive':false])
+ build(['name':'github.com/fatih/color',
'version':'87d4004f2ab62d0d255e0a38f1680aa534549fe3', 'transitive':false])
+ build(['name':'github.com/google/go-querystring/query',
'version':'9235644dd9e52eeae6fa48efd539fdc351a0af53', 'transitive':false])
+ build(['name':'github.com/hokaccha/go-prettyjson',
'version':'f75235bd99dad4e98ff360db8372d5c0ef1d054a', 'transitive':false])
+ build(['name':'github.com/inconshreveable/mousetrap',
'version':'76626ae9c91c4f2a10f34cad8ce83ea42c93bb75', 'transitive':false])
+ build(['name':'github.com/mattn/go-colorable',
'version':'d228849504861217f796da67fae4f6e347643f15', 'transitive':false])
+ build(['name':'github.com/mattn/go-isatty',
'version':'66b8e73f3f5cda9f96b69efd03dd3d7fc4a5cdb8', 'transitive':false])
+ build(['name':'github.com/mitchellh/go-homedir',
'version':'1111e456ffea841564ac0fa5f69c26ef44dafec9', 'transitive':false])
+ build(['name':'github.com/nicksnyder/go-i18n/i18n/...',
'version':'37e5c2de3e03e4b82693e3fcb4a6aa2cc4eb07e3', 'transitive':false])
+ build(['name':'github.com/spf13/cobra',
'version':'1238ba19d24b0b9ceee2094e1cb31947d45c3e86', 'transitive':false])
+ build(['name':'github.com/spf13/pflag',
'version':'367864438f1b1a3c7db4da06a2f55b144e6784e0', 'transitive':false])
+ build(['name':'golang.org/x/sys/unix',
'version':'7f918dd405547ecb864d14a8ecbbfe205b5f930f', 'transitive':false])
+ build(['name':'gopkg.in/yaml.v2',
'version':'cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b', 'transitive':false])
+ build(['name':'github.com/ghodss/yaml',
'version':'0ca9ea5df5451ffdf184b4428c902747c2c11cd7', 'transitive':false])
+
build(['name':'github.com/apache/incubator-openwhisk-client-go/whisk','version':'ba3bbee442357a239667ef6de378d5b7d33e0ceb','transitive':false])
+ // END - Imported from Godeps
+ test name:'github.com/stretchr/testify',
version:'b91bfb9ebec76498946beb6af7c0230c7cc7ba6c', transitive:false //, tag:
'v1.2.0'
+ test name:'github.com/spf13/viper',
version:'aafc9e6bc7b7bb53ddaa75a5ef49a17d6e654be5', transitive:false
+ test name:'github.com/cpuguy83/go-md2man/md2man',
version:'1d903dcb749992f3741d744c0f8376b4bd7eb3e1', transitive:false //,
tag:'v1.0.7'
+ test name:'github.com/davecgh/go-spew/spew',
version:'346938d642f2ec3594ed81d874461961cd0faa76', transitive:false //,
tag:'v1.1.0'
+ test name:'github.com/pmezard/go-difflib/difflib',
version:'792786c7400a136282c1664665ae0a8db921c6c2', transitive:false
}
}
-task dumpOSInfo {
- doLast {
- println "os.name = "+getOsName()
- println "os.arch = "+getOsArch()
- println "go.name = "+mapOsNameToGoName(getOsName())
- println "go.arch = "+mapOsArchToGoArch(getOsArch())
+/*
+ The OpenWhiskPlatform class is a utility class to make the rest of what
+ happens with platforms a bit more understandable. A "Platform" is a tuple
+ of an operating system and a processor. Currently, the OpenWhisk CLI
+ supports three OS's: Linux, Mac/Darwin, and Windows. It supports x86
+ (32-bit or 64-bit) on all OS's. On Linux, it also support System Z
(s390x),
+ PowerPC (ppc64le), and ARM (32-bit and 64-bit) architectures.
+
+ Different contexts use different codings to refer to these architectures --
+ the class attempts to provide and interpret all needed codings. Internal
+ storage is in "GO" format:
+
+ OS: linux, darwin, windows
+ Arch: 386, amd64, s390x, ppc64le, arm
+
+ TODO - It may be appropriate to refactor into a general purpose Platform
+ class for all builds, then to extend with specifics needed for
+ the OpenWhisk CLI build.
+ */
+class OpenWhiskPlatform {
+ String goOs
+ String goArch
+
+ /*
+ The 'zipFileName' property is the root file name to use for archives.
+ */
+ static String zipFileName
+
+ /*
+ Create a platform for the local platform
+ */
+ OpenWhiskPlatform() {
+ this(System.properties['os.name'], System.properties['os.arch'])
+ }
+
+ OpenWhiskPlatform(String platformSpec) {
+ this(*platformSpec.split('-'))
+ }
+
+ OpenWhiskPlatform(String inOs, String inArch) {
+ goOs=inOs.toLowerCase()
+ .replaceAll(~/^mac.*$/,'darwin')
+ .replaceAll(~/^.*n[ui]x.*$/,'linux')
+ goArch=inArch.toLowerCase()
+ .replaceAll('x86_64','amd64')
+ .replaceAll('i386','386')
+ .replaceAll('x86_32','386')
}
-}
-task copyCLIShortcut(type: Copy, dependsOn: [distBinary, dumpOSInfo]) {
- String go_osname = mapOsNameToGoName(getOsName())
- String go_osarch = mapOsArchToGoArch(getOsArch())
- String from_path_wsk = "${projectDir}/bin/${go_osname}/${go_osarch}/wsk"
- String to_path_dir = "${projectDir}/bin"
+ /**
+ * Return the Openwhisk OS for this Platform
+ */
+ String getOwOs() {
+ ((goOs == 'darwin') ? 'mac' : goOs)
+ }
+
+ String getGoPlatform() {
+ "${goOs}-${goArch}"
+ }
+
+ /*
+ Everything below here is specific to the CLI build and could be
+ factored out into a subclass.
+ */
+ String getArchiveDirName() {
+ "${this.owOs}/${goArch}"
+ }
- from from_path_wsk
- into to_path_dir
+ String getArchiveFileName() {
+ String suffix
+ switch (goArch) {
+ case "386": suffix = '-32bit'; break;
+ case "amd64": suffix = ''; break;
+ default: suffix = "-${goArch}"; break;
+ }
+ String archivetype = (goOs == 'linux') ? 'tgz' : 'zip'
+ "${zipFileName}-${this.owOs}${suffix}.${archivetype}"
+ }
}
-pushImage.finalizedBy copyCLIShortcut
+/*
+ Configuration of OpenWhisk Platform behavior based on environment and
defaults
+ */
+OpenWhiskPlatform.zipFileName =
+ System.env['zip_file_name'] ?:
+ (rootProject.findProperty('zipFileName') ?: 'OpenWhisk_CLI')
+
+String buildFileName = System.env['build_file_name'] ?:
+ (rootProject.findProperty('buildFileName') ?: 'wsk')
+
+/*
+ 'platforms' property will be null for a local compile, or a list (comma or
+ space-separated) of hyphenated Goos-Goarch pairs. Some transformation is
+ done when parsing to handle misconceptions.
-// Returns the Go CLI docker build args
-def getDockerBuildArgs() {
- String local_os = mapOsNameToGoName(getOsName())
- String local_arch = mapOsArchToGoArch(getOsArch())
- def res = []
+ TODO: More syntax/validity checking and feedback, perhaps as part of a
+ Platform object as proposed above...
+*/
+rootProject.ext.localPlatform = new OpenWhiskPlatform()
- if(!project.hasProperty('crossCompileCLI') || project.crossCompileCLI ==
"false") {
- res = ["CLI_OS=${local_os}", "CLI_ARCH=${local_arch}"]
+if (rootProject.hasProperty('buildPlatforms')) {
+ rootProject.ext.platforms = buildPlatforms.tokenize(' ,').collect {
+ new OpenWhiskPlatform(it)
+ }
+} else {
+ if (!rootProject.hasProperty('nativeCompile')) {
+ rootProject.ext.platforms = [
+ 'linux-386', 'linux-amd64',
+ 'linux-s390x', 'linux-ppc64le', 'linux-arm', 'linux-arm64',
+ 'darwin-386', 'darwin-amd64',
+ 'windows-386', 'windows-amd64'
+ ].collect { new OpenWhiskPlatform(it) }
} else {
- res = ["CLI_OS=mac linux windows", "CLI_ARCH=386 amd64"]
+ rootProject.ext.platforms = [ rootProject.localPlatform ]
}
+}
- return res
+/*
+ Checks -- add golint and scancode to the checks run prior to build.
+ The get step is needed to be sure a golint binary is available to run.
+ */
+task getGoLint(type: com.github.blindpirate.gogradle.Go) {
+ go 'get -u github.com/golang/lint/golint'
}
-def run(cmd, ignoreError = false) {
- println("Executing '${cmd.join(" ")}'")
- def proc = cmd.execute()
- proc.waitFor()
- if(!ignoreError && proc.exitValue() != 0) {
- println("Command '${cmd.join(" ")}' failed with exitCode
${proc.exitValue()}")
- }
+task goLint(type: com.github.blindpirate.gogradle.Go, dependsOn: getGoLint) {
+ // WARNING: The single quotes are intentional! The gogradle plugin will
+ // parse the command with the GString engine at execution time.
+ run '${GOPATH}/bin/golint ' + golang.packagePath
+}
+
+goCheck.dependsOn(goLint)
+
+goBuild {
+ targetPlatform = rootProject.platforms*.goPlatform
+ def now = new Date().format("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
+
+ // WARNING: The single quotes are intentional! The gogradle plugin will
+ // parse the command with the GString engine at execution time.
+ go(['build',
+ '-ldflags', "-X main.CLI_BUILD_TIME=${now}" as String,
+ '-o', './build/${GOOS}-${GOARCH}/'+buildFileName+'${GOEXE}',
+ golang.packagePath ] as List<String>)
}
-def getOsName() {
- return System.properties['os.name']
+task compile(type: Copy, dependsOn: goBuild) {
+ destinationDir = file('./build')
+
from("./build/${rootProject.localPlatform.goOs}-${rootProject.localPlatform.goArch}")
}
-def getOsArch() {
- return System.properties['os.arch']
+/*
+ Set up the goTest task to print useful information to Stdout:
+ */
+goTest.generateTestReport = { testClassResults ->
+ testClassResults*.results.flatten()*.failures.flatten().each() { failure ->
+ logger.quiet( '-' * 40 )
+ logger.quiet(failure.message)
+ logger.quiet( '-' * 40 )
+ }
+}
+
+/*
+ For each platform, create an individual archive in a platform appropriate
+ format (tarball for Linux, zipfile for Mac & Windows).
+ */
+task individualArchives(
+ dependsOn: rootProject.platforms.collect() { p ->
+ task("release${p.goOs.capitalize()}${p.goArch.capitalize()}",
+ type: (p.goOs == 'linux') ? Tar : Zip, dependsOn: compile) {
+ if (p.goOs == 'linux') { compression = Compression.GZIP }
+ destinationDir = file('./release')
+ baseName = "${p.zipFileName}-latest-${p.owOs}-${p.goArch}"
+ from "./build/${p.goOs}-${p.goArch}/"
+ include "${buildFileName}*"
+ }
+ })
+
+/*
+ Create a 'content.json' file representing all that was
+ compiled and its appropriate directory in the Tarball that will be created
+ for deployment to local Nginx instances.
+ */
+
+task index() {
+ def content = [:]
+ for (p in platforms) {
+ def pathObject = [ "path" : "${p.archiveDirName}/${p.archiveFileName}"
]
+ content.get(p.owOs,[:])[p.goArch] = pathObject
+ // TODO: Default architecture should be configurable as a property
+ if (p.goArch == 'amd64') {
+ content.get(p.owOs,[:])['default'] = pathObject
+ }
+ }
+
+ doLast {
+ mkdir('./build')
+ file('./build/content.json').text =
groovy.json.JsonOutput.toJson(["cli": content])
+ }
}
-def mapOsNameToGoName(String osname) {
- String osname_l = osname.toLowerCase()
- if (osname_l.contains("nux") || osname.contains("nix")) return "linux"
- if (osname_l.contains("mac")) return "mac"
- if (osname_l.contains("windows")) return "windows"
- return osname_l
+task release(type: Tar, dependsOn: [individualArchives, index]) {
+ compression = Compression.GZIP
+ destinationDir = file('./release')
+ baseName = "${OpenWhiskPlatform.zipFileName}-latest-all"
+ from('./build/content.json') { into('.') }
+ rootProject.platforms.each() { p ->
+ from('./release/') {
+ include("${p.zipFileName}-latest-${p.owOs}-${p.goArch}.*")
+ into p.archiveDirName
+ rename { p.archiveFileName }
+ }
+ }
}
-def mapOsArchToGoArch(String osarch) {
- String osarch_l = osarch.toLowerCase()
- if (osarch_l.contains("x86_64") || osarch_l == "amd64") return "amd64"
- if (osarch_l.contains("i386") || osarch_l.contains("x86_32")) return "386"
- return osarch_l
+task clean(type: Delete, dependsOn: goClean) {
+ delete './build', './release'
}
diff --git a/build.sh b/build.sh
deleted file mode 100644
index 172106c7..00000000
--- a/build.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/bash
-
-set +x
-set -e
-
-get_bin_name () {
- local os=$1
- local bin="wsk"
-
- if [ $os = "windows" ]; then
- bin="${bin}.exe";
- fi
-
- echo $bin;
-};
-
-build_cli () {
- local os=$1
- local arch=$2
- local bin=$3
-
- echo "Building for OS '$os' and architecture '$arch'"
-
- if [ $os = "mac" ]; then
- export GOOS=darwin;
- else
- export GOOS=$os;
- fi
-
- export GOARCH=$arch
-
- cd /src/github.com/apache/incubator-openwhisk-cli
- go build -ldflags "-X main.CLI_BUILD_TIME=`date -u '+%Y-%m-%dT%H:%M:%S%:z'`"
-v -o build/$os/$arch/$bin main.go;
-};
-
-get_compressed_name() {
- local os=$1
- local arch=$2
- local product_name="OpenWhisk_CLI"
-
- if [ $arch = amd64 ]; then
- comp_name="$product_name-$os";
- elif [ $arch = 386 ]; then
- comp_name="$product_name-$os-32bit";
- else
- comp_name="$product_name-$os-$arch";
- fi
-
- echo $comp_name;
-};
-
-compress_binary() {
- local comp_name=$1
- local bin=$2
- local os=$3
- local arch=$4
-
- cd build/$os/$arch
-
- if [ $os = "linux" ]; then
- comp_name="$comp_name.tgz"
- tar -cvzf $comp_name $bin >/dev/null 2>&1;
- else
- comp_name="$comp_name.zip"
- zip $comp_name $bin >/dev/null 2>&1;
- fi
-
- cd ../../..
- echo $os/$arch/$comp_name;
-};
-
-create_cli_packages() {
- local dirIndex="{\"cli\":{"
-
- for platform in $platforms; do
- dirIndex="$dirIndex\"$platform\":{"
-
- for arch in $archs; do
- bin=$(get_bin_name $platform)
- build_cli $platform $arch $bin
- comp_name=$(get_compressed_name $platform $arch)
- comp_path=$(compress_binary $comp_name $bin $platform $arch)
-
- if [ $arch = $default_arch ]; then
- dirIndex="$dirIndex\"default\":{\"path\":\"$comp_path\"},";
- fi
-
- dirIndex="$dirIndex\"$arch\":{\"path\":\"$comp_path\"},";
- done
-
- dirIndex="$(echo $dirIndex | rev | cut -c2- | rev)"
- dirIndex="$dirIndex},";
- done
-
- dirIndex="$(echo $dirIndex | rev | cut -c2- | rev)"
- dirIndex="$dirIndex}}"
-
- echo $dirIndex > ./build/content.json
-};
-
-platforms="$CLI_OS"
-archs="$CLI_ARCH";
-default_arch="amd64"
-
-create_cli_packages
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 00000000..dd6667aa
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1 @@
+systemProp.gogradle.alias=true
diff --git a/gradle/docker.gradle b/gradle/docker.gradle
index 9930f616..f716c7b4 100644
--- a/gradle/docker.gradle
+++ b/gradle/docker.gradle
@@ -3,7 +3,7 @@ import groovy.time.*
/**
* Utility to build docker images based in gradle projects
*
- * This extends gradle's 'application' plugin logic with a 'buildBinaries'
task which builds
+ * This extends gradle's 'application' plugin logic with a 'distDocker' task
which builds
* a docker image from the Dockerfile of the project that applies this file.
The image
* is automatically tagged and pushed if a tag and/or a registry is given.
*
@@ -42,7 +42,7 @@ if(project.hasProperty('dockerBuildArgs')) {
}
}
-task buildBinaries {
+task distDocker {
doLast {
def start = new Date()
def cmd = dockerBinary + dockerBuildArg + ['-t', dockerImageName,
project.buildscript.sourceFile.getParentFile().getAbsolutePath()]
@@ -74,7 +74,7 @@ task pushImage {
}
pushImage.dependsOn tagImage
pushImage.onlyIf { dockerRegistry != '' }
-buildBinaries.finalizedBy pushImage
+distDocker.finalizedBy pushImage
def retry(cmd, retries, timeout) {
println("${new Date()}: Executing '${cmd.join(" ")}'")
diff --git a/settings.gradle b/settings.gradle
index f38f4447..dd36ccf6 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,11 +1,30 @@
-def owPath = System.getenv("OPENWHISK_HOME")
+def owPath = System.getenv("OPENWHISK_HOME") ?: '../incubator-openwhisk'
def owDirectory = new File(owPath)
-include 'common:scala'; project(':common:scala').projectDir = new
File(owDirectory, 'common/scala')
-include 'core:controller'; project(':core:controller').projectDir = new
File(owDirectory, 'core/controller')
-include 'core:invoker'; project(':core:invoker').projectDir = new
File(owDirectory, 'core/invoker')
+if (!owDirectory.exists()) {
+ throw new GradleScriptException(
+ "Environment variable OPENWHISK_HOME must point to a valid OpenWhisk
build", null)
+}
+
include 'clitests'; project(':clitests').projectDir = new File(owDirectory,
'tests')
+[ 'common:scala',
+ 'core:controller',
+ 'core:invoker',
+ 'actionRuntimes:nodejs6Action',
+ 'actionRuntimes:actionProxy',
+ 'actionRuntimes:pythonAction',
+ 'actionRuntimes:python2Action',
+ 'actionRuntimes:javaAction',
+ 'actionRuntimes:swift3.1.1Action',
+ 'sdk:docker',
+ 'tests:dat:blackbox:badaction',
+ 'tests:dat:blackbox:badproxy'
+].each() { p ->
+ include p
+ project(':'+p).projectDir = new File(owDirectory, p.replaceAll(':','/'))
+}
+
include 'tests'
rootProject.name = 'openwhisk-cli'
diff --git a/tests/src/integration/common/utils.go
b/tests/src/integration/common/utils.go
index 4f9064d8..c24b23e9 100644
--- a/tests/src/integration/common/utils.go
+++ b/tests/src/integration/common/utils.go
@@ -21,6 +21,8 @@ import (
"os"
"unicode"
"io"
+ "path"
+ "runtime"
"strings"
)
@@ -104,6 +106,14 @@ func GetRepoPath() string {
return os.Getenv("GOPATH") +
"/src/github.com/apache/incubator-openwhisk-cli"
}
+func GetBinPath() string {
+ _, goFileName, _, _ := runtime.Caller(1)
+ // Yes, this assumes we're using the official build script. I haven't
+ // figured out a better approach yet given the panoply of options.
+ // Maybe some sort of Go search path?
+ return path.Join(path.Dir(goFileName), "../../../../build")
+}
+
type InvalidArg struct {
Cmd []string
Err string
diff --git a/tests/src/integration/common/wsk.go
b/tests/src/integration/common/wsk.go
index 08b025ea..4af89e11 100644
--- a/tests/src/integration/common/wsk.go
+++ b/tests/src/integration/common/wsk.go
@@ -33,7 +33,7 @@ type Wsk struct {
}
func NewWsk() *Wsk {
- return NewWskWithPath(GetRepoPath())
+ return NewWskWithPath(GetBinPath())
}
func NewWskWithPath(path string) *Wsk {
diff --git a/tests/src/integration/dummy.go b/tests/src/integration/dummy.go
new file mode 100644
index 00000000..077d0a4e
--- /dev/null
+++ b/tests/src/integration/dummy.go
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 tests
diff --git a/tools/travis/build_tag_releases.sh
b/tools/travis/build_tag_releases.sh
deleted file mode 100755
index c8ab958a..00000000
--- a/tools/travis/build_tag_releases.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env bash
-
-# Currently supported combinations of OS and Architecture
-declare -a builds=(
- "linux amd64"
- "linux 386"
- "linux s390x"
- "linux ppc64le"
- "darwin amd64"
- "darwin 386"
- "windows amd64"
- "windows 386"
-)
-
-build_file_name=${1:-"wsk"}
-zip_file_name=${2:-"OpenWhisk_CLI"}
-
-for build in "${builds[@]}"
-do
- # A little bash foo to tokenize the build string
- IFS=' ' read os arc <<< "${build}"
- wsk=$build_file_name
- os_name=$os
- if [ "$os" == "windows" ]; then
- wsk="$wsk.exe"
- fi
- if [ "$os" == "darwin" ]; then
- os_name="mac"
- fi
- cd $TRAVIS_BUILD_DIR || exit
- GOOS=$os GOARCH=$arc go build -ldflags "-X main.CLI_BUILD_TIME=`date -u
'+%Y-%m-%dT%H:%M:%S%:z'`" -o build/$os/$arc/$wsk
- cd build/$os/$arc || exit
- if [[ "$os" == "linux" ]]; then
- tar -czvf
"$TRAVIS_BUILD_DIR/$zip_file_name-$TRAVIS_TAG-$os_name-$arc.tgz" $wsk
- else
- zip -r
"$TRAVIS_BUILD_DIR/$zip_file_name-$TRAVIS_TAG-$os_name-$arc.zip" $wsk
- fi
-done
diff --git a/tools/travis/scancode.sh b/tools/travis/scancode.sh
deleted file mode 100755
index 2202c45e..00000000
--- a/tools/travis/scancode.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-set -e
-
-# Build script for Travis-CI.
-SCRIPTDIR=$(cd $(dirname "$0") && pwd)
-ROOTDIR="$SCRIPTDIR/../.."
-UTIL_DIR="$ROOTDIR/../incubator-openwhisk-utilities"
-
-# run scancode
-cd $UTIL_DIR
-scancode/scanCode.py $ROOTDIR
\ No newline at end of file
diff --git a/tools/travis/setupscan.sh b/tools/travis/setupscan.sh
deleted file mode 100755
index 35f070fd..00000000
--- a/tools/travis/setupscan.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-SCRIPTDIR=$(cd $(dirname "$0") && pwd)
-HOMEDIR="$SCRIPTDIR/../../../"
-
-# clone OpenWhisk utilities repo. in order to run scanCode.py
-cd $HOMEDIR
-git clone https://github.com/apache/incubator-openwhisk-utilities.git
diff --git a/tools/travis/test_openwhisk.sh b/tools/travis/test_openwhisk.sh
index 1dfb5139..2370521b 100755
--- a/tools/travis/test_openwhisk.sh
+++ b/tools/travis/test_openwhisk.sh
@@ -2,57 +2,89 @@
set -e
-cd $TRAVIS_BUILD_DIR
-./tools/travis/scancode.sh
-make lint
-make build
-make test
-export PATH=$PATH:$TRAVIS_BUILD_DIR;
-make native_test;
-
-export OPENWHISK_HOME="$(dirname "$TRAVIS_BUILD_DIR")/incubator-openwhisk";
+#
+# At this point, the Travis build should already have built the binaries and
+# the release. If you're running manually, this command should get you to
+# the same place:
+#
+# ./gradlew release
+#
+# Also at this point, you should already have incubator-openwhisk pulled down
+# from gradle in the parent directory, using a command such as:
+#
+# git clone --depth 3 https://github.com/apache/incubator-openwhisk.git
+#
+# To be clear, your directory structure will look something like...
+#
+# $HOMEDIR
+# |- incubator-openwhisk
+# |- incubator-openwhisk-cli (This project)
+# |- incubator-openwhisk-utilities (For scancode)
+#
+# The idea is to only build once and to be transparent about building in
+# the Travis script. To that end, some of the other builds that had been
+# done in this script will be moved into Travis.yml.
+#
+
+#
+# Determine default directories, etc., so we're not beholden to Travis
+# when running tests of the script during the development cycle.
+#
+scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+TRAVIS_BUILD_DIR="$( cd "${TRAVIS_BUILD_DIR:-$scriptdir/../..}" && pwd )"
+export TRAVIS_BUILD_DIR
+
+# For the gradle builds.
HOMEDIR="$(dirname "$TRAVIS_BUILD_DIR")"
-cd $HOMEDIR
+OPENWHISK_HOME="$( cd "${OPENWHISK_HOME:-$HOMEDIR/incubator-openwhisk}" && pwd
)"
+export OPENWHISK_HOME
-# Clone the OpenWhisk code
-git clone --depth 3 https://github.com/apache/incubator-openwhisk.git
+#
+# Perform code validation using scanCode and Golint
+#
+../incubator-openwhisk-utilities/scancode/scanCode.py $TRAVIS_BUILD_DIR
+./gradlew --console=plain goLint
-# Build script for Travis-CI.
-WHISKDIR="$HOMEDIR/incubator-openwhisk"
+#
+# Run Unit and native tests
+#
+./gradlew --console=plain goTest -PgoTags=unit,native
-cd $WHISKDIR
-./tools/travis/setup.sh
+#
+# Set up the OpenWhisk environment for integration testing
+#
-ANSIBLE_CMD="ansible-playbook -i environments/local -e
docker_image_prefix=testing"
-TERM=dumb ./gradlew distDocker -PdockerImagePrefix=testing
+# Build docker images
+cd $OPENWHISK_HOME
+./gradlew --console=plain distDocker -PdockerImagePrefix=testing
-cd $WHISKDIR/ansible
+# Fire up the cluster
+cd $OPENWHISK_HOME/ansible
+ANSIBLE_CMD="ansible-playbook -i environments/local -e
docker_image_prefix=testing"
$ANSIBLE_CMD setup.yml
$ANSIBLE_CMD prereq.yml
$ANSIBLE_CMD couchdb.yml
$ANSIBLE_CMD initdb.yml
$ANSIBLE_CMD apigateway.yml
-
-cd $TRAVIS_BUILD_DIR
-TERM=dumb ./gradlew buildBinaries
-
-cd $WHISKDIR/ansible
$ANSIBLE_CMD wipe.yml
$ANSIBLE_CMD openwhisk.yml -e openwhisk_cli_home=$TRAVIS_BUILD_DIR
# Copy the binary generated into the OPENWHISK_HOME/bin, so that the test
cases will run based on it.
-mkdir -p $WHISKDIR/bin
-cp $TRAVIS_BUILD_DIR/bin/wsk $WHISKDIR/bin
+mkdir -p $OPENWHISK_HOME/bin
+cp -f $TRAVIS_BUILD_DIR/build/wsk $OPENWHISK_HOME/bin
-# Run the test cases under openwhisk to ensure the quality of the binary.
+# Run the test cases under openwhisk to ensure the quality of the runnint API.
cd $TRAVIS_BUILD_DIR
-
-./gradlew :tests:test -Dtest.single=*ApiGwCliTests*
+./gradlew --console=plain :tests:test -Dtest.single=*ApiGwCliTests*
sleep 30
-./gradlew :tests:test -Dtest.single=*ApiGwCliRoutemgmtActionTests*
+./gradlew --console=plain :tests:test
-Dtest.single=*ApiGwCliRoutemgmtActionTests*
sleep 30
-./gradlew :tests:test -Dtest.single=*ApiGwCliEndToEndTests*
+./gradlew --console=plain :tests:test -Dtest.single=*ApiGwCliEndToEndTests*
sleep 30
-./gradlew :tests:test -Dtest.single=*Wsk*Tests*
+./gradlew --console=plain :tests:test -Dtest.single=*Wsk*Tests*
-make integration_test
+#
+# Finally, run the integration test for the CLI
+#
+./gradlew --console=plain goTest -PgoTags=integration
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services