diff --git a/.circleci/config.yml b/.circleci/config.yml index 37bfe0425..409f872a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,38 +1,41 @@ -# Golang CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-go/ for more details version: 2 jobs: build: machine: true - working_directory: /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}} + working_directory: ~/go/src/github.com/fnproject/fn + environment: # apparently expansion doesn't work here yet: https://discuss.circleci.com/t/environment-variable-expansion-in-working-directory/11322 + - GOPATH=/home/circleci/go + - GOVERSION=1.8.3 + - OS=linux + - ARCH=amd64 steps: - checkout - # update docker - - run: docker version - - run: sudo service docker stop - - run: curl -fsSL https://get.docker.com/ | sudo sh + # update Go + - run: | + go version + go env GOROOT + mkdir tmp + cd tmp + sudo rm -rf /usr/local/go + wget https://storage.googleapis.com/golang/go$GOVERSION.$OS-$ARCH.tar.gz + # mkdir -p $HOME/golang + # tar -C $HOME/golang -xzf go1.8.3.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf go$GOVERSION.$OS-$ARCH.tar.gz + go get -u github.com/golang/dep/... + - run: go version + # update Docker + - run: | + docker version + sudo service docker stop + curl -fsSL https://get.docker.com/ | sudo sh - run: docker version - run: ./test.sh - - -# docker: -# # specify the version -# - image: circleci/golang:1.8 - -# # Specify service dependencies here if necessary -# # CircleCI maintains a library of pre-built images -# # documented at https://circleci.com/docs/2.0/circleci-images/ -# # - image: circleci/postgres:9.4 - -# #### TEMPLATE_NOTE: go expects specific checkout path representing url -# #### expecting it in the form of -# #### /go/src/github.com/circleci/go-tool -# #### /go/src/bitbucket.org/circleci/go-tool -# working_directory: /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}} -# steps: -# - checkout - -# # specify any bash command here prefixed with `run: ` -# # - run: go get -v -t -d ./... -# - run: ./test.sh + - deploy: + command: | + if [ "${CIRCLE_BRANCH}" == "master" ]; then + git config --global user.email "ci@fnproject.com" + git config --global user.name "CI" + git branch --set-upstream-to=origin/${CIRCLE_BRANCH} ${CIRCLE_BRANCH} + docker login -u $DOCKER_USER -p $DOCKER_PASS + ./release.sh + fi diff --git a/.gitignore b/.gitignore index 691d7a76a..96e71f0fa 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ private.sh data/ .vscode/ fn/func.yaml +tmp/ diff --git a/api/version/version.go b/api/version/version.go index 05abbd242..15533fe49 100644 --- a/api/version/version.go +++ b/api/version/version.go @@ -1,4 +1,4 @@ package version // Version of Functions -var Version = "0.3.24" +var Version = "0.3.26" diff --git a/cli/release.sh b/cli/release.sh index d7b7f5d87..eb7b0187c 100755 --- a/cli/release.sh +++ b/cli/release.sh @@ -39,32 +39,16 @@ git push git push origin $tag # For GitHub -# url='https://api.github.com/repos/treeder/functions/releases' -# output=$(curl -s -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY -d "{\"tag_name\": \"$version\", \"name\": \"$version\"}" $url) -# upload_url=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["upload_url"]' | sed -E "s/\{.*//") -# html_url=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["html_url"]') -# curl --data-binary "@fn_linux" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn_linux >/dev/null -# curl --data-binary "@fn_mac" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn_mac >/dev/null -# curl --data-binary "@fn.exe" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn.exe >/dev/null - -# For GitLab -# 1) Upload files: https://docs.gitlab.com/ee/api/projects.html#upload-a-file -upload_url='https://gitlab-odx.oracle.com/api/v3/projects/9/uploads' -output=$(curl --request POST --form "file=@fn_linux" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $upload_url) -linux_markdown=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["markdown"]') -output=$(curl --request POST --form "file=@fn_mac" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $upload_url) -mac_markdown=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["markdown"]') -output=$(curl --request POST --form "file=@fn.exe" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $upload_url) -win_markdown=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["markdown"]') -output=$(curl --request POST --form "file=@fn_alpine" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $upload_url) -alpine_markdown=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["markdown"]') - -# 2) Create a release: https://docs.gitlab.com/ee/api/tags.html#create-a-new-release -release_url="https://gitlab-odx.oracle.com/api/v3/projects/9/repository/tags/$tag/release" -release_desc="Awesome release, much Wow\n\nfn for Linux: $linux_markdown \n\nfn for Mac: $mac_markdown \n\nfn for Windows: $win_markdown \n\nfn for Alpine: $alpine_markdown" -curl --request POST -H "PRIVATE-TOKEN: $GITLAB_TOKEN" -H "Content-Type: application/json" -d "{\"tag_name\": \"$tag\", \"description\": \"$release_desc\"}" $release_url +url='https://api.github.com/repos/fnproject/fn/releases' +output=$(curl -s -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY -d "{\"tag_name\": \"$version\", \"name\": \"$version\"}" $url) +upload_url=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["upload_url"]' | sed -E "s/\{.*//") +html_url=$(echo "$output" | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["html_url"]') +curl --data-binary "@fn_linux" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn_linux >/dev/null +curl --data-binary "@fn_mac" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn_mac >/dev/null +curl --data-binary "@fn.exe" -H "Content-Type: application/octet-stream" -u $GH_DEPLOY_USER:$GH_DEPLOY_KEY $upload_url\?name\=fn.exe >/dev/null # TODO: Add the download URLS to install.sh. Maybe we should make a template to generate install.sh # TODO: Download URL's are in the output vars above under "url". Eg: "url":"/uploads/9a1848c5ebf2b83f8b055ac0e50e5232/fn.exe" -# sed "s/release=.*/release=\"$version\"/g" fn/install.sh > fn/install.sh.tmp -# mv fn/install.sh.tmp fn/install.sh +# sed "s/release=.*/release=\"$version\"/g" install.sh > install.sh.tmp +# mv install.sh.tmp install.sh +# TODO: then git commit and push? Would be nice to do that along with the vrsion git push above diff --git a/cli/version.go b/cli/version.go index ddcc78d3f..bff0fa066 100644 --- a/cli/version.go +++ b/cli/version.go @@ -10,7 +10,7 @@ import ( ) // Version of Functions CLI -var Version = "0.3.18" +var Version = "0.3.25" func version() cli.Command { r := versionCmd{VersionApi: functions.NewVersionApi()} diff --git a/examples/middleware/main.go b/examples/middleware/main.go index 962fe11e1..57310d44e 100644 --- a/examples/middleware/main.go +++ b/examples/middleware/main.go @@ -33,7 +33,7 @@ func main() { type CustomMiddleware struct { } -func (h *CustomMiddleware) Serve(next http.Handler) http.Handler { +func (h *CustomMiddleware) Chain(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Println("CustomMiddleware called") diff --git a/fnlb/Makefile b/fnlb/Makefile index a2b25a958..ae4e469f0 100644 --- a/fnlb/Makefile +++ b/fnlb/Makefile @@ -7,7 +7,7 @@ build: docker-build: docker pull funcy/go:dev docker run --rm -v ${GOPATH}/src/github.com/fnproject/fn:/go/src/github.com/fnproject/fn \ - -w /go/src/github.com/fnproject/fn/clilb funcy/go:dev go build -o fnlb-alpine + -w /go/src/github.com/fnproject/fn/fnlb funcy/go:dev go build -o fnlb-alpine docker build --build-arg HTTP_PROXY -t funcy/fnlb:latest . all: build diff --git a/fnlb/main.go b/fnlb/main.go index 22c176ba9..a0a73b31f 100644 --- a/fnlb/main.go +++ b/fnlb/main.go @@ -17,7 +17,7 @@ import ( "github.com/fnproject/fn/fnlb/lb" ) -const VERSION = "0.0.1" +const VERSION = "0.0.3" func main() { // XXX (reed): normalize diff --git a/release.sh b/release.sh index 81691642b..1f641ee30 100755 --- a/release.sh +++ b/release.sh @@ -39,7 +39,7 @@ docker tag $user/$service:$tag $user/$service:$version docker push $user/$service:$version docker push $user/$service:$tag -cd fn +cd cli ./release.sh $version cd .. cd fnlb diff --git a/test.sh b/test.sh index 54f9dfe95..6d11b66a4 100755 --- a/test.sh +++ b/test.sh @@ -2,6 +2,8 @@ set -ex +make build + docker rm -fv func-postgres-test || echo No prev test db container docker run --name func-postgres-test -p 15432:5432 -d postgres docker rm -fv func-mysql-test || echo No prev mysql test db container @@ -43,8 +45,11 @@ cd cli && make build && make test export FN="$(pwd)/fn" cd .. -# TODO: Test a bunch of the examples using fn test when ready -# checker tests env vars -# TODO: Fix checker tests behind proxy... -# cd examples/checker -# ./test.sh +# test middlware, extensions, examples, etc +# TODO: do more here, maybe as part of fn tests +cd examples/middleware +go build +cd ../.. +cd examples/extensions +go build +cd ../..