Linted
Lint / pre-commit Linting (push) Successful in 39s Details

This commit is contained in:
Philipp Horstenkamp 2023-11-26 18:29:18 +01:00
parent 13a4c02f45
commit 5d6e23178e
Signed by: Philipp
GPG Key ID: DD53EAC36AFB61B4
4 changed files with 983 additions and 984 deletions

View File

@ -1,33 +1,33 @@
name: 'Upload to Screeps'
description: 'This action uploads code to the Screeps server.'
name: Upload to Screeps
description: This action uploads code to the Screeps server.
inputs:
protocol:
description: 'The protocol to use (default: https).'
required: false
default: 'https'
default: https
hostname:
description: 'The hostname of the Screeps server (default: screeps.com).'
required: false
default: 'screeps.com'
default: screeps.com
port:
description: 'The port to use (default: 443).'
required: false
default: '443'
path:
description: 'The path for the API.'
description: The path for the API.
required: false
default: '/'
default: /
token:
description: 'Authentication token for Screeps.'
description: Authentication token for Screeps.
required: true
username:
description: 'Username for Screeps account. Used if no token is provided.'
description: Username for Screeps account. Used if no token is provided.
required: false
password:
description: 'Password for Screeps account. Used if no token is provided.'
description: Password for Screeps account. Used if no token is provided.
required: false
prefix:
description: 'Directory prefix for file paths.'
description: Directory prefix for file paths.
required: false
pattern:
description: 'Glob pattern to match files (default: *.js).'
@ -36,7 +36,7 @@ inputs:
branch:
description: 'Branch in Screeps to which the code will be uploaded (default: default).'
required: false
default: 'default'
default: default
runs:
using: 'node12'
main: 'index.js'
using: node12
main: index.js

171
index.js
View File

