Coder Social home page Coder Social logo

replit / polygott Goto Github PK

View Code? Open in Web Editor NEW
392.0 51.0 104.0 3.2 MB

Base Docker image for the Repl.it evaluation server

Home Page: https://replit.com

License: MIT License

Dockerfile 11.04% Makefile 14.50% Shell 53.40% JavaScript 2.66% Python 15.56% EJS 2.78% Nix 0.05%

polygott's Introduction

Polygott

Warning: This repository is now obsolete. Replit is no longer developing Polygott and is fully betting on nix to expose tools and languages on Repls. This repository will still exist for archiving and historical purposes.


Overview

Replit.com allows you to quickly get started with any programming language online. In order to provide this capability, our evaluation server uses Docker with the buildx CLI plugin to ensure that all these languages are installed with the appropriate environment set up.

We previously used a separate Docker image for each language, but concluded that it was both simpler and more efficient to use a single image which contains all supported languages simultaneously. The code necessary to build this combined image, Polygott, resides in this repository. If you're lost and need some reference, we have a blog where we added elisp.

Because of the fact that building a monolithic image is unwieldy and takes too much time, the build itself is made of a directed graph of intermediate nodes, where each language is a node, and they all get stitched together at the end to build the final combined image.

Build and run

You can build either the entire image, a version that has a bundle of languages, and a version that is limited to a single language. The second one is used for CI, and the latter is recommended when you are adding or modifying support for a particular language, since building the entire image takes an extremely long time. Makefile targets are provided for each of these cases:

% make help
usage:
  make image         Build Docker image with all languages
  make image-ci      Build Docker image with all languages needed for CI
  make image-LANG    Build Docker image with single language LANG
  make run           Build and run image with all languages
  make run-LANG      Build and run image with single language LANG
  make test          Build and test all languages
  make test-LANG     Build and test single language LANG
  make changed-test  Build and test only changed/added languages
  make help          Show this message

As you can see, there is a facility for testing that languages have been installed and configured correctly. This involves running commands which are specified in the languages' configuration files, and checking that the output is as expected. To debug, you can also use the make run and make run-LANG targets to launch shells within the images.

You may want to bypass Docker's cache temporarily, for example to debug an intermittent network error while building one of the languages. To do this, identify the docker build command which is run by the Makefile, and run it yourself with the --no-cache flag.

The CI requires having up-to-date generated artifacts (the files in out/) committed to ensure a consistent Docker build environment. These will be refreshed by running the tests, or by running make -B build/stamps/out).

Language configuration

Each supported language has a TOML file in the languages subdirectory. The meaningful keys are as follows:

Mandatory

  • entrypoint: The name of the file which will be executed on Replit.com when you press the Run button. This is used in the detect-language script built into the Polygott image: if a file exists with this name, then the project is detected to have this language. (Ties are resolved by popularity.) It is also used by the run-project script in order to identify the main file of the project.
  • extensions: List of file extensions (use "py", not ".py") which files of this language may have. This is used in the detect-language script built into the Polygott image: if a file exists with one of these extensions, then the project is detected to have this language. (Ties are resolved by popularity.)
  • name: The name of the language. The TOML file should then be named <name>.toml. This is also what you pass to the Makefile's image-LANG and test-LANG targets.

