66 lines
1.4 KiB
Bash
66 lines
1.4 KiB
Bash
|
#!/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.
|
|||
|
|
|||
|
|
|||
|
|