Skip to content

Commit 4a1a779

Browse files
committed
Windows CI
* Add appveyor.yml for windows CI, with automatic release binary bundle publishing * Rework bundle/build-stack script to work on all OSes * Use SHA1 instead of MD5 for the Windows checksum. * Refactor the build-stack script a little * Remove all the other bundle build scripts * Include dependencies in binary bundles (resolves purescript#1952) I haven't managed to get `strip` to work on AppVeyor, but this script has produced an identically sized bundle to the 0.8.4 one (21.3MB) so maybe that's not worth worrying about.
1 parent 9f292cf commit 4a1a779

5 files changed

Lines changed: 100 additions & 171 deletions

File tree

appveyor.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
platform: x64
2+
version: '{build}'
3+
environment:
4+
GITHUB_TOKEN:
5+
secure: PUrCLwiP1G73fP5hr5HVpwBQU6n6t0A7CtfQxrFRAlTC+fnkntcA+9TR58OTEy7y
6+
# Keep the path as short as possible, just in case.
7+
STACK_ROOT: c:\s
8+
# Appveyor does not seem to be able to cope with the symbolic link
9+
# stack.yaml, so this is a workaround.
10+
STACK_YAML: stack-lts-5.yaml
11+
RELEASE_USER: purescript
12+
RELEASE_REPO: purescript
13+
cache:
14+
- c:\s
15+
install:
16+
- git submodule update --init
17+
- ps: Install-Product node 5
18+
- npm install -g bower
19+
20+
- ps: |
21+
New-Item -ItemType Directory -Force -Path C:\tools
22+
$env:Path += ";C:\tools"
23+
(New-Object Net.WebClient).DownloadFile('https://www.stackage.org/stack/windows-x86_64', 'c:\tools\stack.zip')
24+
pushd c:\tools
25+
7z x c:\tools\stack.zip stack.exe
26+
popd
27+
28+
- stack --no-terminal --verbosity=error setup 1>stack-setup.log 2>&1 || type stack-setup.log
29+
30+
build_script:
31+
# Override the default build script.
32+
- echo ""
33+
test_script:
34+
- stack -j1 --no-terminal test --pedantic
35+
on_success:
36+
# this seems to be necessary; if omitted, the bash script fails to find the
37+
# tool 'strip'.
38+
- copy C:\MinGW\bin\strip.exe C:\tools\strip.exe
39+
- ps: |
40+
function UploadFile
41+
{
42+
github-release upload --user $env:RELEASE_USER --repo $env:RELEASE_REPO --tag $env:APPVEYOR_REPO_TAG_NAME --file $args[0] --name $args[0]
43+
}
44+
45+
if ($env:APPVEYOR_REPO_TAG_NAME)
46+
{
47+
bash ./bundle/build-stack.sh win64
48+
49+
(New-Object Net.WebClient).DownloadFile('https://github.com/aktau/github-release/releases/download/v0.6.2/windows-amd64-github-release.zip', 'c:\tools\github-release.zip')
50+
pushd c:\tools
51+
7z x github-release.zip bin/windows/amd64/github-release.exe
52+
Copy-Item bin/windows/amd64/github-release.exe github-release.exe
53+
popd
54+
55+
pushd bundle
56+
UploadFile win64.tar.gz
57+
UploadFile win64.sha
58+
popd
59+
}

bundle/build-stack.sh

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
## This script can be run on any supported OS to create a binary .tar.gz
2+
## bundle.
3+
## For Windows, msysgit contains all of the pieces needed to run this script.
14
set -e
25

3-
SCRIPTPATH=$( cd "$(dirname "$0")" ; pwd -P )
4-
56
OS=$1
67

78
if [ -z $OS ]
@@ -10,39 +11,51 @@ then
1011
exit 1
1112
fi
1213

13-
pushd ${SCRIPTPATH} > /dev/null
14+
pushd $(stack path --project-root)
15+
16+
LOCAL_INSTALL_ROOT=$(stack path --local-install-root)
17+
18+
if [ "$OS" = "win64" ]
19+
then
20+
BIN_EXT=".exe"
21+
else
22+
BIN_EXT=""
23+
fi
1424

1525
# Make the staging directory
16-
mkdir -p build/purescript/
17-
18-
# Strip the binaries
19-
strip ~/.local/bin/psc
20-
strip ~/.local/bin/psci
21-
strip ~/.local/bin/psc-docs
22-
strip ~/.local/bin/psc-publish
23-
strip ~/.local/bin/psc-bundle
24-
strip ~/.local/bin/psc-ide-server
25-
strip ~/.local/bin/psc-ide-client
26-
27-
# Copy files to staging directory
28-
cp ~/.local/bin/psc build/purescript/
29-
cp ~/.local/bin/psci build/purescript/
30-
cp ~/.local/bin/psc-docs build/purescript/
31-
cp ~/.local/bin/psc-publish build/purescript/
32-
cp ~/.local/bin/psc-bundle build/purescript/
33-
cp ~/.local/bin/psc-ide-server build/purescript/
34-
cp ~/.local/bin/psc-ide-client build/purescript/
35-
cp README build/purescript/
36-
cp ../LICENSE build/purescript/
37-
cp ../INSTALL.md build/purescript/
26+
mkdir -p bundle/build/purescript
27+
28+
# Strip the binaries, and copy them to the staging directory
29+
for BIN in psc psci psc-docs psc-publish psc-bundle psc-ide-server psc-ide-client
30+
do
31+
FULL_BIN="$LOCAL_INSTALL_ROOT/bin/${BIN}${BIN_EXT}"
32+
strip "$FULL_BIN" || true # not the end of the world if this fails, and
33+
# AppVeyor can't seem to handle it for some reason
34+
cp "$FULL_BIN" bundle/build/purescript
35+
done
36+
37+
# Copy extra files to the staging directory
38+
cp bundle/README bundle/build/purescript/
39+
cp LICENSE bundle/build/purescript/
40+
cp INSTALL.md bundle/build/purescript/
41+
42+
stack list-dependencies >bundle/build/purescript/dependencies.txt
3843

3944
# Make the binary bundle
40-
pushd build > /dev/null
41-
tar -zcvf ../$OS.tar.gz purescript
45+
pushd bundle/build > /dev/null
46+
tar -zcvf ../${OS}.tar.gz purescript
4247
popd > /dev/null
4348

4449
# Calculate the SHA hash
45-
shasum $OS.tar.gz > $OS.sha
50+
if [ "$OS" = "win64" ]
51+
then
52+
# msys/mingw does not include shasum. :(
53+
SHASUM="openssl dgst -sha1"
54+
else
55+
SHASUM="shasum"
56+
fi
57+
58+
$SHASUM bundle/${OS}.tar.gz > bundle/${OS}.sha
4659

4760
# Remove the staging directory
4861
rm -rf build/

bundle/build.sh

Lines changed: 0 additions & 50 deletions
This file was deleted.

bundle/winbuild-stack.sh

Lines changed: 0 additions & 46 deletions
This file was deleted.

bundle/winbuild.sh

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)