Merge pull request #356 from ericchiang/fix_cross_compilation

Fix cross compilation
This commit is contained in:
Eric Chiang 2016-03-02 14:47:39 -08:00
commit 09069a51a7
7 changed files with 79 additions and 26 deletions

17
build
View file

@ -2,9 +2,18 @@
source ./env source ./env
go install -ldflags="$LD_FLAGS" github.com/coreos/dex/cmd/dex-worker CMDS=( "dex-worker" "dexctl" "dex-overlord" "gendoc")
go install -ldflags="$LD_FLAGS" github.com/coreos/dex/cmd/dexctl FORMAT='{{ range $i, $dep := .Deps }}{{ $dep }} {{ end }}'
go install -ldflags="$LD_FLAGS" github.com/coreos/dex/cmd/dex-overlord
for CMD in ${CMDS[@]}; do
TARGET="github.com/coreos/dex/cmd/$CMD"
# Install command dependencies. This caches package builds and speeds
# up successive builds a lot.
go list -f="$FORMAT" $TARGET | xargs go install -ldflags="$LD_FLAGS"
# Build the actual command.
go build -o="bin/$CMD" -ldflags="$LD_FLAGS" $TARGET
done
go build -o bin/example-app github.com/coreos/dex/examples/app go build -o bin/example-app github.com/coreos/dex/examples/app
go build -o bin/example-cli github.com/coreos/dex/examples/cli go build -o bin/example-cli github.com/coreos/dex/examples/cli
go install github.com/coreos/dex/cmd/gendoc

View file

@ -10,8 +10,6 @@ import (
"github.com/coreos/go-oidc/oidc" "github.com/coreos/go-oidc/oidc"
"github.com/go-gorp/gorp" "github.com/go-gorp/gorp"
"github.com/lib/pq"
"github.com/mattn/go-sqlite3"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
"github.com/coreos/dex/client" "github.com/coreos/dex/client"
@ -217,6 +215,25 @@ func (r *clientIdentityRepo) Authenticate(creds oidc.ClientCredentials) (bool, e
return ok, nil return ok, nil
} }
var alreadyExistsCheckers []func(err error) bool
func registerAlreadyExistsChecker(f func(err error) bool) {
alreadyExistsCheckers = append(alreadyExistsCheckers, f)
}
// isAlreadyExistsErr detects database error codes for failing a unique constraint.
//
// Because database drivers are optionally compiled, use registerAlreadyExistsChecker to
// register driver specific implementations.
func isAlreadyExistsErr(err error) bool {
for _, checker := range alreadyExistsCheckers {
if checker(err) {
return true
}
}
return false
}
func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) { func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.ClientCredentials, error) {
secret, err := pcrypto.RandBytes(maxSecretLength) secret, err := pcrypto.RandBytes(maxSecretLength)
if err != nil { if err != nil {
@ -229,17 +246,9 @@ func (r *clientIdentityRepo) New(id string, meta oidc.ClientMetadata) (*oidc.Cli
} }
if err := r.executor(nil).Insert(cim); err != nil { if err := r.executor(nil).Insert(cim); err != nil {
switch sqlErr := err.(type) { if isAlreadyExistsErr(err) {
case *pq.Error: err = errors.New("client ID already exists")
if sqlErr.Code == pgErrorCodeUniqueViolation {
err = errors.New("client ID already exists")
}
case *sqlite3.Error:
if sqlErr.ExtendedCode == sqlite3.ErrConstraintUnique {
err = errors.New("client ID already exists")
}
} }
return nil, err return nil, err
} }

View file

@ -9,10 +9,6 @@ import (
"github.com/go-gorp/gorp" "github.com/go-gorp/gorp"
"github.com/coreos/dex/repo" "github.com/coreos/dex/repo"
// Import database drivers
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
) )
type table struct { type table struct {

15
db/conn_postgres.go Normal file
View file

@ -0,0 +1,15 @@
package db
// Register the postgres driver.
import "github.com/lib/pq"
func init() {
registerAlreadyExistsChecker(func(err error) bool {
sqlErr, ok := err.(*pq.Error)
if !ok {
return false
}
return sqlErr.Code == pgErrorCodeUniqueViolation
})
}

17
db/conn_sqlite3.go Normal file
View file

@ -0,0 +1,17 @@
// +build cgo
package db
// Register the sqlite3 driver.
import "github.com/mattn/go-sqlite3"
func init() {
registerAlreadyExistsChecker(func(err error) bool {
sqlErr, ok := err.(*sqlite3.Error)
if !ok {
return false
}
return sqlErr.ExtendedCode == sqlite3.ErrConstraintUnique
})
}

5
env
View file

@ -1,5 +1,4 @@
export GOPATH=${PWD}/Godeps/_workspace export GOPATH=${PWD}/Godeps/_workspace
export GOBIN=${PWD}/bin
rm -rf $GOPATH/src/github.com/coreos/dex rm -rf $GOPATH/src/github.com/coreos/dex
mkdir -p $GOPATH/src/github.com/coreos/ mkdir -p $GOPATH/src/github.com/coreos/
@ -7,4 +6,6 @@ mkdir -p $GOPATH/src/github.com/coreos/
# Only attempt to link dex into godeps if it isn't already there # Only attempt to link dex into godeps if it isn't already there
[ -d $GOPATH/src/github.com/coreos/dex ] || ln -s ${PWD} $GOPATH/src/github.com/coreos/dex [ -d $GOPATH/src/github.com/coreos/dex ] || ln -s ${PWD} $GOPATH/src/github.com/coreos/dex
LD_FLAGS="-X main.version=$(./git-version)" export VERSION=$(./git-version)
LD_FLAGS="-X main.version=${VERSION}"

14
release
View file

@ -1,18 +1,24 @@
#!/bin/bash -e #!/bin/bash -e
VERSION=$(./git-version)
GOARCH=amd64 GOARCH=amd64
OSS=( "darwin" "linux" ) OSS=( "darwin" "linux" )
source ./env
# cannot cross compile when GOBIN is set.
# See:
# https://golang.org/issue/9769
# https://golang.org/issue/11778
unset GOBIN
for GOOS in ${OSS[@]}; do for GOOS in ${OSS[@]}; do
name=dex-$VERSION-$GOOS-$GOARCH name=dex-$VERSION-$GOOS-$GOARCH
rm -fr $name.tar.gz $name/ rm -fr $name.tar.gz $name/
mkdir $name mkdir $name
GOOS=$GOOS GOARCH=$GOARCH ./build GOOS=$GOOS GOARCH=$GOARCH go build -o $name/dexctl -ldflags="$LD_FLAGS" github.com/coreos/dex/cmd/dexctl
cp bin/dexctl $name/
tar -czf $name.tar.gz $name/ tar -czf $name.tar.gz $name/
echo "Created ${name}.tar.gz" echo "Created ${name}.tar.gz"