feat: supports multiple compose files (#8)

Co-authored-by: Emilien Escalle <emilien.escalle@escemi.com>
This commit is contained in:
Emilien Escalle 2022-10-05 09:32:01 +02:00 committed by GitHub
parent bbeb376475
commit 234ccc8f01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 60 additions and 18 deletions

View File

@ -25,3 +25,11 @@ jobs:
compose-file: "./docker/docker-compose.yml" compose-file: "./docker/docker-compose.yml"
compose-flags: "--profile profile-1" compose-flags: "--profile profile-1"
down-flags: "--volumes" down-flags: "--volumes"
- uses: ./
with:
compose-file: |
./docker/docker-compose.yml
./docker/docker-compose.ci.yml
services: |
helloworld2
helloworld4

View File

@ -8,6 +8,14 @@ This action runs your docker-compose file and clean up before action finished.
**Optional** The name of the compose file. Default `"./docker-compose.yml"`. **Optional** The name of the compose file. Default `"./docker-compose.yml"`.
It can be a list of files:
```yml
compose-file: |
docker-compose.yml
docker-compose.ci.yml
```
### `services` ### `services`
**Optional** Just perform `docker-compose up` to one service instead of all of them **Optional** Just perform `docker-compose up` to one service instead of all of them

View File

@ -2,7 +2,7 @@ name: "Docker Compose Action"
description: "Run your docker-compose file" description: "Run your docker-compose file"
inputs: inputs:
compose-file: # id of input compose-file: # id of input
description: "relative path to compose file" description: "relative path to compose file(s)"
required: false required: false
default: "./docker-compose.yml" default: "./docker-compose.yml"
compose-flags: # id of input compose-flags: # id of input

View File

@ -0,0 +1,6 @@
version: "3.8"
services:
helloworld4:
profiles: [profile-2]
image: hello-world

23
main.js
View File

@ -1,22 +1,21 @@
const core = require("@actions/core"); const core = require("@actions/core");
const compose = require("docker-compose"); const compose = require("docker-compose");
const fs = require("fs");
const utils = require("./utils"); const utils = require("./utils");
try { try {
const composeFile = core.getInput("compose-file"); const composeFiles = utils.parseComposeFiles(
core.getMultilineInput("compose-file")
if (!fs.existsSync(composeFile)) { );
console.log(`${composeFile} not exists`); if (!composeFiles.length) {
return; return;
} }
const services = core.getMultilineInput("services", { required: false });; const services = core.getMultilineInput("services", { required: false });
const options = { const options = {
config: composeFile, config: composeFiles,
log: true, log: true,
composeOptions: utils.parseFlags(core.getInput("compose-flags")), composeOptions: utils.parseFlags(core.getInput("compose-flags")),
commandOptions: utils.parseFlags(core.getInput("up-flags")) commandOptions: utils.parseFlags(core.getInput("up-flags")),
}; };
const promise = const promise =
@ -25,8 +24,12 @@ try {
: compose.upAll(options); : compose.upAll(options);
promise promise
.then(() => { console.log("compose started"); }) .then(() => {
.catch((err) => { core.setFailed(`compose up failed ${JSON.stringify(err)}`); }); console.log("compose started");
})
.catch((err) => {
core.setFailed(`compose up failed ${JSON.stringify(err)}`);
});
} catch (error) { } catch (error) {
core.setFailed(error.message); core.setFailed(error.message);
} }

12
post.js
View File

@ -1,20 +1,20 @@
const core = require("@actions/core"); const core = require("@actions/core");
const compose = require("docker-compose"); const compose = require("docker-compose");
const fs = require("fs");
const utils = require("./utils"); const utils = require("./utils");
try { try {
const composeFile = core.getInput("compose-file"); const composeFiles = utils.parseComposeFiles(
if (!fs.existsSync(composeFile)) { core.getMultilineInput("compose-file")
console.log(`${composeFile} not exists`); );
if (!composeFiles.length) {
return; return;
} }
const options = { const options = {
config: composeFile, config: composeFiles,
log: true, log: true,
composeOptions: utils.parseFlags(core.getInput("compose-flags")), composeOptions: utils.parseFlags(core.getInput("compose-flags")),
commandOptions: utils.parseFlags(core.getInput("up-flags")) commandOptions: utils.parseFlags(core.getInput("up-flags")),
}; };
compose.down(options).then( compose.down(options).then(

View File

@ -1,3 +1,5 @@
const fs = require("fs");
module.exports.parseFlags = (flags) => { module.exports.parseFlags = (flags) => {
if (flags != null && typeof flags == "string" && flags.length > 0) { if (flags != null && typeof flags == "string" && flags.length > 0) {
return flags.split(" "); return flags.split(" ");
@ -5,3 +7,18 @@ module.exports.parseFlags = (flags) => {
return []; return [];
}; };
module.exports.parseComposeFiles = (composeFiles) => {
return composeFiles.filter((composeFile) => {
if (!composeFile.length) {
return false;
}
if (!fs.existsSync(composeFile)) {
console.log(`${composeFile} not exists`);
return false;
}
return true;
});
};