Optional

  • aliases: List of strings indicating alternate names for the language, in addition to name. This is used to allow the run-language-server script to accept -l c++ in addition to -l cpp, among other things.
  • aptKeys: List of PGP key IDs that must be passed to apt-key in order for the custom aptRepos configured to be trusted. For example, "09617FD37CC06B54".
  • aptRepos: List of repository strings that must be passed to add-apt-repository in order for the custom packages configured to be available. For example, "deb https://dist.crystal-lang.org/apt crystal main".
  • compile
    • command: The full command to compile the entrypoint file, as a list, including the filename. This is run before the run command.
  • languageServer
    • command: Command to start an LSP language server, as a list. This is used in the run-language-server script built into the Polygott image.
  • packages: List of additional Ubuntu packages to install for this language. (Packages which are required by all or many languages should be placed instead in packages.txt.) Check the Ubuntu Bionic package listing to see what your options are.
  • popularity: Floating-point number indicating how popular the language is. Defaults to 2.0. This is used in the detect-language script built into the Polygott image: if a project is detected as more than one language, the winner is chosen by comparing popularity scores.
  • run: Required, unless you provide no tests or you have asked to skip all of them.
    • command: The full command to run the entrypoint file, as a list, including the filename. It is run after the compile command, if one is provided. This is used to run tests.
  • runtimeSetup: List of shell commands to be run by the polygott-lang-setup script built into the Polygott image.
  • setup: List of shell commands to be run in phase 2 of the build process, as post-install steps.
  • tests
    • TESTNAME
      • code: String to write to the entrypoint file before invoking the run command.
      • output: String expected to be written to stdout (not stderr) by running the code.
      • skip: Boolean, optional. If true, then the test is skipped. This allows you to easily "comment out" a test if there is something wrong with the infrastructure.
  • versionCommand: A command to output the version of the language, as a list of strings. For example, ["kotlin", "-version"]. This is used in the polygott-survey command built into the Polygott image. (If versionCommand is omitted, some heuristics are used to guess it.)

Build process

Usage

Aside from all the language executables (python3, ruby, rust, etc.), there are several additional scripts available within the Docker image. They are documented below.

polygott-self-test

Run the tests defined in each language's configuration file, as in make test or make test-LANG. Always run all the tests, but if one of them fails, exit with a non-zero return code.

polygott-survey

Run the versionCommand specified for every language, and output the results in tabular format to stdout.

polygott-lang-setup [-l LANG]

Copy the contents of /opt/homes/LANG/ to /home/runner/, and run the runtimeSetup commands for it, if any were provided. LANG defaults to the output of detect-language.

detect-language

Try to identify the language used by the project in the current directory. This first checks if the entrypoint file exists for any language, and then checks if a file with any of the registered extensions exists for a language. If multiple languages match in either of those two phases, then the popularity of the two languages is used to resolve ties.

Output the language name to stdout if one is detected, otherwise do nothing.

run-project [-s] [-b] [-l LANG]

Execute the compile and run commands on the entrypoint file in the current directory. LANG defaults to the output of detect-language. If -s is passed, then the entrypoint file is written with the contents of stdin. If -b is passed, then some special logic is used instead of the compile and run commands; see the source for details.

run-language-server [-l LANG]

Run the languageServer command configured in the language's configuration file. LANG defaults to the output of detect-language.

Deployment

When a commit is merged to master, CircleCI automatically builds Polygott and pushes the image to Docker Hub. A Replit engineer has to then push the new Polygott to production.

polygott's People

Contributors

alanvf avatar amasad avatar basicer avatar cbrewster avatar codelongandprosper90 avatar donno2048 avatar finalfantasia avatar frissyn avatar hackermondev avatar jgautier avatar kochman avatar leon332157 avatar lhchavez avatar lunaroyster avatar masad-frost avatar minivera avatar miroreo avatar paulbone avatar potentialstyx avatar raxod502 avatar satyarohith avatar scoder12 avatar sergeichestakov avatar stekovaya avatar syrusakbary avatar thesephist2 avatar turbio avatar wbourne0 avatar zabot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

polygott's Issues

Polygott Docker images error in kubernetes ?

Polygott Docker Image - replco/polygott:c82c08a720ba1fd537d4fba17eed883ab87c0fd7
Docker image link - https://hub.docker.com/layers/replco/polygott/c82c08a720ba1fd537d4fba17eed883ab87c0fd7/images/sha256-03f1f7c5d0d66ded71ca20c5b64e56f43029c745265f55d32d5c6f685bd50f31?context=explore
Whenever we deploy the yaml file using this docker image showing this error :

gcstest 0/1 CrashLoopBackOff 10 56m

detail error :

Type Reason Age From Message


