Git Product home page Git Product logo

dockerfiles's Introduction

Submission system

TL;DR

During the full round of the contest teams will be required to submit a small program. To do so, a team will securely grant the access to its private Git repository to organizers. We cannot disclose the nature of this program in advance, but we would like you to get acquainted with our submission system. Please check that there's a Dockerfile for your programming language of choice and send us a pull request or raise an issue if you have a suggestion or question.

Getting started

ICFPC 2020 organizers believe that most teams use version control systems to store their code during the contest. We would like to encourage this good engineering practice, so we decided to accept submissions directly from Git repositories.

To submit code for ICFPC 2020, please:

  1. Create a private Git repository that is accessible from the Internet. You are free to choose any cloud-based repository hosting like GitHub, BitBucket, GitLab, etc. We recommend using GitHub or GitLab because their free plans allow unlimited private repositories with unlimited collaborators. This way you can use a single repository to collaborate on your code and to submit it. Please, refer to GitHub or GitLab documentation to learn more.
  2. We suggest that you use one of our starter kits as a starting point for your repository. You can find starter kits for all the supported platforms among the repositories published by our GitHub organization. Should you choose not to clone any of our starter kits, please note that you are required to have .platform, build.sh and run.sh files in the root of your repository. The purpose of these files is explained later in this document.
  3. Copy clone URL of your new repository and use it to register your team on the ICFPC web site. You should select the SSH clone option, so your URL looks like this: [email protected]:teamname/reponame.git.
  4. After the start of ICFPC, get your personal SSH key from organizers. Grant read access for that key to your repository. If you're using GitHub, this option is available under Settings → Deploy keys (see documentation to learn more). If you're using GitLab, this option is available under Settings → Repository → Deploy Keys (expand) (see documentation to learn more).
  5. Create a branch called submission in your repository. You can also create additional optional branches called submissions/* if you need. Only the code from these branches (not master!) will be considered as a submission. You can use other branches as you like, e.g. for active development.

Docker images

To support as many platforms, frameworks and programming languages as possible, ICFPC 2020 organizers use Docker to run and evaluate team's submissions.

Dockerfile is essentially a list of instructions required to build an executable from your source code.

In an effort to put all teams in similar positions, we won't require any Docker knowledge and won't allow custom Dockerfiles written by teams. This repository contains pre-written Dockerfiles for popular languages and frameworks (see dockerfiles directory). Only these Dockerfiles will be allowed by our submission system.

If your favorite language is missing, or you know a way to improve existing Dockerfiles, please raise an issue or open a pull request in this repository at any time before or during the contest.

Submission mechanism

Submission system continuously checks every team's repository for updates in the submission and submissions/* branches (refs/heads/submission and refs/heads/submissions/* to be accurate). All other branches are ignored. New commits trigger a build which has the following steps:

  1. Clone the repository into a clean directory, check out the appropriate branch.
  2. Read the first word from the .platform file.
  3. Create/replace a Dockerfile in the root directory with contents from dockerfiles/<platform>/Dockerfile of this repository (not your team's repository). <platform> is the word from step 2.
  4. Run docker build .. This step will run the build.sh script in your repository. Resulting image will be tagged with the commit hash and appear in the list of your submissions in your profile on the ICFPC web site, along with build logs. Assuming everything went well, your submission is now accepted and ready to run.

There will be no Internet access during build. You will be limited to what your base Docker image provides and to the contents of your repository.

Build time will be limited to 10 minutes.

Running mechanism

Docker image built from your code will be started with a docker run command. This command will run the run.sh script in your repository.

Command line arguments will be provided to your program. Your code won't have access to the Internet. However, your program will have to communicate with a remote server of organizers via HTTP.

dockerfiles's People

Contributors

3b avatar aankor avatar aergus avatar akesling avatar altgr avatar autotaker avatar barvins avatar beevee avatar draftcode avatar dtsarapkin avatar edoput avatar garasubo avatar igorlukanin avatar janiczek avatar jwarwick avatar last-g avatar minoru avatar moiseev avatar murmour avatar nya3jp avatar piisalie avatar spaceorc avatar spdegabrielle avatar steinybot avatar tomerun avatar tonsky avatar variar avatar

Stargazers

 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

dockerfiles's Issues

Scala submission failed with SIGILL

What I've done:

  • [*] created a private Git repository
  • [*] copied the deploy key and added it to the repository
  • [*] created a branch called submission
  • [*] downloaded a starter kit
  • [*] committed and pushed the starter kit
  • [*] waited for more than 10 minutes

Here's the problem:

[WHAT WENT WRONG]

The build failed with:

[12:28:35] : Step 2/7: replace dockerfile with our version (Command Line)
[12:28:35] :	 [Step 2/7] Starting: /opt/buildagent/temp/agentTmp/custom_script9028038695576878708
[12:28:35] :	 [Step 2/7] in directory: /opt/buildagent/work/5c8458c2f44b95ac
[12:28:36] :	 [Step 2/7] Process exited with code 0
[12:28:36]E: Step 3/7: build docker image (Docker) (24s)
[12:28:36] :	 [Step 3/7] Starting: docker build -t icfpc-registry.kontur.host/icfpc_submissions/2625c98f56c348e58631d07067ae832d:9a5c6195ee6dbcc935776a63382755a854c2d871 -t 241256198909.dkr.ecr.us-east-2.amazonaws.com/2625c98f56c348e58631d07067ae832d:9a5c6195ee6dbcc935776a63382755a854c2d871 --pull --network none -f Dockerfile .
[12:28:36] :	 [Step 3/7] in directory: /opt/buildagent/work/5c8458c2f44b95ac
[12:28:36] :	 [Step 3/7] Sending build context to Docker daemon  16.78MB
[12:28:36] :	 [Step 3/7] 
[12:28:36] :	 [Step 3/7] Step 1/7 : FROM icfpcontest2020/scala
[12:28:38] :	 [Step 3/7] latest: Pulling from icfpcontest2020/scala
[12:28:38] :	 [Step 3/7] 4167d3e14976: Pulling fs layer
[12:28:38] :	 [Step 3/7] 345cf19c142c: Pulling fs layer
[12:28:38] :	 [Step 3/7] baeb5b3b9357: Pulling fs layer
[12:28:38] :	 [Step 3/7] 3b0c85193bfe: Pulling fs layer
[12:28:38] :	 [Step 3/7] 3b0c85193bfe: Waiting
[12:28:39] :	 [Step 3/7] 4167d3e14976: Verifying Checksum
[12:28:39] :	 [Step 3/7] 4167d3e14976: Download complete
[12:28:39] :	 [Step 3/7] baeb5b3b9357: Download complete
[12:28:39] :	 [Step 3/7] 4167d3e14976: Pull complete
[12:28:41] :	 [Step 3/7] 3b0c85193bfe: Verifying Checksum
[12:28:41] :	 [Step 3/7] 3b0c85193bfe: Download complete
[12:28:45] :	 [Step 3/7] 345cf19c142c: Verifying Checksum
[12:28:45] :	 [Step 3/7] 345cf19c142c: Download complete
[12:28:54] :	 [Step 3/7] 345cf19c142c: Pull complete
[12:28:55] :	 [Step 3/7] baeb5b3b9357: Pull complete
[12:28:55] :	 [Step 3/7] 3b0c85193bfe: Pull complete
[12:28:55] :	 [Step 3/7] Digest: sha256:b12809acaf7fef9f2f424b8e77c03d7ff49b698207f66853fa1bc9cd79e05ceb
[12:28:55] :	 [Step 3/7] Status: Downloaded newer image for icfpcontest2020/scala:latest
[12:28:55] :	 [Step 3/7]  ---> ce55cb81abab
[12:28:55] :	 [Step 3/7] Step 2/7 : WORKDIR /solution
[12:28:56] :	 [Step 3/7]  ---> Running in 613d711de15c
[12:28:56] :	 [Step 3/7] Removing intermediate container 613d711de15c
[12:28:56] :	 [Step 3/7]  ---> 891f5e9be49f
[12:28:56] :	 [Step 3/7] Step 3/7 : COPY . .
[12:28:57] :	 [Step 3/7]  ---> 9260e3d381aa
[12:28:57] :	 [Step 3/7] Step 4/7 : RUN chmod +x ./build.sh
[12:28:57] :	 [Step 3/7]  ---> Running in 156b2e05aab0
[12:28:58] :	 [Step 3/7] Removing intermediate container 156b2e05aab0
[12:28:58] :	 [Step 3/7]  ---> fbdfc711b566
[12:28:58] :	 [Step 3/7] Step 5/7 : RUN chmod +x ./run.sh
[12:28:58] :	 [Step 3/7]  ---> Running in 665f6be8ee3f
[12:28:59] :	 [Step 3/7] Removing intermediate container 665f6be8ee3f
[12:28:59] :	 [Step 3/7]  ---> 68bc72545724
[12:28:59] :	 [Step 3/7] Step 6/7 : RUN ./build.sh
[12:28:59] :	 [Step 3/7]  ---> Running in 8f0cc4b25b14
[12:28:59] :	 [Step 3/7] #
[12:28:59] :	 [Step 3/7] # A fatal error has been detected by the Java Runtime Environment:
[12:28:59] :	 [Step 3/7] #
[12:28:59] :	 [Step 3/7] #  SIGILL (0x4) at pc=0x00007f2d59f098f2, pid=20, tid=21
[12:28:59] :	 [Step 3/7] #
[12:28:59] :	 [Step 3/7] # JRE version:  (14.0+33) (build )
[12:28:59] :	 [Step 3/7] # Java VM: OpenJDK 64-Bit Server VM (14-ea+33, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
[12:28:59] :	 [Step 3/7] # Problematic frame:
[12:28:59] :	 [Step 3/7] # v  ~StubRoutines::call_stub
[12:28:59] :	 [Step 3/7] #
[12:28:59] :	 [Step 3/7] # Core dump will be written. Default location: /solution/core.20
[12:28:59] :	 [Step 3/7] #
[12:28:59] :	 [Step 3/7] # An error report file with more information is saved as:
[12:28:59] :	 [Step 3/7] # /solution/hs_err_pid20.log
[12:29:00] :	 [Step 3/7] #
[12:29:00] :	 [Step 3/7] #
[12:29:00] :	 [Step 3/7]  [91m/usr/local/share/scala/bin/scalac: line 25:    20 Aborted                 (core dumped) "$@"
[12:29:00]W:	 [Step 3/7] The command '/bin/sh -c ./build.sh' returned a non-zero code: 134
[12:29:00] :	 [Step 3/7]  [0m
[12:29:00]W:	 [Step 3/7] Process exited with code 134
[12:29:00]E:	 [Step 3/7] Process exited with code 134 (Step: build docker image (Docker))
[12:29:00]E:	 [Step 3/7] JVM crashed
[12:29:00]E:	 [Step 3/7] Step build docker image (Docker) failed

A fresh checkout of the same repository and branch works perfectly fine for me:

❯ docker build --pull --network none --file ../dockerfiles/dockerfiles/scala/Dockerfile .
Sending build context to Docker daemon  32.13MB
Step 1/7 : FROM icfpcontest2020/scala
latest: Pulling from icfpcontest2020/scala
Digest: sha256:b12809acaf7fef9f2f424b8e77c03d7ff49b698207f66853fa1bc9cd79e05ceb
Status: Image is up to date for icfpcontest2020/scala:latest
 ---> ce55cb81abab
Step 2/7 : WORKDIR /solution
 ---> Using cache
 ---> 6f982051366f
Step 3/7 : COPY . .
 ---> Using cache
 ---> a3b12382adf7
Step 4/7 : RUN chmod +x ./build.sh
 ---> Using cache
 ---> 89d7f9e74644
Step 5/7 : RUN chmod +x ./run.sh
 ---> Using cache
 ---> 5179e1afac44
Step 6/7 : RUN ./build.sh
 ---> Using cache
 ---> 729e4b470a6d
Step 7/7 : ENTRYPOINT ["./run.sh"]
 ---> Using cache
 ---> 179867e3968a
Successfully built 179867e3968a

This is very strange. It is starting off with the same image ce55cb81abab but then something is different. Any idea what could be different?

Submissions: python alien/send request fails

What I've done:

  • [*] created a private Git repository
  • [*] copied the deploy key and added it to the repository
  • [*] created a branch called submission
  • [*] downloaded a starter kit
  • [*] committed and pushed the starter kit
  • [*] waited for more than 10 minutes

Here's the problem:

I'm using python. The starter-kit works. But when I replace the post command with:

import requests
res = requests.post("https://icfpc2020-api.testkontur.ru/aliens/send?apiKey=<my-api-key>", data="string")

then the testing stages fails with:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 159, in _new_conn
    conn = connection.create_connection(
  File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 61, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/local/lib/python3.8/socket.py", line 918, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 381, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 976, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 308, in connect
    conn = self._new_conn()
  File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 171, in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7feabcc7e490>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 724, in urlopen
    retries = retries.increment(
  File "/usr/local/lib/python3.8/site-packages/urllib3/util/retry.py", line 439, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='icfpc2020-api.testkontur.ru', port=443): Max retries exceeded with url: /aliens/send?apiKey=<my-api-key> (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7feabcc7e490>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "app/main.py", line 14, in <module>
    main()
  File "app/main.py", line 8, in main
    utils.start(server_url=sys.argv[1],
  File "/solution/app/icfp_lib/utils.py", line 10, in start
    res = requests.post(url, data=data)
  File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 119, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='icfpc2020-api.testkontur.ru', port=443): Max retries exceeded with url: /aliens/send?apiKey=<my-api-key>(Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7feabcc7e490>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))

Am I doing something wrong?

Need C++ HTTP library

A library will be needed to talk to an HTTP server in C++. There are likely many options. One I have used is libcurl. The development package (libcurl4-openssl-dev) is already available in the gcc:10.1.0 image, assuming the build process is enhanced to permit linking against a library (#20). But the runtime package (libcurl4) is not available in the debian:buster-20200607-slim image, so the resulting binary will not run.

More generally, it will probably be necessary to create a customized base image as was done with haskell (#8) so packages needed/wanted by various teams can be installed. Packages may need to be added to both the gcc:10.1.0 and debian:buster-20200607-slim images, so I supposed two customized images should be created.

Is single source constraint hard?

I looked Dockerfiles in this repository and find that
only single source is copied into container image.

Current submission system favors specific languages that have ability to pack multiple sources into single source (for example, JavaScript)

Is the single source constraint hard?
If so, is there any restriction on the size of the main source?

Add Scala

Please consider adding this language or platform.

What can I do to support a PR with a Dockerfile and a starter kit?

Proposal: Aligning the build/run protocol among platforms

As initially proposed in #11, some platforms now support customizing the build/run process with participant-supplied shell scripts (e.g. #21). But other platforms don't.

To avoid confusing participants, I propose to align the build/run protocol among all platforms. In other words, all Dockerfile in this repository should be identical except for the base image reference (e.g. icfpcontest2020/python).

I imagine that such Dockerfile would be like this:

FROM icfpcontest2020/${platform}-build AS build  # This line varies by platforms

RUN mkdir -p /app
WORKDIR /build
COPY . .
RUN ./build.sh  # This script should build the solution and install it to /app

FROM icfpcontest2020/${platform}-run  # This line varies by platforms
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["./run.sh"]

Also, if we're fine with reusing build-time images as run-time images, Dockerfile can be simplied to something like the following. Actually this looks better to me, unless it has big implication to the evaluation infrastructure, because the difference of build-time dependencies and run-time dependencies is often tricky and hard to debug.

FROM icfpcontest2020/${platform}  # This is the only line that varies by platforms

RUN mkdir -p /app
WORKDIR /build
COPY . .
RUN ./build.sh  # This script should build the solution

WORKDIR /app
ENTRYPOINT ["./run.sh"]

Python dependency management

My team is a bit concerned about how dependencies for Python are handled. I understand the advertised process is to make a PR for the python platform to add to the requirements.txt. But we don't know which libraries are needed before hand, we actually often learn new libraries during the contest. How is this going to scale for a large number of teams and vast number of possible python libraries? How could version conflicts be handled?

I understand an ad-hoc installation of custom requirements.txt, or even better with a proper setuptools setup.py wont work due lack of internet connectivity.

What's the way out here? I could envision having ready-made site-packages folders in the submission branch, e.g. taken from a virtualenv, but I'm not sure about the limitations of portability.

Submissions:

What I've done:

  • [*] created a private Git repository
  • [*] copied the deploy key and added it to the repository
  • [*] created a branch called submission
  • [*] downloaded a starter kit
  • [*] committed and pushed the starter kit
  • [*] waited for more than 10 minutes

Here's the problem:
Cannot find revision of the default branch 'refs/heads/submission' of vcs root 'jetbrains.git'

first time through I lost the .dot files from the starter kit, but then I read about needing .platform and I committed/pushed .platform to my submission branch. Still same issue on submission log.
I did add the deploy key.

[WHAT WENT WRONG]
my repo: https://github.com/GeePokey/Canivsar2020

What if a solution consists of multiple binaries of different programming langauges?

If I understand README correctly, this repository is going to host Dockerfiles, each of which corresponds to a single programming language.

But what if a solution consists of multiple binaries of different programming languages? For example, what if it a solution consists of C++ binary and Rust binary interacting each other with IPC?

Clarify license

Would you mind clarifying the license of this repository? I'd like to contribute and will be comfortable if the license is clear.

Submissions:

What I've done:

  • [*] created a private Git repository
  • [*] copied the deploy key and added it to the repository
  • [*] created a branch called submission
  • [*] downloaded a starter kit
  • [*] committed and pushed the starter kit
  • [*] waited for more than 10 minutes

Here's the problem:

I got the initial submission branch working but wanted to test the submissions/* style so my team mates and I can submit various directions without stepping on each other's toes. I pushed submissions/starter as an exact copy of the submission branch that previously worked (as well as trying a number of other non-identical branches) and none of them (except the original) have shown up on the submissions page. This is for team OMG ICFP FTW.

What might I be doing wrong?

Add Rust (?)

Rust was declared as the programming tool of choice for discriminating hackers in 2018.

Add PHP (?)

PHP was declared as the programming tool of choice for discriminating hackers in 2017.

Monorepo for docker files and starter kits

As you can see, pull requests often come in pairs: one to dockerfiles and one to whatever-starter-kit. It should be one atomic change. Furthermore, it's inconvenient for contributors to propose new platforms without you creating a new empty starter kit repo first.

Consider merging all this stuff into a monorepo.

It will make getting started a bit harder (one can't just clone favorite-language-starter-kit, has to copy a sub-directory), but I think it's worth it.

lost registration 8-)

  1. sorry for the disturbance,I logged out of the https://icfpcontest2020.github.io account without saving API key. However, I have set up the repository and (I hope) provided the correct email. Is there a way to restore the key? what information should I provide? Or I must register another team name?
  2. to avoid such mistakes in future - would it make sense to add a line in big letters about saving the API key for further logins? 8-)
  3. or is there a plan to send the critical access information to the registered email? I can't think of a way to avoid (ab)using the feature, but it could definitely help.

Thanks,
Vlad.

No API Key

Like in issue #51 I failed to note the API Key.
Team name: The Higher Order of Zeuxis

Thx for the support!

Add Ruby (?)

Ruby was declared as a fine programming tool for many applications in 2018.

Add fsharp

Please consider adding this language or platform.

Submissions:

What I've done:

  • created a private Git repository
  • copied the deploy key and added it to the repository
  • created a branch called submission
  • downloaded a starter kit
  • committed and pushed the starter kit
  • waited for more than 10 minutes

Here's the problem:

[WHAT WENT WRONG]

https://icfpc2020-api.testkontur.ru/logs/?logKey=IgYbsq1lKVsFF2LkaIMOkSA0XJ4TXFC3H8zmvrUABfc%3D&apiKey=d1f6b33124e148f789c7e7bb50448bde

Log from failed build ^^

should the start kit stuff (app/, run.sh, build.sh) be in the root of the repo or under the starter_kit_* dir in my repo?

Edit: I've just seen the .platform file as well, committed that, waiting on the output

Submissions page shows an HTTP 500 error

What I've done:

  • created a private Git repository
  • copied the deploy key and added it to the repository
  • created a branch called submission
  • downloaded a starter kit
  • committed and pushed the starter kit
  • waited for more than 10 minutes

Here's the problem:

The submissions page shows "Something went wrong. Server answer is 500" as error message. I've seen it work about two hours ago with two submissions visible.

No API key

Hi,

yesterday I've registered for the contest successfully and already did some stuff to get familiar with the submission system. But I cannot log in again. I'm getting asked for an API key which I do not have. I checked my Emails but I did not receive any Email from the ICFP contest organizers.

To whom can I reach out in this regard?

Set up CI

Currently platform contributors verify Docker builds locally. This is probably okay before the contest, but I'm afraid that it's undesirable during the contest because any change to Dockerfiles may break other team's solutions.

It is great if we could set up CI to verify Dockerfiles on pull requests. It would do something like:

  • For each platform:
    • Build a base image with Dockerfile.base if it exists
    • Build one or more test solutions using Dockerfile and the base image, without network access

Submissions: 405 Client Error: Method Not Allowed

What I've done:

  • created a private Git repository
  • copied the deploy key and added it to the repository
  • created a branch called submission
  • downloaded a starter kit
  • committed and pushed the starter kit
  • waited for more than 10 minutes

Here's the problem:

I got the following error: 405 Client Error: Method Not Allowed.

It's the first time I got the error. So far I (almost) only changed stuff in my developer-folder. So the failed-test was basically the python starter-kit. I guess there is a problem with the server? Here is the corresponding test log:

ServerUrl: http://server:12345; PlayerKey: 4545917190182324706
<Response [405]>
Traceback (most recent call last):
  File "app/main.py", line 14, in <module>
    main()
  File "app/main.py", line 8, in main
    utils.start(server_url=sys.argv[1],
  File "/solution/app/icfp_lib/utils.py", line 6, in start
    res.raise_for_status()
  File "/usr/local/lib/python3.8/site-packages/requests/models.py", line 941, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 405 Client Error: Method Not Allowed for url: http://server:12345/?playerKey=4545917190182324706

I wasn't sure if I should create an issue for this. Are you providing information about the server status somewhere? So that we do not create unnecessary issues if you already know about problems / planned reconfiguring of the server etc?

Adding commonly used Haskell libraries

This probably also applies to other languages in varying extents, but I'd like to draw attention to the fact that a lot of commonly used functionality in Haskell is implemented outside of the "standard library" and thus currently missing from the corresponding Docker image. Unless the submissions are supposed to use only the standard prelude, I'd like to ask whether some commonly used Haskell libraries could be added to the image. If you agree to include include a certain set of libraries, I could make a PR with an extended Dockerfile.

As a concrete proposal, here are some packages the team I'm part of (udfew) used frequently in the last years:

  • aeson: Fast JSON parsing and encoding
  • array: Mutable and immutable arrays
  • attoparsec: Fast combinator parsing for bytestrings and text (alternatively parsec or megaparsec)
  • bytestring: Fast, compact, strict and lazy byte strings with a list interface
  • cereal: A binary serialization library
  • containers: Assorted concrete container types
  • deepseq: Deep evaluation of data structures
  • directory: Platform-agnostic library for filesystem operations
  • filepath: Library for manipulating FilePaths in a cross platform way.
  • hashable: A class for types that can be converted to a hash value
  • io-streams: Simple, composable, and easy-to-use stream I/O
  • lens: Lenses, Folds and Traversals (alternatively microlens-platform)
  • monad-control: Lift control operations, like exception catching, through monad transformers
  • MonadRandom: Random-number generation monad.
  • mtl: Monad classes, using functional dependencies
  • optparse-applicative: Utilities and combinators for parsing command line options
  • random: Pseudo-random number generation
  • text: An efficient packed Unicode text type.
  • time: A time library
  • transformers: Concrete functor and monad transformers
  • transformers-base: Lift computations from the bottom of a transformer stack
  • unordered-containers: Efficient hashing-based container types
  • vector: Efficient Arrays

Submissions: pushes to "submissions/submission" branch trigger builds of "submission" branch

What I've done:

  • created a private Git repository
  • copied the deploy key and added it to the repository
  • created a branch called submission
  • downloaded a starter kit
  • committed and pushed the starter kit
  • waited for more than 10 minutes

Here's the problem:

We noticed that the submissions page now mentions the branch name, and my teammate @pink-snow got curious how the "submissions/submission" branch would be displayed. So here's what I did:

  1. pushed a commit to the "submission" branch. It built fine, and passed the tests;
  2. branched off "submission" into "submissions/submission", and added another commit;
  3. pushed "submissions/submission".

In a few minutes, a new entry appeared on the site, but it mentions the same SHA-1 and commit message as the commit on the "submission" branch. When I pushed more commits to "submissions/submission", it created more builds of the "submission" branch.

Please don't ban us for this ._.

Submissions: Olympia #83d2fa

What I've done:
We alread have successfull submission with Test failed status.
Made little change to it (sending to server "0111101011011000" and "0111111111111111"), and

Here's the problem:

28 minutes has gone and still no results. Only "Testing" status.

Submissions: empty test logs

What I've done:

  • [*] created a private Git repository
  • [*] copied the deploy key and added it to the repository
  • [*] created a branch called submission
  • [*] downloaded a starter kit
  • [*] modified, committed and pushed the starter kit
  • [*] waited for more than 10 minutes

Here's the problem:
Submission builds fine, but tests failed. Test logs are empty, so there is no way to diagnose error

Submissions: the bot does not see my test submission

What I've done:

  • created a private Git repository
  • copied the deploy key and added it to the repository
  • created a branch called submission
  • downloaded a starter kit
  • committed and pushed the starter kit
  • waited for more than 10 minutes

The repository is [email protected]:Vlad-Shcherbina/icfpc2020-tbd.git.

What went wrong

The submission checklist is in the following state:

✅ Create a private Git repository
✅ Register your team
---- YOU ARE HERE ---
☑️ Copy the deploy key and add it to your repository (?)
☑️ Create a branch called submission
☑️ Download a starter kit for your language of choice
☑️ If there's none, file an issue
☑️ Commit and push the starter kit to submission
☑️ Wait for your submission to appear below (<= 10 min)

No submission appears in the table.

GitHub shows that this deploy key was recently used, so apparently your bot is scraping the repository.

Generic JVM image?

It is mentioned in other issues that the organizers are ok with pre-built binaries in the solutions.
This, however, does not help the jvm languages as the bash image does not include java.

Providing several images containing typical jvm build systems (maven/gradle/sbt/etc.) also makes little sense, as they all are built around having an internet connection which is disallowed during build. Furthermore, providing dependencies for e.g. maven without internet connection is pretty hard, non-trivial and ugly.

I hereby propose to include a jvm-generic image that accepts any app.jar as the program source and runs it (essentially the java image minus the actual javac invocation). This is essentially the same as "submitting pre-built binary" but for jvm.

Add Clojure

Please consider adding this language or platform.

Add Swift

Please consider adding this language or platform.

I might possibly send a PR with a starter kit (and can try to make Dockerfile - but have no experience).

Add Prolog

Please consider adding this language or platform.

As per this tweet

I might possibly send a PR with a Dockerfile and a starter kit.... or just dump the files into this issue, as I did for R, because I can't get my head around how to submit a pull request that works properly.

Non standard-library

Hi,

I've seen that for example because of #8 some non standard-libraries were added to the haskell image. Can we expect that you will always extend the corresponding images if users request additional libraries? Or will it depend on the library and the reasoning?

Support Go

I'd like to have Go support.

I'm sending a PR soon.

Need control of C++ build process / arguments

Hard-coding the C++ compiler command line is problematic for a number of reasons:

  • It is not possible to split the source code into multiple implementation (.cpp) files.
  • It is not possible to enable compiler optimizations (e.g. -O3).
  • It is not possible to select a more modern version of the C++ standard (e.g. -std=gnu++17).
  • It is not possible to link with any libraries. For example, talking to a server via HTTP practically requires the use of a library. The gcc image includes libcurl4-openssl-dev, but using it requires linking with -lcurl.

As an alternative, I recall a past contest where teams could supply two scripts, e.g. "build" and "run". The build script can invoke the compiler with any necessary arguments, or run a tool like "make", etc. The run script can run the program with any necessary arguments, environment variables, etc. If no special arguments are needed, the run script can just be the binary itself. I would also suggest copying an entire directory rather than just a single binary. The directory might contain the run script, the compiled binary, data files, shared libraries, etc.

I'll create a pull request along these lines if you are open to it.

Support Bazel

Bazel is a language-agnostic build system. My team has been using the system to build C++ programs in recent ICFP contests (2017, 2018, 2019). We'd like to use it in this year's contest as well.

However Bazel downloads some language toolchains during build for reproducibility. For example, on buliding Java programs, Bazel downloads OpenJDK of a fixed version. However README says there is no Internet access during build.

Could you give me guidance on how to proceed?

Add R

My R solution got an implicit mention in last year's summary (as a team where I used the neural network of my partner and kids to help solve puzzles). It would be great to be able to use R again this time around.

Being able to use Shiny as well (for quickly designing UI that work as Web applications) would be extremely helpful:

https://hub.docker.com/r/rocker/shiny-verse/dockerfile

Add TypeScript

Please consider adding this language or platform.

It should be a small modification to starterkit-javascript to have build.sh run the TypeScript compiler.

Add OCaml (?)

OCaml was declared as very suitable for rapid prototyping in 2018.

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.