From 536d6ab302d537af2627f4837ec9ad0b5337dbf2 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sun, 26 Dec 2021 01:40:37 -0800 Subject: [PATCH] github actions (#91) * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update Dockerfile * switch * :hushed: * Update bun.yml * Update Dockerfile * Update Dockerfile * wip * Update bun.yml * Update bun.yml * Update bun.yml * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * cache is broken * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update bun.yml * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update bun.yml * Update Dockerfile * Update Dockerfile * Update bun.yml * bust it * Update Dockerfile * jm * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update Dockerfile * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * wip * Update bun.yml * Update Dockerfile * Update Dockerfile * Update Makefile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * Update Dockerfile * pass executablePath * alright * Update Makefile * Update Dockerfile * Update Dockerfile * Update Makefile * Update Makefile * Update Dockerfile * lets try that * Update Dockerfile * Update bun.yml * hm * Update Dockerfile * Update Dockerfile * Update Dockerfile * not interactive * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * simplify this * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * missing * Update Dockerfile * Update Dockerfile * wrong dir * Update Dockerfile * Update bun.yml * Update Dockerfile * Update Dockerfile * Update bun.yml * ordering * Update Dockerfile * Update bun.yml * run-test file * pass github workspace * hm * Update bun.yml * copy the file * Update run-test.sh * Update bun.yml * Update bun.yml * Update bun.yml * try this way * Update bun.yml * maybe? * Update bun.yml * maybe taht's it? * maybe this * cache * up * Update bun.yml * Update bun.yml * try this one i guess * okay that might do it * Update Dockerfile * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update chrome.json * Update chrome.json * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * hm * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * fix caching I think * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * Update bun.yml * maybe * Update bun.yml * fixup * Update bun.yml * Update bun.yml * Update bun.yml * maybe this time * Update bun.yml * Update Dockerfile * random name * ok * explicit runner * Update bun.yml * Update bun.yml * try deleting the files so the layer caching doesn't happen * :runner: * Update bun.yml * Update bun.yml * Update Dockerfile * Update Dockerfile * Update Dockerfile * Dockerfile.base * node.js * Update bun.yml * Update Dockerfile * Update Dockerfile.base * cleanup --- .docker/chrome.json | 1539 +++++++++++++++++ .docker/copy-bun-binary.sh | 8 + .../dockerfile-common.sh | 0 .../run-dockerfile.sh | 0 .docker/run-test.sh | 9 + .docker/runner.sh | 5 + .github/workflows/bun.yml | 100 +- .gitignore | 2 + Dockerfile | 465 +++-- Dockerfile.base | 145 ++ Makefile | 24 +- bun.lockb | Bin 0 -> 7340 bytes integration/scripts/browser.js | 2 + integration/scripts/bun.lockb | Bin 0 -> 17219 bytes integration/snippets/bun.lockb | Bin 0 -> 20500 bytes push-docker.sh | 22 - 16 files changed, 2046 insertions(+), 275 deletions(-) create mode 100644 .docker/chrome.json create mode 100644 .docker/copy-bun-binary.sh rename dockerfile-common.sh => .docker/dockerfile-common.sh (100%) rename run-dockerfile.sh => .docker/run-dockerfile.sh (100%) create mode 100755 .docker/run-test.sh create mode 100644 .docker/runner.sh create mode 100644 Dockerfile.base create mode 100755 bun.lockb create mode 100755 integration/scripts/bun.lockb create mode 100755 integration/snippets/bun.lockb delete mode 100644 push-docker.sh diff --git a/.docker/chrome.json b/.docker/chrome.json new file mode 100644 index 0000000000..6bd45b6e04 --- /dev/null +++ b/.docker/chrome.json @@ -0,0 +1,1539 @@ +{ + "defaultAction": "SCMP_ACT_ERRNO", + "syscalls": [ + { + "name": "accept", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "accept4", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "access", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "alarm", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "arch_prctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "bind", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "brk", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "capget", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "capset", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "chdir", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "chmod", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "chown", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "chown32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "chroot", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "clock_getres", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "clock_gettime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "clock_nanosleep", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "clone", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "close", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "connect", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "creat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "dup", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "dup2", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "dup3", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_create", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_create1", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_ctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_ctl_old", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_pwait", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_wait", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "epoll_wait_old", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "eventfd", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "eventfd2", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "execve", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "execveat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "exit", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "exit_group", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "faccessat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fadvise64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fadvise64_64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fallocate", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fanotify_init", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fanotify_mark", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchdir", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchmod", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchmodat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchown", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchown32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fchownat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fcntl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fcntl64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fdatasync", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fgetxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "flistxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "flock", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fork", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fremovexattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fsetxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fstat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fstat64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fstatat64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fstatfs", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fstatfs64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "fsync", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ftruncate", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ftruncate64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "futex", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "futimesat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getcpu", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getcwd", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getdents", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getdents64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getegid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getegid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "geteuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "geteuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getgid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getgroups", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getgroups32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getitimer", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getpeername", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getpgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getpgrp", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getpid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getppid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getpriority", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getrandom", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getresgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getresgid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getresuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getresuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getrlimit", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "get_robust_list", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getrusage", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getsid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getsockname", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getsockopt", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "get_thread_area", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "gettid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "gettimeofday", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "getxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "inotify_add_watch", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "inotify_init", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "inotify_init1", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "inotify_rm_watch", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "io_cancel", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ioctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "io_destroy", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "io_getevents", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ioprio_get", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ioprio_set", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "io_setup", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "io_submit", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "kill", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lchown", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lchown32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lgetxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "link", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "linkat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "listen", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "listxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "llistxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "_llseek", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lremovexattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lseek", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lsetxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lstat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "lstat64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "madvise", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "memfd_create", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mincore", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mkdir", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mkdirat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mknod", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mknodat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mlock", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mlockall", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mmap", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mmap2", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mprotect", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_getsetattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_notify", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_open", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_timedreceive", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_timedsend", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mq_unlink", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "mremap", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "msgctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "msgget", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "msgrcv", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "msgsnd", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "msync", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "munlock", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "munlockall", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "munmap", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "name_to_handle_at", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "nanosleep", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "newfstatat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "_newselect", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "open", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "open_by_handle_at", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "openat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pause", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pipe", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pipe2", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "poll", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ppoll", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "prctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pread64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "preadv", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "prlimit64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pselect6", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pwrite64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "pwritev", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "read", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "readahead", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "readlink", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "readlinkat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "readv", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "recvfrom", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "recvmmsg", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "recvmsg", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "remap_file_pages", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "removexattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rename", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "renameat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "renameat2", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rmdir", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigaction", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigpending", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigprocmask", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigqueueinfo", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigreturn", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigsuspend", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_sigtimedwait", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "rt_tgsigqueueinfo", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_getaffinity", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_getattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_getparam", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_get_priority_max", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_get_priority_min", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_getscheduler", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_rr_get_interval", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_setaffinity", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_setattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_setparam", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_setscheduler", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sched_yield", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "seccomp", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "select", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "semctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "semget", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "semop", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "semtimedop", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sendfile", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sendfile64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sendmmsg", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sendmsg", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sendto", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setdomainname", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setfsgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setfsgid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setfsuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setfsuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setgid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setgroups", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setgroups32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sethostname", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setitimer", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setns", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setpgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setpriority", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setregid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setregid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setresgid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setresgid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setresuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setresuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setreuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setreuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setrlimit", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "set_robust_list", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setsid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setsockopt", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "set_thread_area", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "set_tid_address", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setuid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setuid32", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "setxattr", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "shmat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "shmctl", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "shmdt", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "shmget", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "shutdown", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sigaltstack", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "signalfd", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "signalfd4", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "socket", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "socketpair", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "splice", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "stat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "stat64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "statfs", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "statfs64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "symlink", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "symlinkat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sync", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sync_file_range", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "syncfs", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "sysinfo", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "syslog", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "tee", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "tgkill", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "time", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timer_create", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timer_delete", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timerfd_create", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timerfd_gettime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timerfd_settime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timer_getoverrun", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timer_gettime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "timer_settime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "times", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "tkill", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "truncate", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "truncate64", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "ugetrlimit", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "umask", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "uname", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "unlink", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "unlinkat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "unshare", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "utime", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "utimensat", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "utimes", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "vfork", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "vhangup", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "vmsplice", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "wait4", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "waitid", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "write", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { + "name": "writev", + "action": "SCMP_ACT_ALLOW", + "args": null + }, + { "name": "io_uring_setup", "action": "SCMP_ACT_ALLOW", "args": null }, + { "name": "io_uring_enter", "action": "SCMP_ACT_ALLOW", "args": null }, + { "name": "io_uring_register", "action": "SCMP_ACT_ALLOW", "args": null }, + { "name": "copy_file_range", "action": "SCMP_ACT_ALLOW", "args": null } + ] +} diff --git a/.docker/copy-bun-binary.sh b/.docker/copy-bun-binary.sh new file mode 100644 index 0000000000..5fce2ac5b8 --- /dev/null +++ b/.docker/copy-bun-binary.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -euxo pipefail + +name=$(openssl rand -hex 12) +id=$(docker create --name=bun-binary-$name $CONTAINER_TAG) +docker container cp bun-binary-$name:$BUN_RELEASE_DIR bun-binary +echo -e "bun-binary-$name" diff --git a/dockerfile-common.sh b/.docker/dockerfile-common.sh similarity index 100% rename from dockerfile-common.sh rename to .docker/dockerfile-common.sh diff --git a/run-dockerfile.sh b/.docker/run-dockerfile.sh similarity index 100% rename from run-dockerfile.sh rename to .docker/run-dockerfile.sh diff --git a/.docker/run-test.sh b/.docker/run-test.sh new file mode 100755 index 0000000000..74d9017538 --- /dev/null +++ b/.docker/run-test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euxo pipefail + +bun install +bun install --cwd ./integration/snippets +bun install --cwd ./integration/scripts + +make $BUN_TEST_NAME diff --git a/.docker/runner.sh b/.docker/runner.sh new file mode 100644 index 0000000000..837ff85663 --- /dev/null +++ b/.docker/runner.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -euxo pipefail + +docker container run --security-opt seccomp=.docker/chrome.json --env GITHUB_WORKSPACE=$GITHUB_WORKSPACE --env BUN_TEST_NAME=$BUN_TEST_NAME --ulimit memlock=-1:-1 --init --rm bun-test:latest diff --git a/.github/workflows/bun.yml b/.github/workflows/bun.yml index 2c97bd9134..02fe856970 100644 --- a/.github/workflows/bun.yml +++ b/.github/workflows/bun.yml @@ -1,28 +1,108 @@ -name: CI workflow for bun +name: bun on: push: branches: [main, bun-actions] pull_request: branches: [main] +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + TEST_TAG: bun-test' + jobs: - release: - runs-on: ubuntu:20.04 + tests: + runs-on: self-hosted steps: - name: Checkout uses: actions/checkout@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + - name: Checkout submodules + run: git -c submodule."src/javascript/jsc/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j 8 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - - name: Build and push + - name: Login to Dockerhub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Pull Base Image + if: steps.cache-builds.outputs.cache-hit != 'true' + run: docker pull bunbunbunbun/bun-test-base:latest && docker pull bunbunbunbun/bun-base:latest && docker pull bunbunbunbun/bun-base-with-zig-and-webkit:latest && docker tag bun-base:latest bunbunbunbun/bun-base && docker tag bun-base-with-zig-and-webkit:latest bunbunbunbun/bun-base-with-zig-and-webkit:latest + - name: Build Release Image uses: docker/build-push-action@v2 with: context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: jarred-sumner/bun:${{steps.vars.outputs.tag}} target: release + tags: bun:${{github.sha}} + builder: ${{ steps.buildx.outputs.name }} cache-from: type=gha cache-to: type=gha,mode=max - ulimit: "memlock=-1:-1 core=-1:-1" + load: true + - name: Build tests + uses: docker/build-push-action@v2 + with: + context: . + target: test_base + tags: bun-test:latest + load: true + cache-from: type=gha + cache-to: type=gha,mode=max + builder: ${{ steps.buildx.outputs.name }} + - name: Run test-with-hmr + env: + BUN_TEST_NAME: test-with-hmr + GITHUB_WORKSPACE: $GITHUB_WORKSPACE + RUNNER_TEMP: ${RUNNER_TEMP} + run: bash .docker/runner.sh + - name: Run test-no-hmr + env: + BUN_TEST_NAME: test-no-hmr + GITHUB_WORKSPACE: $GITHUB_WORKSPACE + RUNNER_TEMP: ${RUNNER_TEMP} + run: bash .docker/runner.sh + - name: Run test-bun-create-next + env: + RUNNER_TEMP: ${RUNNER_TEMP} + BUN_TEST_NAME: test-create-next + GITHUB_WORKSPACE: $GITHUB_WORKSPACE + run: bash .docker/runner.sh + - name: Run test-bun-create-react + env: + RUNNER_TEMP: ${RUNNER_TEMP} + BUN_TEST_NAME: test-create-react + GITHUB_WORKSPACE: $GITHUB_WORKSPACE + run: bash .docker/runner.sh + - name: Run test-bun-run + env: + RUNNER_TEMP: ${RUNNER_TEMP} + BUN_TEST_NAME: test-bun-run + GITHUB_WORKSPACE: $GITHUB_WORKSPACE + run: bash .docker/runner.sh + + release: + runs-on: self-hosted + needs: tests + if: github.ref == 'refs/heads/main' + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Checkout submodules + run: git -c submodule."src/javascript/jsc/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j 8 + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + - name: Build release image + uses: docker/build-push-action@v2 + with: + context: . + target: release + tags: ghcr.io/jarred-sumner/bun:${{github.sha}} + builder: ${{ steps.buildx.outputs.name }} + push: true diff --git a/.gitignore b/.gitignore index 27bc575795..66c10a3fbc 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,5 @@ src/tests.zig src/deps/s2n-tls .npm .npm.gz + +bun-binary diff --git a/Dockerfile b/Dockerfile index a37a78d90c..538e0ccc5e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,194 +1,194 @@ -FROM ubuntu:20.04 as base +FROM bunbunbunbun/bun-base:latest as mimalloc + ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -RUN apt-get update && apt-get install --no-install-recommends -y wget gnupg2 curl lsb-release wget software-properties-common +COPY Makefile ${BUN_DIR}/Makefile +COPY src/deps/mimalloc ${BUN_DIR}/src/deps/mimalloc -RUN add-apt-repository ppa:longsleep/golang-backports -RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - +RUN cd ${BUN_DIR} && \ + make mimalloc && rm -rf src/deps/mimalloc Makefile -RUN wget https://apt.llvm.org/llvm.sh --no-check-certificate -RUN chmod +x llvm.sh -RUN ./llvm.sh 12 +FROM bunbunbunbun/bun-base:latest as zlib -RUN apt-get update && apt-get install --no-install-recommends -y \ - ca-certificates \ - curl \ - gnupg2 \ - software-properties-common \ - cmake \ - build-essential \ - git \ - libssl-dev \ - ruby \ - liblld-12-dev \ - libclang-12-dev \ - nodejs \ - gcc \ - g++ \ - npm \ - clang-12 \ - clang-format-12 \ - libc++-12-dev \ - libc++abi-12-dev \ - lld-12 \ - libicu-dev \ - wget \ - unzip \ - tar \ - golang-go chromium-browser ninja-build pkg-config automake autoconf libtool curl +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -RUN update-alternatives --install /usr/bin/cc cc /usr/bin/clang-12 90 && \ - update-alternatives --install /usr/bin/cpp cpp /usr/bin/clang++-12 90 && \ - update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-12 90 +COPY Makefile ${BUN_DIR}/Makefile +COPY src/deps/zlib ${BUN_DIR}/src/deps/zlib -ENV CC=clang-12 -ENV CXX=clang++-12 +WORKDIR $BUN_DIR -WORKDIR /home/ubuntu -ARG BUILDARCH -ENV ARCH "$BUILDARCH" +RUN cd $BUN_DIR && \ + make zlib && rm -rf src/deps/zlib Makefile -RUN npm install -g esbuild +FROM bunbunbunbun/bun-base:latest as libarchive -RUN curl -L https://github.com/Jarred-Sumner/zig/releases/download/dec20/zig-linux-$BUILDARCH.zip > zig-linux-$BUILDARCH.zip; \ - unzip -q zig-linux-$BUILDARCH.zip; \ - rm zig-linux-$BUILDARCH.zip; +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +COPY Makefile ${BUN_DIR}/Makefile +COPY src/deps/libarchive ${BUN_DIR}/src/deps/libarchive + +WORKDIR $BUN_DIR + +RUN cd $BUN_DIR && \ + make libarchive && rm -rf src/deps/libarchive Makefile + +FROM bunbunbunbun/bun-base:latest as boringssl + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +COPY Makefile ${BUN_DIR}/Makefile +COPY src/deps/boringssl ${BUN_DIR}/src/deps/boringssl + +WORKDIR $BUN_DIR + +RUN cd $BUN_DIR && \ + make boringssl && rm -rf src/deps/boringssl Makefile + +FROM bunbunbunbun/bun-base:latest as picohttp + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +COPY Makefile ${BUN_DIR}/Makefile +COPY src/deps/picohttpparser ${BUN_DIR}/src/deps/picohttpparser +COPY src/deps/*.c ${BUN_DIR}/src/deps +COPY src/deps/*.h ${BUN_DIR}/src/deps + +WORKDIR $BUN_DIR + +RUN cd $BUN_DIR && \ + make picohttp + +FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as identifier_cache + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +WORKDIR $BUN_DIR + +COPY Makefile ${BUN_DIR}/Makefile +COPY src/js_lexer/identifier_data.zig ${BUN_DIR}/src/js_lexer/identifier_data.zig +COPY src/js_lexer/identifier_cache.zig ${BUN_DIR}/src/js_lexer/identifier_cache.zig + +RUN cd $BUN_DIR && \ + make identifier-cache && rm -rf zig-cache Makefile + +FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as node_fallbacks + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +WORKDIR $BUN_DIR -ENV WEBKIT_OUT_DIR /home/ubuntu/bun-webkit +COPY Makefile ${BUN_DIR}/Makefile +COPY src/node-fallbacks ${BUN_DIR}/src/node-fallbacks +RUN cd $BUN_DIR && \ + make node-fallbacks && rm -rf src/node-fallbacks/node_modules Makefile -WORKDIR /home/ubuntu +FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as build_release -ENV PATH "/home/ubuntu/zig:$PATH" -ENV JSC_BASE_DIR $WEBKIT_OUT_DIR -ENV LIB_ICU_PATH /home/ubuntu/icu/source/lib -ENV BUN_RELEASE_DIR /home/ubuntu/bun-release -ENV BUN_DEPS_OUT_DIR /home/ubuntu/bun-deps - -RUN mkdir -p $BUN_RELEASE_DIR $BUN_DEPS_OUT_DIR /home/ubuntu/bun - -FROM base as base_with_zig_and_webkit - -WORKDIR /home/ubuntu - -RUN curl -L https://github.com/Jarred-Sumner/WebKit/releases/download/Bun-v0/bun-webkit-linux-$BUILDARCH.tar.gz > bun-webkit-linux-$BUILDARCH.tar.gz; \ - tar -xzf bun-webkit-linux-$BUILDARCH.tar.gz; \ - rm bun-webkit-linux-$BUILDARCH.tar.gz && cat $WEBKIT_OUT_DIR/include/cmakeconfig.h > /dev/null - -RUN curl -L https://github.com/unicode-org/icu/releases/download/release-66-1/icu4c-66_1-src.tgz > icu4c-66_1-src.tgz && \ - tar -xzf icu4c-66_1-src.tgz && \ - rm icu4c-66_1-src.tgz && \ - cd icu/source && \ - ./configure --enable-static --disable-shared && \ - make -j$(nproc) +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -WORKDIR /home/ubuntu/bun +WORKDIR $BUN_DIR -FROM base as mimalloc +COPY ./src ${BUN_DIR}/src +COPY ./build.zig ${BUN_DIR}/build.zig +COPY ./completions ${BUN_DIR}/completions +COPY ./packages ${BUN_DIR}/packages +COPY ./build-id ${BUN_DIR}/build-id +COPY ./package.json ${BUN_DIR}/package.json +COPY ./misctools ${BUN_DIR}/misctools +COPY Makefile ${BUN_DIR}/Makefile -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/deps/mimalloc /home/ubuntu/bun/src/deps/mimalloc +COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=picohttp ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=boringssl ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=identifier_cache ${BUN_DIR}/src/js_lexer/*.blob ${BUN_DIR}/src/js_lexer -RUN make mimalloc - -FROM base as zlib - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/deps/zlib /home/ubuntu/bun/src/deps/zlib - -RUN make zlib - -FROM base as libarchive - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/deps/libarchive /home/ubuntu/bun/src/deps/libarchive - -RUN make libarchive - -FROM base as boringssl - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/deps/boringssl /home/ubuntu/bun/src/deps/boringssl - -RUN make boringssl - -FROM base as picohttp - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/deps/picohttpparser /home/ubuntu/bun/src/deps/picohttpparser -COPY src/deps/*.c /home/ubuntu/bun/src/deps -COPY src/deps/*.h /home/ubuntu/bun/src/deps - -RUN make picohttp - -FROM base_with_zig_and_webkit as identifier_cache - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/js_lexer/identifier_data.zig /home/ubuntu/bun/src/js_lexer/identifier_data.zig -COPY src/js_lexer/identifier_cache.zig /home/ubuntu/bun/src/js_lexer/identifier_cache.zig - -RUN make identifier-cache - -FROM base as node_fallbacks - -WORKDIR /home/ubuntu/bun -COPY Makefile /home/ubuntu/bun/Makefile -COPY src/node-fallbacks /home/ubuntu/bun/src/node-fallbacks -RUN make node-fallbacks - -FROM base_with_zig_and_webkit as build_dependencies - -WORKDIR /home/ubuntu/bun - -ENV BUN_DEPS_OUT_DIR /home/ubuntu/bun-deps - -COPY ./src /home/ubuntu/bun/src -COPY ./build.zig /home/ubuntu/bun/build.zig -COPY ./completions /home/ubuntu/bun/completions -COPY ./packages /home/ubuntu/bun/packages -COPY ./build-id /home/ubuntu/bun/build-id -COPY ./package.json /home/ubuntu/bun/package.json -COPY ./misctools /home/ubuntu/bun/misctools -COPY Makefile /home/ubuntu/bun/Makefile - -COPY --from=mimalloc /home/ubuntu/bun-deps/*.o /home/ubuntu/bun-deps -COPY --from=libarchive /home/ubuntu/bun-deps/*.a /home/ubuntu/bun-deps -COPY --from=picohttp /home/ubuntu/bun-deps/*.o /home/ubuntu/bun-deps -COPY --from=boringssl /home/ubuntu/bun-deps/*.a /home/ubuntu/bun-deps -COPY --from=zlib /home/ubuntu/bun-deps/*.a /home/ubuntu/bun-deps -COPY --from=node_fallbacks /home/ubuntu/bun/src/node-fallbacks /home/ubuntu/bun/src/node-fallbacks -COPY --from=identifier_cache /home/ubuntu/bun/src/js_lexer/*.blob /home/ubuntu/bun/src/js_lexer/ - -RUN make \ +RUN cd $BUN_DIR && rm -rf $HOME/.cache zig-cache && make \ jsc-bindings-headers \ api \ analytics \ bun_error \ - fallback_decoder + fallback_decoder && rm -rf $HOME/.cache zig-cache && \ + mkdir -p $BUN_RELEASE_DIR && \ + make release copy-to-bun-release-dir && \ + rm -rf $HOME/.cache zig-cache misctools package.json build-id completions build.zig -FROM build_dependencies as build_release +FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as bun.devcontainer -WORKDIR /home/ubuntu/bun +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/workspaces +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -ENV BUN_RELEASE_DIR /home/ubuntu/bun-release -RUN mkdir -p $BUN_RELEASE_DIR; make release \ - copy-to-bun-release-dir - -FROM base_with_zig_and_webkit as bun.devcontainer - -ENV WEBKIT_OUT_DIR /home/ubuntu/bun-webkit -ENV PATH "/home/ubuntu/zig:$PATH" +ENV WEBKIT_OUT_DIR ${WEBKIT_DIR} +ENV PATH "$ZIG_PATH:$PATH" ENV JSC_BASE_DIR $WEBKIT_OUT_DIR ENV LIB_ICU_PATH /home/ubuntu/icu/source/lib -ENV BUN_RELEASE_DIR /home/ubuntu/bun-release +ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR} ENV PATH "/workspaces/bun/packages/bun-linux-x64:/workspaces/bun/packages/bun-linux-aarch64:/workspaces/bun/packages/debug-bun-linux-x64:/workspaces/bun/packages/debug-bun-linux-aarch64:$PATH" ENV PATH "/home/ubuntu/zls/zig-out/bin:$PATH" @@ -202,91 +202,74 @@ COPY .devcontainer/zls.json /workspaces/workspace.code-workspace COPY .devcontainer/limits.conf /etc/security/limits.conf COPY ".devcontainer/scripts/" /scripts/ COPY ".devcontainer/scripts/getting-started.sh" /workspaces/getting-started.sh -RUN mkdir -p /home/ubuntu/.bun /home/ubuntu/.config /workspaces/bun && bash /scripts/common-debian.sh && bash /scripts/github.sh && bash /scripts/nice.sh && bash /scripts/zig-env.sh +RUN mkdir -p /home/ubuntu/.bun /home/ubuntu/.config /workspaces/bun && \ + bash /scripts/common-debian.sh && \ + bash /scripts/github.sh && \ + bash /scripts/nice.sh && \ + bash /scripts/zig-env.sh COPY .devcontainer/zls.json /home/ubuntu/.config/zls.json -FROM ubuntu:20.04 as test_base - -ARG DEBIAN_FRONTEND=noninteractive -ENV DEBIAN_FRONTEND=noninteractive - -ENV CI 1 -ENV NPM_CLIENT bun -ENV PATH "/home/ubuntu/bun/packages/bun-linux-x64:/home/ubuntu/bun/packages/bun-linux-aarch64:$PATH" - -# All this is necessary because Ubuntu decided to use snap for their Chromium packages -# Which breaks using Chrome in the container on aarch64 -RUN apt-get update && \ - apt-get install -y wget gnupg2 curl make git unzip nodejs npm psmisc && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517 && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A - -COPY ./integration /home/ubuntu/bun/integration -COPY Makefile /home/ubuntu/bun/Makefile -COPY package.json /home/ubuntu/bun/package.json - -# We don't want to worry about architecture differences in this image -COPY --from=release /opt/bun/bin/bun /home/ubuntu/bun/packages/bun-linux-aarch64/bun -COPY --from=release /opt/bun/bin/bun /home/ubuntu/bun/packages/bun-linux-x64/bun - -FROM test_base as test_create_next - -WORKDIR /home/ubuntu/bun -CMD make test-create-next - -FROM test_base as test_create_react - -WORKDIR /home/ubuntu/bun -CMD make test-create-react - - -FROM test_base as test_bun_run - -WORKDIR /home/ubuntu/bun -CMD make test-bun-run - -FROM test_base as browser_test_base - -COPY .docker/chromium.pref /etc/apt/preferences.d/chromium.pref -COPY .docker/debian.list /etc/apt/sources.list.d/debian.list - -RUN apt-get update && \ - apt-get install -y --no-install-recommends chromium - - -WORKDIR /home/ubuntu/bun - -RUN mkdir -p /var/run/dbus && ln -s /usr/bin/chromium /usr/bin/chromium-browser -RUN apt-get install -y make fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 xvfb ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils --no-install-recommends - - -FROM browser_test_base as test_hmr - -WORKDIR /home/ubuntu/bun -CMD dbus-daemon --system &> /dev/null && \ - bun install --cwd /home/ubuntu/bun/integration/snippets && \ - bun install --cwd /home/ubuntu/bun/integration/scripts && \ - bun install && \ - make test-hmr-hmr - -FROM browser_test_base as test_no_hmr - -WORKDIR /home/ubuntu/bun -CMD dbus-daemon --system &> /dev/null && \ - bun install --cwd /home/ubuntu/bun/integration/snippets && \ - bun install --cwd /home/ubuntu/bun/integration/scripts && \ - bun install && \ - make test-no-hmr - FROM ubuntu:20.04 as release -COPY --from=build_release /home/ubuntu/bun-release/bun /opt/bun/bin/bun +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + COPY .devcontainer/limits.conf /etc/security/limits.conf ENV BUN_INSTALL /opt/bun ENV PATH "/opt/bun/bin:$PATH" - +ARG BUILDARCH=amd64 LABEL org.opencontainers.image.title="Bun ${BUILDARCH} (glibc)" -LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun \ No newline at end of file +LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun +COPY --from=build_release ${BUN_RELEASE_DIR}/bun /opt/bun/bin/bun +WORKDIR /opt/bun + +ENTRYPOINT [ "/opt/bun/bin/bun" ] + + +FROM bunbunbunbun/bun-test-base as test_base + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +ARG BUILDARCH=amd64 +RUN groupadd -r chromium && useradd -d ${BUN_DIR} -M -r -g chromium -G audio,video chromium \ + && mkdir -p /home/chromium/Downloads && chown -R chromium:chromium /home/chromium + +USER chromium +WORKDIR $BUN_DIR + +ENV NPM_CLIENT bun +ENV PATH "${BUN_DIR}/packages/bun-linux-x64:${BUN_DIR}/packages/bun-linux-aarch64:$PATH" +ENV CI 1 +ENV BROWSER_EXECUTABLE /usr/bin/chromium + +COPY ./integration ${BUN_DIR}/integration +COPY Makefile ${BUN_DIR}/Makefile +COPY package.json ${BUN_DIR}/package.json +COPY .docker/run-test.sh ${BUN_DIR}/run-test.sh +COPY ./bun.lockb ${BUN_DIR}/bun.lockb + +# # We don't want to worry about architecture differences in this image +COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-aarch64/bun +COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-x64/bun + +USER root +RUN chgrp -R chromium ${BUN_DIR} && chmod g+rwx ${BUN_DIR} && chown -R chromium:chromium ${BUN_DIR} +USER chromium + +CMD [ "bash", ".run-test.sh" ] + +FROM release \ No newline at end of file diff --git a/Dockerfile.base b/Dockerfile.base new file mode 100644 index 0000000000..85b3a37b2f --- /dev/null +++ b/Dockerfile.base @@ -0,0 +1,145 @@ +FROM ubuntu:20.04 as bun-base-with-args + +FROM bun-base-with-args as bun-base + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +WORKDIR ${GITHUB_WORKSPACE} + +RUN apt-get update && \ + apt-get install --no-install-recommends -y wget gnupg2 curl lsb-release wget software-properties-common && \ + add-apt-repository ppa:longsleep/golang-backports && \ + wget https://apt.llvm.org/llvm.sh --no-check-certificate && \ + chmod +x llvm.sh && \ + ./llvm.sh 12 && \ + apt-get update && \ + apt-get install --no-install-recommends -y \ + ca-certificates \ + curl \ + gnupg2 \ + software-properties-common \ + cmake \ + build-essential \ + git \ + libssl-dev \ + ruby \ + liblld-12-dev \ + libclang-12-dev \ + nodejs \ + gcc \ + g++ \ + npm \ + clang-12 \ + clang-format-12 \ + libc++-12-dev \ + libc++abi-12-dev \ + lld-12 \ + libicu-dev \ + wget \ + unzip \ + tar \ + golang-go ninja-build pkg-config automake autoconf libtool curl && \ + update-alternatives --install /usr/bin/cc cc /usr/bin/clang-12 90 && \ + update-alternatives --install /usr/bin/cpp cpp /usr/bin/clang++-12 90 && \ + update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-12 90 && \ + npm install -g esbuild + +ENV CC=clang-12 +ENV CXX=clang++-12 + + +ARG BUILDARCH=amd64 + + +WORKDIR $GITHUB_WORKSPACE + +ENV WEBKIT_OUT_DIR ${WEBKIT_DIR} + +ENV JSC_BASE_DIR $WEBKIT_OUT_DIR +ENV LIB_ICU_PATH ${GITHUB_WORKSPACE}/icu/source/lib +ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR} +ENV BUN_DEPS_OUT_DIR ${BUN_DEPS_OUT_DIR} + +RUN cd / && mkdir -p $BUN_RELEASE_DIR $BUN_DEPS_OUT_DIR ${BUN_DIR} ${BUN_DEPS_OUT_DIR} + +LABEL org.opencontainers.image.title="Bun base image ${BUILDARCH} (glibc)" +LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun + + +FROM bun-base as bun-base-with-zig-and-webkit + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG BUILDARCH=amd64 + +WORKDIR $GITHUB_WORKSPACE + +RUN cd $GITHUB_WORKSPACE && \ + curl -o zig-linux-$BUILDARCH.zip -L https://github.com/Jarred-Sumner/zig/releases/download/dec20/zig-linux-$BUILDARCH.zip && \ + unzip -q zig-linux-$BUILDARCH.zip && \ + rm zig-linux-$BUILDARCH.zip; + +RUN cd $GITHUB_WORKSPACE && \ + curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/Jarred-Sumner/WebKit/releases/download/Bun-v0/bun-webkit-linux-$BUILDARCH.tar.gz && \ + tar -xzf bun-webkit-linux-$BUILDARCH.tar.gz && \ + rm bun-webkit-linux-$BUILDARCH.tar.gz && \ + cat $WEBKIT_OUT_DIR/include/cmakeconfig.h > /dev/null + +RUN cd $GITHUB_WORKSPACE && \ + curl -o icu4c-66_1-src.tgz -L https://github.com/unicode-org/icu/releases/download/release-66-1/icu4c-66_1-src.tgz && \ + tar -xzf icu4c-66_1-src.tgz && \ + rm icu4c-66_1-src.tgz && \ + cd icu/source && \ + ./configure --enable-static --disable-shared && \ + make -j$(nproc) + +ENV ZIG "${ZIG_PATH}/zig" + +LABEL org.opencontainers.image.title="Bun base image with zig & webkit ${BUILDARCH} (glibc)" +LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun + + +FROM debian:bullseye-slim as bun-test-base +# Original creator: +# LABEL maintainer "Jessie Frazelle " + +# Install Chromium +# Yes, including the Google API Keys sucks but even debian does the same: https://packages.debian.org/stretch/amd64/chromium/filelist +RUN apt-get update && apt-get install -y \ + chromium \ + chromium-l10n \ + fonts-liberation \ + fonts-roboto \ + hicolor-icon-theme \ + libcanberra-gtk-module \ + libexif-dev \ + libgl1-mesa-dri \ + libgl1-mesa-glx \ + libpangox-1.0-0 \ + libv4l-0 \ + fonts-symbola \ + bash \ + make \ + psmisc \ + curl \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /etc/chromium.d/ \ + && /bin/echo -e 'export GOOGLE_API_KEY="AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k"\nexport GOOGLE_DEFAULT_CLIENT_ID="811574891467.apps.googleusercontent.com"\nexport GOOGLE_DEFAULT_CLIENT_SECRET="kdloedMFGdGla2P1zacGjAQh"' > /etc/chromium.d/googleapikeys && \ + curl -L https://deb.nodesource.com/setup_16.x | bash - && \ + apt-get update && \ + apt-get install -y nodejs npm + diff --git a/Makefile b/Makefile index 657bb68eea..1583ac0109 100644 --- a/Makefile +++ b/Makefile @@ -14,12 +14,15 @@ MIN_MACOS_VERSION = 10.14 MARCH_NATIVE = ARCH_NAME := +DOCKER_BUILDARCH = ifeq ($(ARCH_NAME_RAW),arm64) ARCH_NAME = aarch64 + DOCKER_BUILDARCH = arm64 BREW_PREFIX_PATH = /opt/homebrew MIN_MACOS_VERSION = 11.0 else ARCH_NAME = x64 + DOCKER_BUILDARCH = amd64 BREW_PREFIX_PATH = /usr/local MARCH_NATIVE = -march=native endif @@ -284,6 +287,23 @@ zlib: cd $(BUN_DEPS_DIR)/zlib; cmake $(CMAKE_FLAGS) .; make CFLAGS=$(CFLAGS); cp $(BUN_DEPS_DIR)/zlib/libz.a $(BUN_DEPS_OUT_DIR)/libz.a +docker-login: + docker login ghcr.io --username jarred@jarredsumner.com + +docker-push-base: + BUILDKIT=1 docker build -f Dockerfile.base --build-arg GITHUB_WORKSPACE=/build --platform=linux/$(DOCKER_BUILDARCH) --tag bun-base --target base . + BUILDKIT=1 docker build -f Dockerfile.base --build-arg GITHUB_WORKSPACE=/build --platform=linux/$(DOCKER_BUILDARCH) --tag bun-base-with-zig-and-webkit --target base-with-zig-and-webkit . + BUILDKIT=1 docker build -f Dockerfile.base --build-arg GITHUB_WORKSPACE=/build --platform=linux/$(DOCKER_BUILDARCH) --tag bun-base-with-args --target base-with-args . + + docker tag bun-base ghcr.io/jarred-sumner/bun-base:latest + docker push ghcr.io/jarred-sumner/bun-base:latest + + docker tag bun-base-with-zig-and-webkit ghcr.io/jarred-sumner/bun-base-with-zig-and-webkit:latest + docker push ghcr.io/jarred-sumner/bun-base-with-zig-and-webkit:latest + + docker tag bun-base-with-args ghcr.io/jarred-sumner/bun-base-with-args:latest + docker push ghcr.io/jarred-sumner/bun-base-with-args:latest + require: @echo "Checking if the required utilities are available..." @cmake --version >/dev/null 2>&1 || (echo -e "ERROR: cmake is required."; exit 1) @@ -327,7 +347,7 @@ api: $(PRETTIER) --write src/api/schema.d.ts node-fallbacks: - @cd src/node-fallbacks; $(NPM_CLIENT) install; $(NPM_CLIENT) --silent build + @cd src/node-fallbacks; $(NPM_CLIENT) install; $(NPM_CLIENT) run --silent build fallback_decoder: @esbuild --target=esnext --bundle src/fallback.ts --format=iife --platform=browser --minify > src/fallback.out.js @@ -339,7 +359,7 @@ runtime_js_dev: @NODE_ENV=development esbuild --define:process.env.NODE_ENV="development" --target=esnext --bundle src/runtime/index.ts --format=iife --platform=browser --global-name=BUN_RUNTIME --external:/bun:* > src/runtime.out.js; cat src/runtime.footer.js >> src/runtime.out.js bun_error: - @cd packages/bun-error; $(NPM_CLIENT) install; $(NPM_CLIENT) --silent build + @cd packages/bun-error; $(NPM_CLIENT) install; $(NPM_CLIENT) run --silent build generate-install-script: @rm -f $(PACKAGES_REALPATH)/bun/install.js diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..119c3bb0f4dd2bbe058b572861663ab08de0fdab GIT binary patch literal 7340 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 literal 0 HcmV?d00001 diff --git a/integration/scripts/browser.js b/integration/scripts/browser.js index 986e96c7fa..c6da2623c3 100644 --- a/integration/scripts/browser.js +++ b/integration/scripts/browser.js @@ -75,6 +75,7 @@ function writeSnapshot(name, code) { const baseOptions = { dumpio: !!process.env.CI_DEBUG, + args: [ "--disable-gpu", "--disable-dev-shm-usage", @@ -85,6 +86,7 @@ const baseOptions = { "--use-fake-device-for-media-stream", "--disable-sync", ], + executablePath: process.env.BROWSER_EXECUTABLE, headless: true, }; diff --git a/integration/scripts/bun.lockb b/integration/scripts/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d7a467e647099b925d52f37f3867ef1ab7b7cdd8 GIT binary patch literal 17219 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 x1u6xwg|w7T!udS5z*H1MsI{{O>= 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