This change is made at the request of the PowerShell committee, as the use of "stable" implied more stability than available with alpha releases. This also changes the images from existing under one repo to two: powershell/powershell and powershell/powershell-nightly. The documentation and script have been updated.
89 lines
3.3 KiB
Bash
Executable file
89 lines
3.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
# This is borrowed from https://github.com/dotnet/cli/blob/18456af5caeae44defc23ad5579c838c1fda3c3d/run.sh
|
|
SOURCE="${BASH_SOURCE[0]}"
|
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
|
SOURCE="$(readlink "$SOURCE")"
|
|
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
|
done
|
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
|
|
|
# run from directory of launch.sh so artifacts are placed appropriately
|
|
pushd "$DIR"
|
|
|
|
if [[ -z "$FORK" ]]; then
|
|
FORK=PowerShell
|
|
fi
|
|
|
|
if [[ -z "$BRANCH" ]]; then
|
|
BRANCH=master
|
|
fi
|
|
|
|
# Build both sets by default
|
|
if [[ -z "$BUILDS" ]]; then
|
|
BUILDS="release nightly"
|
|
fi
|
|
|
|
# Build specified distributions
|
|
if [[ -z $DISTROS ]]; then
|
|
DISTROS="ubuntu14.04 ubuntu16.04 centos7"
|
|
fi
|
|
|
|
for build in $BUILDS; do
|
|
# each distro can be done in parallel; but release must be done before nightly
|
|
for distro in $DISTROS; do
|
|
logfile="$distro.log"
|
|
if [[ "$TEST" -eq 1 ]]; then logfile="test-$logfile"; fi
|
|
mkdir -p "logs/$build"
|
|
logfile="logs/$build/$logfile"
|
|
echo "Logging to docker/$logfile"
|
|
|
|
if [[ "$build" = release ]]; then
|
|
repo="powershell/powershell"
|
|
else
|
|
repo="powershell/powershell-nightly"
|
|
fi
|
|
|
|
(
|
|
image="$repo:$distro"
|
|
pushd "$build"
|
|
if [[ "$TEST" -eq 1 ]]; then
|
|
echo "LOG: testing $image"
|
|
command="cd PowerShell; Import-Module ./build.psm1; Install-Dotnet -NoSudo; Start-PSPester -powershell powershell -Pester ./src/Modules/Shared/Pester"
|
|
# clone repo for release images because it's not already done
|
|
if [[ "$build" = release ]]; then
|
|
command="git clone --recursive https://github.com/$FORK/PowerShell -b $BRANCH; $command"
|
|
fi
|
|
# run Pester tests inside container
|
|
# RUNARGS can be set in the environment
|
|
docker run $RUNARGS "$image" -c "$command"
|
|
else
|
|
echo "LOG: building $image"
|
|
# copy the common script because it lives outside the docker build context
|
|
if [[ "$build" = nightly ]]; then
|
|
cp bootstrap.ps1 "$distro"
|
|
buildargs="--build-arg fork=$FORK --build-arg branch=$BRANCH"
|
|
fi
|
|
# build and tag the image so they can be derived from
|
|
# BUILDARGS can be set in the environment
|
|
docker build $buildargs $BUILDARGS -t "$image" "$distro"
|
|
if [[ "$build" = nightly ]]; then
|
|
echo "LOG: Saving package to docker/packages"
|
|
popd
|
|
mkdir -p packages
|
|
command='cp -vf /PowerShell/powershell*{deb,rpm} /mnt 2> /dev/null'
|
|
# override entrypoint to be bash so we can use globbing
|
|
docker run --rm --volume "$(pwd)/packages:/mnt" --entrypoint bash "$image" -c "$command"
|
|
fi
|
|
fi
|
|
) &>> "$logfile" &
|
|
done
|
|
echo "Waiting for $build containers to finish; tail the logs for more information."
|
|
wait
|
|
done
|
|
|
|
popd
|