Normal Scheduled 48m default-scheduler Successfully assigned default/gcstest to gke-cluster-2-default-pool-cc1f421b-0k6g
Normal Pulling 48m kubelet Pulling image "replco/polygott:c82c08a720ba1fd537d4fba17eed883ab87c0fd7"
Normal Pulled 18m kubelet Successfully pulled image "replco/polygott:c82c08a720ba1fd537d4fba17eed883ab87c0fd7" in 29m58.832592007s
Normal Created 17m (x5 over 18m) kubelet Created container gcstest
Normal Started 17m (x5 over 18m) kubelet Started container gcstest
Normal Pulled 17m (x4 over 18m) kubelet Container image "replco/polygott:c82c08a720ba1fd537d4fba17eed883ab87c0fd7" already present on machine
Warning BackOff 3m45s (x71 over 18m) kubelet Back-off restarting failed container

Support for .NET Core runtime vs Mono

Adding support for .NET core SDK is fairly straightforward. Using the dotnet CLI allows modern project management and runtime. Currently, replit supports only mono runtime, which allows only compiling a file into an exe output.
Being able to use packages with C# is a basic requirement.
While it's also fairly straightforward to install dotnet separately, I believe this should be a core supported feature.

polygott-survey wrong for pascal

Returns:

pascal               Error: Illegal parameter: --version

I'm guessingpascal.toml is missing:

versionCommand = ["fpc", "-iV"]

Alternatively:

versionCommand = ["fpc", "-iW"]

The difference:

root@1834f17ee846:/home/runner# fpc -iV
3.0.4
root@1834f17ee846:/home/runner# fpc -iW
3.0.4+dfsg-18ubuntu2

[suggestion] Add an option set the command for a REPL

It would be cool if, in the TOML file for a language, there could be an option to specify the repl command (repl as in LISP repl rather than Repl.it repl). For example, Python could use something like:

[repl]
command = "python3"

installation setup issue ?

when build the project using the make image command showing error like below code?

$** make image**
mkdir -p "build/stamps/"
mkdir -p "build/"
docker buildx build
--progress=plain
--cache-from="docker.io/replco/polygott-cache:phase0"
--cache-to="type=inline,mode=max"
--target="polygott-phase0"
--tag="polygott:phase0" \
--load
- < build/context.tar.bz2
failed to get console mode for stdin: The handle is invalid.
error during connect: Get http://node-amd64:2375/v1.24/containers/buildx_buildkit_mybuild0/json: dial tcp: lookup node-amd64: no such host
make: *** [build/stamps/build-layer-phase0] Error 1

Polygott is now deprecated

Hello!

We announced a few months ago that we would be moving off of polygott and into nix in https://blog.replit.com/nix . As such, this repository will be mostly unmaintained and we will not be merging any pull requests (unless they are patching a security vulnerability).

Please reach out in Discord if you need any help with nix.

AttributeError: module 're' has no attribute 'Match'

Issue:

Running make command in root directory with any arguments fails with a Python AttributeError.

Environment:

Bash REPL on replit.com. Cloned polygott repo into base directory.

Error:

Traceback (most recent call last):
  File "./extra/manifest_tool.py", line 465, in <module>
    _main()
  File "./extra/manifest_tool.py", line 459, in _main
    context(args)
  File "./extra/manifest_tool.py", line 333, in context
    def _sub_globs(match: re.Match) -> str:
AttributeError: module 're' has no attribute 'Match'
Makefile:30: recipe for target 'build/context.tar.bz2' failed
make: *** [build/context.tar.bz2] Error 1

Add Lit Support

Lit is a fast-growing JavaScript library, would recommend adding.

detect language can be very slow

the detect-language script can take a while as find needs to walk the entire project directory structure many times. Projects with deps or other deep dirs end up taking a few seconds just to detect language.

README documentation for compile command is inaccurate

The readme documents the compile.command option as follows:

The full command to compile the entrypoint file, as a list, including the filename. This is run before the run command.

But examining several of the language configs under languages shows that "including the filename" is clearly not the case:

None of these command lists actually include the entrypoint source file, and trying to run those commands in the terminal gives an error like clang-7: error: no input files or ghc: no input files Usage: For basic information, try the --help' option.`

Image Build Fails on gapl language setup

Screen Shot 2020-10-14 at 4 08 55 PM

When building the image the build scripts call undup(line) in phase2.ejs while installing each language.

undup is a function in index.js that seems to comment out commands in the install array if they are already in the dc array in index.js. It seems like this means commands from previously installed languages would still be in that array including previous make and make install?

This causes the make and make install commands to be commented out, and the apl binary to fail to be created and copied, causing a crash.

I was going to make a PR but I realized I don't really understand the point of the dup check in the first place so I thought I'd just comment.

SDL2-mixer does not install correctly

.replit:

language = "c"
run = "([ $(which sdl-config) ] && make && ./basque) || install-pkg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev"

Everything appears to install correctly:

 ([ $(which sdl-config) ] && make && ./basque) || install-pkg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
clang -Wall -Wextra -std=c99 source/basque.c '-Wl,-rpath,$ORIGIN' `$(which sdl2-config) --cflags --libs` -l SDL2_image -l SDL2_mixer -l SDL2_ttf -o basque
In file included from source/basque.c:1:
In file included from source/initialization.h:1:
In file included from source/mechanics.h:1:
In file included from source/map.h:1:
source/types.h:3:10: fatal error: 'SDL2/SDL_mixer.h' file not found
#include <SDL2/SDL_mixer.h>
         ^~~~~~~~~~~~~~~~~~
1 error generated.
Makefile:39: recipe for target 'basque' failed
make: *** [basque] Error 1
-----> Updating apt caches
       Ign:1 https://storage.googleapis.com/download.dartlang.org/linux/debian stable InRelease
       Get:2 https://storage.googleapis.com/download.dartlang.org/linux/debian stable Release [941 B]
       Get:3 https://deb.nodesource.com/node_10.x bionic InRelease [4,584 B]
       Get:4 https://storage.googleapis.com/download.dartlang.org/linux/debian stable Release.gpg [819 B]
       Get:5 https://download.mono-project.com/repo/ubuntu stable-bionic InRelease [5,143 B]
       Get:6 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
       Get:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
       Get:8 http://ppa.launchpad.net/avsm/ppa/ubuntu bionic InRelease [15.4 kB]
       Ign:9 https://dl.bintray.com/nxadm/rakudo-pkg-debs bionic InRelease
       Get:10 https://dl.bintray.com/nxadm/rakudo-pkg-debs bionic Release [1,840 B]
       Get:11 https://dist.crystal-lang.org/apt crystal InRelease [2,496 B]
       Get:13 https://dl.bintray.com/nxadm/rakudo-pkg-debs bionic Release.gpg [821 B]
       Get:14 http://ppa.launchpad.net/bartbes/love-stable/ubuntu bionic InRelease [20.7 kB]
       Get:15 https://deb.nodesource.com/node_10.x bionic/main amd64 Packages [766 B]
       Get:12 https://packagecloud.io/cs50/repo/ubuntu trusty InRelease [23.2 kB]
       Get:16 https://storage.googleapis.com/download.dartlang.org/linux/debian stable/main amd64 Packages [2,765 B]
       Get:17 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
       Get:18 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease [15.9 kB]
       Get:19 https://download.mono-project.com/repo/ubuntu stable-bionic/main amd64 Packages [48.9 kB]
       Get:20 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
       Get:21 http://ppa.launchpad.net/kelleyk/emacs/ubuntu bionic InRelease [21.3 kB]
       Get:22 https://dl.bintray.com/nxadm/rakudo-pkg-debs bionic/main amd64 Packages [3,063 B]
       Get:23 https://dist.crystal-lang.org/apt crystal/main amd64 Packages [447 B]
       Get:24 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [884 kB]
       Get:25 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu bionic InRelease [15.4 kB]
       Get:26 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
       Get:27 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [1,038 kB]
       Get:28 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
       Get:29 http://ppa.launchpad.net/avsm/ppa/ubuntu bionic/main amd64 Packages [425 B]
       Get:31 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [9,558 B]
       Get:32 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [100 kB]
       Get:30 https://packagecloud.io/cs50/repo/ubuntu trusty/main amd64 Packages [2,415 B]
       Get:33 http://ppa.launchpad.net/bartbes/love-stable/ubuntu bionic/main amd64 Packages [885 B]
       Get:34 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic/main amd64 Packages [35.1 kB]
       Get:35 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1,344 kB]
       Get:36 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
       Get:37 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,413 kB]
       Get:38 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,336 kB]
       Get:39 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [27.1 kB]
       Get:40 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [116 kB]
       Get:41 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [8,286 B]
       Get:42 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [8,432 B]
       Get:43 http://ppa.launchpad.net/kelleyk/emacs/ubuntu bionic/main amd64 Packages [1,976 B]
       Get:44 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu bionic/main amd64 Packages [5,025 B]
