Merge branch 'v3'
This commit is contained in:
commit
e409743ca5
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
38
readme.md
38
readme.md
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue