Merge pull request #251 from christianbundy/add-build-script
Add build script that creates zip files
This commit is contained in:
commit
72eec63e1a
|
@ -0,0 +1,77 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
BASEDIR="$(dirname "$0")"
|
||||
TARGET_VERSION="12.16.1"
|
||||
|
||||
cd "$BASEDIR/.."
|
||||
|
||||
git clean -fdx
|
||||
|
||||
mkdir -p vendor
|
||||
cd vendor
|
||||
|
||||
get_tgz () {
|
||||
TARGET_PLATFORM="$1"
|
||||
TARGET="node-v$TARGET_VERSION-$TARGET_PLATFORM-x64"
|
||||
ARCHIVE="$TARGET.tar.gz"
|
||||
URL="https://nodejs.org/dist/v$TARGET_VERSION/$ARCHIVE"
|
||||
TARGET_NODE="$TARGET/bin/node"
|
||||
|
||||
wget "$URL"
|
||||
tar -xvf "$ARCHIVE" "$TARGET_NODE"
|
||||
rm -f "$ARCHIVE"
|
||||
}
|
||||
|
||||
get_zip () {
|
||||
TARGET_PLATFORM="$1"
|
||||
TARGET="node-v$TARGET_VERSION-$TARGET_PLATFORM-x64"
|
||||
ARCHIVE="$TARGET.zip"
|
||||
URL="https://nodejs.org/dist/v$TARGET_VERSION/$ARCHIVE"
|
||||
TARGET_NODE="$TARGET/node.exe"
|
||||
|
||||
wget "$URL"
|
||||
unzip "$ARCHIVE" "$TARGET_NODE"
|
||||
rm -f "$ARCHIVE"
|
||||
}
|
||||
|
||||
get_tgz darwin
|
||||
get_tgz linux
|
||||
get_zip win
|
||||
|
||||
cd ..
|
||||
|
||||
# Avoid building anything from source.
|
||||
npm ci --only=prod --ignore-scripts --no-audit --no-fund
|
||||
# More trouble than it's worth :)
|
||||
rm -rf ./node_modules/sharp
|
||||
|
||||
export GOARCH="amd64"
|
||||
|
||||
# Darwin (shell script)
|
||||
export GOOS="darwin"
|
||||
OUTFILE="oasis-$GOOS-$GOARCH"
|
||||
go build -ldflags "-X main.node=vendor/node-v$TARGET_VERSION-darwin-x64/bin/node" -o "$OUTFILE" scripts/oasis.go
|
||||
chmod +x "$OUTFILE"
|
||||
|
||||
# Linux (ELF executable)
|
||||
export GOOS="linux"
|
||||
OUTFILE="oasis-$GOOS-$GOARCH"
|
||||
go build -ldflags "-X main.node=vendor/node-v$TARGET_VERSION-linux-x64/bin/node" -o "$OUTFILE" scripts/oasis.go
|
||||
chmod +x "$OUTFILE"
|
||||
|
||||
# Windows (batch file)
|
||||
export GOOS="windows"
|
||||
OUTFILE="oasis-$GOOS-$GOARCH.exe"
|
||||
go build -ldflags "-X main.node=vendor\\node-v$TARGET_VERSION-win-x64\\bin\\node" -o "$OUTFILE" scripts/oasis.go
|
||||
chmod +x "$OUTFILE"
|
||||
|
||||
# I think if the zip already exists it's adding files to the existing archive?
|
||||
ZIP_PATH="/tmp/oasis-x64.zip"
|
||||
|
||||
rm -f "$ZIP_PATH"
|
||||
zip -r "$ZIP_PATH" . -x ".git/**"
|
||||
|
||||
git clean -fdx
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// The relative path to the `node` binary depends on the platform, so we
|
||||
// pass this via an `-ldflags` hack I don't completely understand. In my
|
||||
// head this is similar to how GCC lets you use `-D` to define a macro to
|
||||
// be inserted by the preprocessor.
|
||||
var node string
|
||||
|
||||
func main() {
|
||||
// The problem with relative paths is that they only work when
|
||||
// you run `./oasis-platform-x64`, but not when you run a command
|
||||
// like `./path/to/oasis-platform-x64`. To resolve this problem
|
||||
// we need to put together an absolute path, which we can build
|
||||
// with the first argument (the relative path of this executable)
|
||||
// and the relative path of either the `node` binary or the
|
||||
// source code directory so that we can run `node src`.
|
||||
node := filepath.Join(filepath.Dir(os.Args[0]), node)
|
||||
src := filepath.Join(filepath.Dir(os.Args[0]), "src")
|
||||
|
||||
// We know that the command will be the absolute path to `node`
|
||||
// and the first argument will be the absolute path to the `src`
|
||||
// directory, but we need to get collect the rest of the arguments
|
||||
// programatically by pulling them out of the `os.Args` slice and
|
||||
// putting them in a new slice called `args`.
|
||||
args := []string{src}
|
||||
for i := 1; i < len(os.Args); i++ {
|
||||
args = append(args, os.Args[i])
|
||||
}
|
||||
|
||||
// This seems to execute the script and pass-through all of the
|
||||
// arguments we want, *plus* it hooks up stdout and stderr, but
|
||||
// the exit code of Oasis doesn't seem to be passed through. This
|
||||
// is easy to test with a command like:
|
||||
//
|
||||
// ./oasis-platform-x64 --port -1
|
||||
//
|
||||
// This should give an exit code of 1, but it seems to exit 0. :/
|
||||
cmd := exec.Command(node, args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
// This catches problems like "no such file or directory" if the
|
||||
// `node` variable points to a path where there isn't a binary.
|
||||
//
|
||||
// TODO: I think we're supposed to handle the exit code here.
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue