Merge branch 'v3'

This commit is contained in:
Brian Seymour 2021-04-22 22:47:04 -05:00
commit e409743ca5
3 changed files with 56 additions and 59 deletions

View File

@ -19,7 +19,7 @@ module.exports = {
.isString(), .isString(),
], ],
// POST /jobs // POST /execute
async run_job(req, res) { async run_job(req, res) {
const runtime = get_latest_runtime_matching_language_version(req.body.language, req.body.version); const runtime = get_latest_runtime_matching_language_version(req.body.language, req.body.version);

View File

@ -3,9 +3,9 @@ const fs = require('fs');
const path = require('path'); const path = require('path');
const chalk = require('chalk'); const chalk = require('chalk');
exports.command = ['execute <language> <file> [args..]'] exports.command = ['execute <language> <file> [args..]'];
exports.aliases = ['run'] exports.aliases = ['run'];
exports.describe = 'Executes file with the specified runner' exports.describe = 'Executes file with the specified runner';
exports.builder = { exports.builder = {
languageVersion: { languageVersion: {
@ -36,23 +36,22 @@ exports.builder = {
array: true, array: true,
desc: 'Additional files to add', desc: 'Additional files to add',
} }
} };
exports.handler = async function(argv){ exports.handler = async function(argv) {
const files = [...(argv.files || []),argv.file] const files = [...(argv.files || []),argv.file]
.map(file_path => ({ .map(file_path => {
name: path.basename(file_path), return {
content: fs.readFileSync(file_path).toString() name: path.basename(file_path),
})); content: fs.readFileSync(file_path).toString()
};
});
const stdin = (argv.stdin && await new Promise((resolve, _)=>{
var data = "";
process.stdin.on('data', d=> data += d)
process.stdin.on('end', _ => resolve(data))
})) || "";
const stdin = (argv.stdin && await new Promise((resolve, _) => {
let data = '';
process.stdin.on('data', d => data += d);
process.stdin.on('end', _ => resolve(data));
})) || '';
const request = { const request = {
language: argv.language, language: argv.language,
@ -64,35 +63,39 @@ exports.handler = async function(argv){
run_timeout: argv.rt run_timeout: argv.rt
}; };
let response = await argv.axios.post('/jobs', request); let { data: response } = await argv.axios.post('/api/v1/execute', request);
response = response.data
function step(name, ctx){ const step = (name, ctx) => {
console.log(chalk.bold(`== ${name} ==`)) console.log(chalk.bold(`== ${name} ==`));
if(ctx.stdout){
console.log(" ",chalk.bold(`STDOUT`)) if (ctx.stdout) {
console.log(" ",ctx.stdout.replace(/\n/g,'\n ')) console.log(chalk.bold(`STDOUT`))
console.log(ctx.stdout.replace(/\n/g,'\n '))
} }
if(ctx.stderr){
if (ctx.stderr) {
console.log(chalk.bold(`STDERR`)) console.log(chalk.bold(`STDERR`))
console.log(" ",ctx.stderr.replace(/\n/g,'\n ')) console.log(ctx.stderr.replace(/\n/g,'\n '))
} }
if(ctx.code) if (ctx.code) {
console.log( console.log(
chalk.bold(`Exit Code:`), chalk.bold(`Exit Code:`),
chalk.bold[ctx.code > 0 ? 'red' : 'green'](ctx.code) chalk.bold[ctx.code > 0 ? 'red' : 'green'](ctx.code)
) );
if(ctx.signal) }
if (ctx.signal) {
console.log( console.log(
chalk.bold(`Signal:`), chalk.bold(`Signal:`),
chalk.bold.yellow(ctx.signal) chalk.bold.yellow(ctx.signal)
) );
}
} }
if (response.compile) {
step('Compile', response.compile);
if(response.compile) step('Compile', response.compile) }
step('Run', response.run)
step('Run', response.run);
} }

View File

@ -73,20 +73,9 @@ The following are approved and endorsed extensions/utilities to the core Piston
<br> <br>
When using the public Piston API, use the base URL: When using the public Piston API, use the base URL:
``` ```
https://emkc.org/api/v1/piston https://emkc.org/api/v1/piston
``` ```
#### GET
```
https://emkc.org/api/v1/piston/versions
```
#### POST
```
https://emkc.org/api/v1/piston/execute
```
> Important Note: The Piston API is rate limited to 5 requests per second. If you have a need for more requests than that > Important Note: The Piston API is rate limited to 5 requests per second. If you have a need for more requests than that
and it's for a good cause, please reach out to me (EngineerMan#0001) on [Discord](https://discord.gg/engineerman) and it's for a good cause, please reach out to me (EngineerMan#0001) on [Discord](https://discord.gg/engineerman)
so we can discuss potentially getting you an unlimited key. so we can discuss potentially getting you an unlimited key.
@ -129,7 +118,13 @@ cd cli && npm i && cd -
### Installation ### Installation
```sh ```sh
docker run -v $PWD:'/piston' --tmpfs /piston/jobs -dit -p 2000:2000 --name piston_api ghcr.io/engineer-man/piston docker run \
-v $PWD:'/piston' \
--tmpfs /piston/jobs \
-dit \
-p 2000:2000 \
--name piston_api \
ghcr.io/engineer-man/piston
``` ```
<br> <br>
@ -146,22 +141,21 @@ You can execute the cli with `cli/index.js`.
# List all available packages # List all available packages
cli/index.js ppman list cli/index.js ppman list
# Install python 3.9.1
cli/index.js ppman install python 3.9.1
# Install latest python # Install latest python
cli/index.js ppman install python cli/index.js ppman install python
# Run a python script # Install specific version of python
echo 'print("Hello world!")' > test.py cli/index.js ppman install python 3.9.4
cli/index.js run python test.py -l 3.9.1
# Run the script using the latest version # Run a python script using the latest version
echo 'print("Hello world!")' > test.py
cli/index.js run python test.py cli/index.js run python test.py
# Run using python 3.x # Run a python script using a specific version
echo 'print("Hello world!")' > test.py
cli/index.js run python test.py -l 3.9.4
cli/index.js run python test.py -l 3.x cli/index.js run python test.py -l 3.x
cli/index.js run python test.py -l 3
``` ```
If you are operating on a remote machine, add the `-u` flag like so: If you are operating on a remote machine, add the `-u` flag like so:
@ -178,7 +172,7 @@ This is used by the CLI to carry out running jobs and package management.
#### Runtimes Endpoint #### Runtimes Endpoint
`GET /api/v1/runtimes` `GET /api/v1/runtimes`
This endpoint will return the supported languages along with the current version and aliases. To execute This endpoint will return the supported languages along with the current version and aliases. To execute
code for a particular language using the `/jobs` endpoint, either the name or one of the aliases must code for a particular language using the `/api/v1/execute` endpoint, either the name or one of the aliases must
be provided, along with the version. be provided, along with the version.
Multiple versions of the same language may be present at the same time, and may be selected when running a job. Multiple versions of the same language may be present at the same time, and may be selected when running a job.
```json ```json