rm: cannot remove '/var/cache/apt/archives/partial/*.deb': Permission denied
       Fetched 18.5 MB in 4s (4,247 kB/s)
       Reading package lists...
-----> Fetching .debs for libsdl2-dev
       Reading package lists...
       Building dependency tree...
       0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 249 not upgraded.
       Need to get 683 kB of archives.
       After this operation, 0 B of additional disk space will be used.
       Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 libsdl2-dev amd64 2.0.8+dfsg1-1ubuntu1.18.04.4 [683 kB]
       Fetched 683 kB in 1s (730 kB/s)
       Download complete and in download only mode
W: --force-yes is deprecated, use one of the options starting with --allow instead.
-----> Fetching .debs for libsdl2-image-dev
       Reading package lists...
       Building dependency tree...
       The following NEW packages will be installed:
         libsdl2-image-dev
       0 upgraded, 1 newly installed, 0 to remove and 249 not upgraded.
       Need to get 68.6 kB of archives.
       After this operation, 245 kB of additional disk space will be used.
       Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libsdl2-image-dev amd64 2.0.3+dfsg1-1 [68.6 kB]
       Fetched 68.6 kB in 0s (161 kB/s)
       Download complete and in download only mode
W: --force-yes is deprecated, use one of the options starting with --allow instead.
-----> Fetching .debs for libsdl2-mixer-dev
       Reading package lists...
       Building dependency tree...
       The following additional packages will be installed:
         fluidr3mono-gm-soundfont libsdl2-mixer-2.0-0
       The following NEW packages will be installed:
         fluidr3mono-gm-soundfont libsdl2-mixer-2.0-0 libsdl2-mixer-dev
       0 upgraded, 3 newly installed, 0 to remove and 249 not upgraded.
       Need to get 18.9 MB of archives.
       After this operation, 24.1 MB of additional disk space will be used.
       Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fluidr3mono-gm-soundfont all 2.315-4 [18.7 MB]
       Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libsdl2-mixer-2.0-0 amd64 2.0.2+dfsg1-2 [58.4 kB]
       Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libsdl2-mixer-dev amd64 2.0.2+dfsg1-2 [73.6 kB]
       Fetched 18.9 MB in 2s (9,982 kB/s)
       Download complete and in download only mode
W: --force-yes is deprecated, use one of the options starting with --allow instead.
-----> Fetching .debs for libsdl2-ttf-dev
       Reading package lists...
       Building dependency tree...
       The following additional packages will be installed:

But then compilation fails:

clang -Wall -Wextra -std=c99 source/basque.c '-Wl,-rpath,$ORIGIN' `$(whic
h sdl2-config) --cflags --libs` -l SDL2_image -l SDL2_mixer -l SDL2_ttf -
o basque
In file included from source/basque.c:1:
In file included from source/initialization.h:1:
In file included from source/mechanics.h:1:
In file included from source/map.h:1:
source/types.h:3:10: fatal error: 'SDL2/SDL_mixer.h' file not found
#include <SDL2/SDL_mixer.h>
         ^~~~~~~~~~~~~~~~~~
