Skip to content

Commit 2546ff8

Browse files
committed
Add container-build tool
1 parent a2094c7 commit 2546ff8

File tree

6 files changed

+2039
-1
lines changed

6 files changed

+2039
-1
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Build and test on containers
2+
3+
on:
4+
[push, pull_request, workflow_dispatch]
5+
6+
jobs:
7+
build_and_test:
8+
strategy:
9+
matrix:
10+
os: [ubuntu-latest]
11+
builder: ["podman"]
12+
fail-fast: false
13+
runs-on: ${{ matrix.os }}
14+
steps:
15+
- name: Update podman
16+
run: |
17+
# from https://askubuntu.com/questions/1414446/whats-the-recommended-way-of-installing-podman-4-in-ubuntu-22-04
18+
ubuntu_version='22.04'
19+
key_url="https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_${ubuntu_version}/Release.key"
20+
sources_url="https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/unstable/xUbuntu_${ubuntu_version}"
21+
echo "deb $sources_url/ /" | sudo tee /etc/apt/sources.list.d/devel-kubic-libcontainers-unstable.list
22+
curl -fsSL $key_url | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_kubic_libcontainers_unstable.gpg > /dev/null
23+
sudo apt update
24+
sudo apt install -y podman
25+
- uses: actions/checkout@v4
26+
- name: Make on Unix
27+
run: ./container-build.py make -d fast
28+

Dockerfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
FROM docker.io/ubuntu:20.04
2+
RUN apt-get -qq update && \
3+
DEBIAN_FRONTEND=noninteractive apt-get -qq install -y build-essential libcap-dev xz-utils zip \
4+
unzip strace curl discount git python3 zlib1g-dev \
5+
cmake flex bison locales clang && \
6+
rm -rf /var/lib/apt/lists/*
7+
COPY --from=docker.io/golang:1.21 /usr/local/go /usr/local/go
8+
ENV PATH "$PATH:/usr/local/go/bin"
9+
RUN groupadd -g 1000 file-builder
10+
RUN useradd -m -g 1000 -u 1000 file-builder
11+
RUN chown -R file-builder:file-builder /usr/local
12+
USER file-builder
13+
RUN curl https://install.meteor.com/?release=2.3.5 | sh
14+
USER root
15+
RUN chown -R root:root /usr/local
16+
USER file-builder
17+
ENV PATH $PATH:/home/file-builder/.meteor
18+
ENV METEOR_WAREHOUSE_DIR /home/file-builder/.meteor
19+
ENV USER file-builder
20+
WORKDIR /sandstorm

container-build.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#!/bin/python
2+
import argparse, shlex, subprocess, os, getpass
3+
4+
# from https://stackoverflow.com/a/4760274/259046
5+
def runProcess(exe):
6+
p = subprocess.run(shlex.split(exe), stderr=subprocess.STDOUT)
7+
while(True):
8+
if not isinstance(p, subprocess.CompletedProcess):
9+
retcode = p.poll()
10+
else:
11+
retcode = p.returncode
12+
13+
stdout = p.stdout
14+
print(stdout)
15+
if retcode is not None:
16+
if retcode != 0:
17+
exit(retcode)
18+
else:
19+
break
20+
21+
22+
23+
24+
parser = argparse.ArgumentParser(description='Build Sandstorm using an Ubuntu 20.04 Docker/OCI container')
25+
parser.add_argument("action", choices=["make", "prepare", "shell"], default="make", nargs="?")
26+
parser.add_argument('--container-builder', dest="container_builder", default='podman', help='Command you run for building container from command line')
27+
parser.add_argument('--container-runner', dest="container_runner", default='podman', help='Command you run for running container from command line')
28+
parser.add_argument('args', nargs=argparse.REMAINDER)
29+
30+
args = parser.parse_args()
31+
32+
def prepare():
33+
script ="{builder_cmd} build . -t sandstorm-build".format(builder_cmd=args.container_builder)
34+
print(script)
35+
runProcess(script)
36+
37+
def prepare_cmd(command):
38+
return "{runner_cmd} run --rm -ti \
39+
-v {pwd}:/sandstorm \
40+
-v {pwd}/scripts/podman-entrypoint.sh:/podman-entrypoint.sh \
41+
--userns=keep-id:uid=1000,gid=1000 \
42+
--entrypoint=/podman-entrypoint.sh \
43+
--cap-add=SYS_PTRACE sandstorm-build {command} {args}".format(
44+
runner_cmd=args.container_runner,
45+
pwd=os.getcwd(),
46+
command=command,
47+
args=' '.join(args.args)
48+
)
49+
50+
#
51+
52+
def make():
53+
script = prepare_cmd("make")
54+
print(script)
55+
runProcess(script)
56+
57+
def shell():
58+
script = prepare_cmd("bash")
59+
print(script)
60+
runProcess(script)
61+
62+
prepare()
63+
64+
if (args.action == "make"):
65+
make()
66+
67+
if (args.action == "shell"):
68+
shell()
69+
70+
71+
72+
73+

find-meteor-dev-bundle.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,7 @@ TOOLDIR=$(echo $TOOL_VERSION | tr @ /)
5959

6060
echo " $TOOL_VERSION" >&2
6161

62-
readlink -f $METEOR_WAREHOUSE_DIR/packages/$TOOLDIR/mt-os.linux.x86_64/dev_bundle > "$CACHE_FILE"
62+
echo -n "$TOOLDIR" >&2
63+
echo -n "$METEOR_WAREHOUSE_DIR/packages/$TOOLDIR/mt-os.linux.x86_64/dev_bundle" >&2
64+
echo "$METEOR_WAREHOUSE_DIR/packages/$TOOLDIR/mt-os.linux.x86_64/dev_bundle" > "$CACHE_FILE"
6365
cat "$CACHE_FILE"

0 commit comments

Comments
 (0)