using act for local debugging

Added act library for local debugging
Attempting to use exec argument escaping
This commit is contained in:
SamKirkland 2020-05-17 16:57:25 -05:00
parent b698c49eac
commit ae5262e007
6 changed files with 57 additions and 15 deletions

View File

@ -420,10 +420,13 @@ jobs:
## Debugging locally ## Debugging locally
##### Instructions for debugging Windows ##### Instructions for debugging Windows
- [Install docker](https://docs.docker.com/get-docker/) - [Install docker](https://docs.docker.com/get-docker/)
- Open powershell - Open powershell **as Administrator**
- Install [act-cli](https://github.com/nektos/act#installation) by running `choco install act-cli`
- Navigate to the repo folder - Navigate to the repo folder
- Run `docker build --tag action .` - Run `npm install` - this will install all dependencies to build this project
- Run `docker run action` - Run `npm build` - this will build the action javascript and watch/rebuild when files change
- Run `npm run build-docker` - this will build the docker container (only needs to be done once)
- Run `npm run run-docker` - this will spin up a local copy of the action defined in `/debug/local-debug-deployment.yaml`. Update package.json to set any secret values
#### Instructions for debugging on Linux #### Instructions for debugging on Linux
- [Install docker](https://docs.docker.com/get-docker/) - [Install docker](https://docs.docker.com/get-docker/)
@ -432,8 +435,11 @@ On Linux you can install docker using your package manager, for example, on a De
sudo apt install docker docker.io sudo apt install docker docker.io
``` ```
- Open the terminal - Open the terminal
- Install [act-cli](https://github.com/nektos/act#installation)
- Navigate to the repo folder - Navigate to the repo folder
- Run `docker build --tag action .` - Run `npm install` - this will install all dependencies to build this project
- Run `docker run action` - Run `npm build` - this will build the action javascript and watch/rebuild when files change
- Run `npm run build-docker` - this will build the docker container (only needs to be done once)
- Run `npm run run-docker` - this will spin up a local copy of the action defined in `/debug/local-debug-deployment.yaml`. Update package.json to set any secret values
#### Pull Requests Welcome! #### Pull Requests Welcome!

View File

@ -0,0 +1,18 @@
on: push
name: Local Debug Deployment
jobs:
Local-Debug-Deployment:
name: Local-Debug-Deployment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.1.0
with:
fetch-depth: 2
- name: FTP-Deploy-Action
uses: ./
with:
ftp-server: ftp://ftp.samkirkland.com/
ftp-username: ${{ secrets.username }}
ftp-password: ${{ secrets.password }}
git-ftp-args: --dry-run

12
dist/index.js vendored
View File

@ -1049,11 +1049,19 @@ function syncFiles(args) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
yield core.group("Uploading files", () => __awaiter(this, void 0, void 0, function* () { yield core.group("Uploading files", () => __awaiter(this, void 0, void 0, function* () {
return yield exec.exec(`git ftp push --force --auto-init --verbose --syncroot ${args.local_dir} --user ${args.ftp_username} --passwd ${args.ftp_password} ${args.gitFtpArgs} ${args.ftp_server}`); return yield exec.exec("git ftp push", [
"--force",
"--auto-init",
"--verbose",
`--syncroot=${args.local_dir}`,
`--user=${args.ftp_username}`,
`--passwd=${args.ftp_password}`,
args.gitFtpArgs,
args.ftp_server
]);
})); }));
} }
catch (error) { catch (error) {
console.error("⚠️ Failed to upload files");
core.setFailed(error.message); core.setFailed(error.message);
} }
}); });

View File

@ -8,10 +8,9 @@
"node": ">=12.0.0" "node": ">=12.0.0"
}, },
"scripts": { "scripts": {
"build:dev": "tsc", "build": "ncc build src/main.ts -o dist --watch",
"build:production": "ncc build src/main.ts -o dist", "build-docker": "docker build --tag action .",
"build:docker": "docker build --tag action .", "run-docker": "act --workflows ./debug/ --secret username=UserNameHere --secret password=PasswordHere"
"run:docker": "docker run action --build-arg FTP_SERVER=example.com FTP_USERNAME=test@example.com FTP_PASSWORD=passwordExample"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -70,11 +70,22 @@ function withDefault(value: string, defaultValue: string) {
async function syncFiles(args: IActionArguments) { async function syncFiles(args: IActionArguments) {
try { try {
await core.group("Uploading files", async () => { await core.group("Uploading files", async () => {
return await exec.exec(`git ftp push --force --auto-init --verbose --syncroot ${args.local_dir} --user ${args.ftp_username} --passwd ${args.ftp_password} ${args.gitFtpArgs} ${args.ftp_server}`); return await exec.exec(
"git ftp push",
[
"--force",
"--auto-init",
"--verbose",
`--syncroot=${args.local_dir}`,
`--user=${args.ftp_username}`,
`--passwd=${args.ftp_password}`,
args.gitFtpArgs!,
args.ftp_server!
]
);
}); });
} }
catch (error) { catch (error) {
console.error("⚠️ Failed to upload files");
core.setFailed(error.message); core.setFailed(error.message);
} }
} }

View File

@ -25,7 +25,7 @@ export enum gitFTPExitCode {
ErrorWhileDownloading = 5, ErrorWhileDownloading = 5,
UnknownProtocol = 6, UnknownProtocol = 6,
RemoteLocked = 7, RemoteLocked = 7,
NotAGitProject = 8, GitRelatedError = 8,
PreFTPPushHookFailed = 9, PreFTPPushHookFailed = 9,
LocalFileOperationFailed = 10 LocalFileOperationFailed = 10
} }