2020-06-17 02:27:55 +02:00
#!/bin/sh
# Human readable names of binary distributions
2021-06-05 09:02:34 +02:00
DISTRO = ( macOS-64bit linux-64bit linux-32bit linux-arm7 linux-arm64)
2020-06-17 02:27:55 +02:00
# Operating systems for the respective distributions
2021-06-05 09:02:34 +02:00
OS = ( darwin linux linux linux linux)
2020-06-17 02:27:55 +02:00
# Architectures for the respective distributions
2021-06-05 09:02:34 +02:00
ARCH = ( amd64 amd64 386 arm-7 arm64)
2020-06-17 02:27:55 +02:00
# Version
VERSION = $1
2020-08-30 21:03:28 +02:00
SHOULD_RELEASE = $2
2020-06-18 08:54:55 +02:00
2021-01-12 04:38:44 +01:00
# Build info
GIT_COMMIT = $( git rev-list -1 HEAD)
GIT_BRANCH = $( git rev-parse --abbrev-ref HEAD)
2020-06-18 08:54:55 +02:00
if [ [ -z " ${ VERSION } " ] ] ; then
echo "Version must be specified when running build"
2020-06-22 18:53:26 +02:00
exit
2020-06-18 08:54:55 +02:00
fi
2021-01-12 04:38:44 +01:00
BUILD_TEMP_DIRECTORY = " $( mktemp -d) "
cd $BUILD_TEMP_DIRECTORY
echo " Cloning owncast into $BUILD_TEMP_DIRECTORY ... "
2021-02-19 08:05:52 +01:00
git clone https://github.com/owncast/owncast 2> /dev/null
2021-01-12 04:38:44 +01:00
cd owncast
echo " Changing to branch: $GIT_BRANCH "
git checkout $GIT_BRANCH
2020-06-17 02:27:55 +02:00
[ [ -z " ${ VERSION } " ] ] && VERSION = 'unknownver' || VERSION = " ${ VERSION } "
2021-01-12 04:38:44 +01:00
2020-06-17 02:27:55 +02:00
# Change to the root directory of the repository
cd $( git rev-parse --show-toplevel)
echo "Cleaning working directories..."
2020-06-19 02:47:44 +02:00
rm -rf ./webroot/hls/* ./hls/* ./webroot/thumbnail.jpg
2020-06-17 02:27:55 +02:00
echo " Creating version ${ VERSION } from commit ${ GIT_COMMIT } "
2020-10-26 16:49:33 +01:00
# Create production build of Tailwind CSS
pushd build/javascript >> /dev/null
# Install the tailwind & postcss CLIs
npm install --quiet --no-progress
# Run the tailwind CLI and pipe it to postcss for minification.
# Save it to a temp directory that we will reference below.
NODE_ENV = "production" ./node_modules/.bin/tailwind build | ./node_modules/.bin/postcss > " ${ TMPDIR } tailwind.min.css "
popd
2020-06-17 02:27:55 +02:00
mkdir -p dist
build( ) {
NAME = $1
OS = $2
ARCH = $3
VERSION = $4
GIT_COMMIT = $5
2021-02-19 08:05:52 +01:00
echo " Building ${ NAME } ( ${ OS } /${ ARCH } ) release from ${ GIT_BRANCH } ${ GIT_COMMIT } ..."
2020-06-17 02:27:55 +02:00
2020-06-23 03:11:56 +02:00
mkdir -p dist/${ NAME }
2020-11-18 05:27:14 +01:00
mkdir -p dist/${ NAME } /data
2020-06-17 02:27:55 +02:00
cp -R webroot/ dist/${ NAME } /webroot/
2020-11-19 17:48:33 +01:00
2020-10-26 16:49:33 +01:00
# Copy the production pruned+minified css to the build's directory.
cp " ${ TMPDIR } tailwind.min.css " ./dist/${ NAME } /webroot/js/web_modules/tailwindcss/dist/tailwind.min.css
2020-06-26 02:44:47 +02:00
cp -R static/ dist/${ NAME } /static
2020-06-17 02:27:55 +02:00
cp README.md dist/${ NAME }
pushd dist/${ NAME } >> /dev/null
2020-07-13 02:58:34 +02:00
2021-06-18 04:27:17 +02:00
CGO_ENABLED = 1 ~/go/bin/xgo --branch ${ GIT_BRANCH } -ldflags " -s -w -X github.com/owncast/owncast/config.GitCommit= ${ GIT_COMMIT } -X github.com/owncast/owncast/config.BuildVersion= ${ VERSION } -X github.com/owncast/owncast/config.BuildPlatform= ${ NAME } " -targets " ${ OS } / ${ ARCH } " github.com/owncast/owncast
2020-07-13 02:58:34 +02:00
mv owncast-*-${ ARCH } owncast
2020-10-24 22:50:45 +02:00
zip -r -q -8 ../owncast-$VERSION -$NAME .zip .
2020-06-17 02:27:55 +02:00
popd >> /dev/null
rm -rf dist/${ NAME } /
}
2020-07-21 07:04:00 +02:00
for i in " ${ !DISTRO[@] } " ; do
build ${ DISTRO [ $i ] } ${ OS [ $i ] } ${ ARCH [ $i ] } $VERSION $GIT_COMMIT
done
2020-06-17 02:27:55 +02:00
2021-01-12 04:38:44 +01:00
echo " Build archives are available in $BUILD_TEMP_DIRECTORY /owncast/dist "
ls -alh " $BUILD_TEMP_DIRECTORY /owncast/dist "
2020-08-30 21:03:28 +02:00
# Use the second argument "release" to create an actual release.
if [ " $SHOULD_RELEASE " != "release" ] ; then
2021-01-12 04:38:44 +01:00
echo "Not uploading a release."
2020-08-30 21:03:28 +02:00
exit
fi
2020-06-17 02:27:55 +02:00
# Create the tag
2020-08-30 21:03:28 +02:00
git tag -a " v ${ VERSION } " -m " Release build v ${ VERSION } "
2020-06-17 02:27:55 +02:00
2020-08-30 21:03:28 +02:00
# On macOS open the Github page for new releases so they can be uploaded
if test -f "/usr/bin/open" ; then
2020-10-05 19:07:09 +02:00
open "https://github.com/owncast/owncast/releases/new"
2020-08-30 21:03:28 +02:00
open dist
fi
2020-07-07 09:23:21 +02:00
# Docker build
# Must authenticate first: https://docs.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-docker-for-use-with-github-packages#authenticating-to-github-packages
2020-08-30 21:03:28 +02:00
DOCKER_IMAGE = " owncast- ${ VERSION } "
echo " Building Docker image ${ DOCKER_IMAGE } ... "
# Change to the root directory of the repository
cd $( git rev-parse --show-toplevel)
2020-12-14 07:13:09 +01:00
# Docker build
2021-06-18 04:27:17 +02:00
docker build --build-arg NAME = docker --build-arg VERSION = ${ VERSION } --build-arg GIT_COMMIT = $GIT_COMMIT -t gabekangas/owncast:$VERSION -t gabekangas/owncast:latest -t owncast .
2020-12-14 07:13:09 +01:00
2020-07-21 03:39:39 +02:00
# Dockerhub
# You must be authenticated via `docker login` with your Dockerhub credentials first.
2021-05-15 00:28:13 +02:00
docker push " gabekangas/owncast: ${ VERSION } "