65 lines
1.4 KiB
Bash
Executable file
65 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
||
|
||
set -e
|
||
set -u
|
||
|
||
PROJECT_NAME=crystal-builder
|
||
WORKDIR="/$PROJECT_NAME"
|
||
|
||
CDATE="$(date --rfc-3339=seconds |head -c19 |sed -e 's/[-:]//g' -e 's/ /-/')"
|
||
CNAME=""
|
||
CID=""
|
||
|
||
crun() {
|
||
name="$1"
|
||
base="$2"
|
||
CNAME="$name-$CDATE"
|
||
CID="$(docker run -it \
|
||
--rm \
|
||
--name "$CNAME" \
|
||
--detach \
|
||
-v "./:$WORKDIR" \
|
||
-w "$WORKDIR" \
|
||
"$base" \
|
||
sleep infinity)"
|
||
if [ -z "$CID" ]; then
|
||
>&2 echo "ERROR: Unable to run $name container ($CNAME)"
|
||
exit 1
|
||
fi
|
||
|
||
}
|
||
|
||
cclean() {
|
||
>&2 printf "INFO: Cleaning containers... "
|
||
docker kill "$CID" > /dev/null
|
||
echo "done"
|
||
}
|
||
trap "cclean" EXIT
|
||
|
||
|
||
## 0. Run base image
|
||
|
||
## 1. Install the latest crystal release
|
||
## Ref. https://crystal-lang.org/install/
|
||
crun step1 debian:12
|
||
docker exec -it "$CID" sh "$WORKDIR/setup/step1.sh"
|
||
docker commit "$CID" "$PROJECT_NAME:step1"
|
||
cclean
|
||
|
||
## 2. Make sure a supported LLVM version is present in the path
|
||
## (When possible, use the latest supported version)
|
||
crun step1 "$PROJECT_NAME:step1"
|
||
cclean
|
||
|
||
## 3. Make sure to install all the required libraries. You might also want to read the contributing guide.
|
||
|
||
## 4. Clone the repository: git clone https://github.com/crystal-lang/crystal
|
||
|
||
## 5. Run make to build your own version of the compiler.
|
||
|
||
## 6. Run make std_spec compiler_spec to ensure all specs pass, and you’ve installed everything correctly.
|
||
|
||
## 7. Use bin/crystal to run your crystal files.
|
||
|
||
|
||
|