1 error generated.
Makefile:39: recipe for target 'basque' failed
make: *** [basque] Error 1

Elixir crashes

In any Elixir repl, running elixir --version to print the version of installed erlang and elixir crashes with the following error:

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [kernel-poll:false]

{"init terminating in do_boot",{{badmatch,error},[{'Elixir.System',build,0,[{file,"lib/system.ex"},{line,172}]},{'Elixir.System',build_info,0,[{file,"lib/system.ex"},{line,164}]},{'Elixir.Kernel.CLI',parse_shared,2,[{file,"lib/kernel/cli.ex"},{line,153}]},{'Elixir.Kernel.CLI','shared_option?',3,[{file,"lib/kernel/cli.ex"},{line,113}]},{'Elixir.Kernel.CLI',main,1,[{file,"lib/kernel/cli.ex"},{line,14}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ({{badmatch,error},[{Elixir.System,build,0,[{_},{_}]},{Elixir.System,build_info,0,[{_},{_}]},{Elixir.Kernel.CLI,parse_shared,2,[{_},{_}]},{Elixir.Kernel.CLI,shared_option?,

Crash dump is being written to: erl_crash.dump...done

Expected output:

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [kernel-poll:false]

Elixir <current version here> (compiled with Erlang/OTP 20)

Also, looks like none of the mix tasks work either. "mix help" errors out with: ** (Mix) The task "compile.all" could not be found

Advanced Port Mapping

Hey first of all thankyou folks working at repl.it for providing such a great product. Absolutely love it. I had one request in my mind. Can you please have advanced port mapping like for example right now every opened port gets proxied to port 80 of the url. Can it be something like we can have multiple ports opened running multiple servers. So for example server 1 can be on example.repl.com:9000 and other on example.repl.com:7000 . Thanks once again. Hope to get a reply soon.

Add README.md

A brief README on what this repo is and how to use it.

Add Haskell Language Server

HLS is the project collecting most of the manpower for Haskell IDE backend development. It supports LSP, and I saw that the README.md of this repository mentions LSP server, so I wrote this issue.
Is it possible to add HLS as a IDE backend of repl.it editor? If that's possible, it would be awesome.

[rfc] speed up build times

The long build times for polygott seems to be a pretty universal issue. Specifically phase2 (the language installation step) must almost always run and takes by far the longest.

Proposed solutions:

  • Build the base image (phase0 + phase1), an image for every language (phase2), then copy the relevant contents out of the the language images into a single unified image.
    • It's probably going to be tricky to define the relevant content and we'll to list that somewhere llike the toml.
  • Build the base image (phase0 + phase1) followed by an image for every language (phase2) based on that base image.
    • This betrays a goal of polygott as every language is now isolated. We may want to choose a set of languages we deem important to be included in the base image.

`make test` doesn't use `polygott-lang-setup`

It seems that make test does not use polygott-lang-setup, shouldn't it?

Full context:

I'm working on Haxe language support, and I want to write a config file next to the entrypoint in the project directory. I tried to use

runtimeSetup = [
  "echo '--run Main' > /home/runner/run.hxml"
]

But it seems to have no effect when running make test-haxe.

Ruby REPLs don't run with Bundler Context

By default, all Ruby REPLs run with the command ruby main.rb. This makes it impossible to run Ruby files with the context of Bundled Gems without explicitly setting run="bundler exec ruby main.rb" in the .replit file or running it in the Shell.

I don't know how package management works for Repl.it exactly, but this seems like some kind of oversight. If you were to do the standard gem installation method (i.e open the Interactive Package Manager in the IDE and search/add your gem) and then run your main Ruby file, any gems you might've installed straight up don't get included. The method described in the Repl.it blog (here) is also outdated and doesn't work either.

The most consistent fix I could come up with is bundler exec ruby main.rb, which allows the main Ruby file to be run with the context of gems you installed with bundle.

I'd love to open a PR and work on this if you guys are open to that. :P

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.