@ -1,8 +1,8 @@
const { ScreepsAPI } = require('screeps-api');
const { ScreepsAPI } = require("screeps-api");
const core = require("@actions/core");
const fs = require('fs');
const glob = require('glob');
const path = require('path');
const fs = require("fs");
const glob = require("glob");
const path = require("path");
/**
* Reads files matching a glob pattern into a dictionary.
@ -11,40 +11,39 @@ const path = require('path');
* @returns {Promise<Object>} - Promise resolving to a dictionary of file contents keyed by filenames.
*/
function readFilesIntoDict(pattern, prefix) {
// Prepend the prefix to the glob pattern
const globPattern = prefix ? path.join(prefix, pattern) : pattern;
// Prepend the prefix to the glob pattern
const globPattern = prefix ? path.join(prefix, pattern) : pattern;
return new Promise((resolve, reject) => {
glob(globPattern, (err, files) => {
if (err) {
return reject(err);
}
return new Promise((resolve, reject) => {
glob(globPattern, (err, files) => {
if (err) {
return reject(err);
}
let fileDict = {};
let readPromises = [];
let fileDict = {};
let readPromises = [];
files.forEach(file => {
let readPromise = fs.promises.readFile(file, 'utf8')
.then(content => {
// Remove the prefix from the filename and drop the file suffix
let key = file;
if (prefix && file.startsWith(prefix)) {
key = key.slice(prefix.length);
}
key = path.basename(key, path.extname(key)); // Drop the file suffix
files.forEach((file) => {
let readPromise = fs.promises.readFile(file, "utf8").then((content) => {
// Remove the prefix from the filename and drop the file suffix
let key = file;
if (prefix && file.startsWith(prefix)) {
key = key.slice(prefix.length);
}
key = path.basename(key, path.extname(key)); // Drop the file suffix
fileDict[key] = content;
});
readPromises.push(readPromise);
});
// Use Promise.all to ensure all files are read before resolving
Promise.all(readPromises)
.then(() => resolve(fileDict))
.catch(reject);
fileDict[key] = content;
});
readPromises.push(readPromise);
});
// Use Promise.all to ensure all files are read before resolving
Promise.all(readPromises)
.then(() => resolve(fileDict))
.catch(reject);
});
});
}
/**
@ -55,72 +54,72 @@ function readFilesIntoDict(pattern, prefix) {
* @returns {string|null} - Returns an error message if validation fails, otherwise null.
*/
function validateAuthentication(token, username, password) {
if (token) {
if (username || password) {
return "Token is defined along with username and/or password.";
}
} else {
if (!username && !password) {
return "Neither token nor password and username are defined.";
}
if (username && !password) {
return "Username is defined but no password is provided.";
}
if (!username && password) {
return "Password is defined but no username is provided.";
}
if (token) {
if (username || password) {
return "Token is defined along with username and/or password.";
}
return null; // No errors found
} else {
if (!username && !password) {
return "Neither token nor password and username are defined.";
}
if (username && !password) {
return "Username is defined but no password is provided.";
}
if (!username && password) {
return "Password is defined but no username is provided.";
}
}
return null; // No errors found
}
/**
* Posts code to Screeps server.
*/
async function postCode() {
const protocol = core.getInput("protocol") || "https";
const hostname = core.getInput("hostname") || "screeps.com";
const port = core.getInput("port") || "443";
const path = core.getInput("path") || "/";
const protocol = core.getInput("protocol") || "https";
const hostname = core.getInput("hostname") || "screeps.com";
const port = core.getInput("port") || "443";
const path = core.getInput("path") || "/";
const token = core.getInput("token") || undefined;
const username = core.getInput("username") || undefined;
const password = core.getInput("password") || undefined;
const prefix = core.getInput("source-prefix");
const pattern = core.getInput("pattern") || "*.js";
const branch = core.getInput("branch") || "default";
const files_to_push = await readFilesIntoDict(pattern, prefix);
Object.keys(files_to_push).forEach(key => {
core.info(`Key: ${key}`);
});
core.info(files_to_push);
const token = core.getInput("token") || undefined;
const username = core.getInput("username") || undefined;
const password = core.getInput("password") || undefined;
const prefix = core.getInput("source-prefix");
const pattern = core.getInput("pattern") || "*.js";
const branch = core.getInput("branch") || "default";
const login_arguments = {
"token": token,
"username": username,
"password": password,
"protocol": protocol,
"hostname": hostname,
"port": port,
"path": path,
};
const files_to_push = await readFilesIntoDict(pattern, prefix);
core.info(`Trying to upload the following files to ${branch}:`)
Object.keys(login_arguments).forEach(key => {
core.info(`Key: ${key}`);
});
Object.keys(files_to_push).forEach((key) => {
core.info(`Key: ${key}`);
});
const errorMessage = validateAuthentication(token, username, password);
if (errorMessage) {
core.error(errorMessage);
return;
}
core.info(files_to_push);
const api = new ScreepsAPI(login_arguments);
const response = await api.code.set(branch, files_to_push);
core.info(JSON.stringify(response, null, 2));
const login_arguments = {
token: token,
username: username,
password: password,
protocol: protocol,
hostname: hostname,
port: port,
path: path,
};
core.info(`Trying to upload the following files to ${branch}:`);
Object.keys(login_arguments).forEach((key) => {
core.info(`Key: ${key}`);
});
const errorMessage = validateAuthentication(token, username, password);
if (errorMessage) {
core.error(errorMessage);
return;
}
const api = new ScreepsAPI(login_arguments);
const response = await api.code.set(branch, files_to_push);
core.info(JSON.stringify(response, null, 2));
}
postCode();

1746
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
{
"name": "screeps-deploy-action",
"version": "0.1.0",
"description": "Deploys screeps code to the official game or an pirvate server.",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@actions/core": "^1.10.1",
"glob": "^7.1.6",
"screeps-api": "^1.7.2"
}
"name": "screeps-deploy-action",
"version": "0.1.0",
"description": "Deploys screeps code to the official game or an pirvate server.",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@actions/core": "^1.10.1",
"glob": "^7.1.6",
"screeps-api": "^1.7.2"
}
}