miniaicups
miniaicups copied to clipboard
Нет описания ошибок компиляции для Rust
После отправки стратегии получаю ошибку компиляции, в окне "ошибки компиляции" всегда пусто, так что причина не понятна. Не удалось упешно отправить ничего, кроме совсем тривиальных одиночных файлов.
Примеры с ошибками компиляции: 15884 (.rs), 15885 (.zip)
Могу ошибаться, но судя по коду, в текст ошибки попадает только stdout
. Полагаю, что cargo пишет ошибки в stderr
.
https://github.com/MailRuChamps/miniaicups/blob/0ca41535299be57d20571bc9a856bee43bd3369b/paperio/dockers/base/sources/run.sh#L15
Не удалось упешно отправить ничего, кроме совсем тривиальных одиночных файлов.
Там, кстати, подменяется Cargo.toml при сборке, быть может в этом дело. Я отправлял не очень сложное решение в zip архиве, у меня собиралось.
В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через execv
вызывает лежащий под ногами готовый бинарник.
В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через
execv
вызывает лежащий под ногами готовый бинарник.
Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?
Могу ошибаться, но судя по коду, в текст ошибки попадает только
stdout
. Полагаю, что cargo пишет ошибки вstderr
.https://github.com/MailRuChamps/miniaicups/blob/0ca41535299be57d20571bc9a856bee43bd3369b/paperio/dockers/base/sources/run.sh#L15
Спасибо, базовый докер я не заметил ) Понять бы еще, куда выкладываются при заливке одиночный файл и архив. Cargo.toml я учитываю. Пока наловчился собирать в один файл и выкладывать его (https://github.com/MarcosCosmos/cg-rust-bundler).
Получается так (вдруг кому пригодится):
- Папка для сборки: /opt/client/solution
- Одиночный файл выкладывается в /opt/client/solution/src/main.rs, архив распаковывается в корень /opt/client/solution.
- Запускается
cargo init --bin /opt/client/solution
- В /opt/client/solution выкладывается Cargo.toml из rust докера (https://github.com/MailRuChamps/miniaicups/blob/master/paperio/dockers/rust/Cargo.toml) и заменяет присланный/сгенерированный
cargo init
- Запускается компиляция
cargo build --release --manifest-path /opt/client/solution/Cargo.toml
В архиве исходники правильно передавать вместе с папкой src, а у меня такие эксперименты не работали, потому что код тогда еще был под edition="2018"
Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?
Сложно сказать, нарушение ли. По букве точно нет – это не попытка сломать тестирующую систему. Технически это обычное решение на условном питоне, которое использует вспомогательный файл для работы. То же самое, что собрать решение в библиотеку для питона или подключить как nif в elixir. По духу – скорее нет, это лишь самый быстрый способ запустить решение. Подменяемый Cargo.toml слишком замедляет итерации разработки и усложняет отладку.
Тоже столкнулся с тем, что когда заливал самый первый вариант на rust, сервер сообщил об ошибке компиляции, но не показал текст ошибки (было пустое окошко). Вслепую догадался, в чём было дело (попытался заюзать rust-2018 до того как он был официально включен).
В итоге, правда, я собираю решение локально с нужными мне опциями, зависимостями и версиями. А запускаю там с помощью вспомогательного скрипта, который через
execv
вызывает лежащий под ногами готовый бинарник.Это скорее всего нарушение правил. @SannikovDmitry "а что так можно было"?
Закрою пока рукой глаза :) Главное, чтобы не сломали ничего.