Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add DockerComposeV1 task and refactoring DockerComposeV0 #20085

Merged
merged 30 commits into from
Jul 1, 2024
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a4894d4
Update task.loc messages
ivanduplenskikh Jun 28, 2024
994334e
Add DockerComposeV1
ivanduplenskikh Jun 28, 2024
206d89a
Add DockerComposeV1 to the CODEOWNERS
ivanduplenskikh Jun 28, 2024
3f709f6
Set the docker compose v2 util as default for the DockerComposeV1 task
ivanduplenskikh Jun 28, 2024
04fa1d1
Add condition for COMPATIBILITY flag
ivanduplenskikh Jun 28, 2024
a777df1
Remove useDockerComposeV2 FF
ivanduplenskikh Jun 28, 2024
b54a4bb
Merge branch 'master' into users/v-ivandu/add-DockerComposeV1-task
ivanduplenskikh Jul 1, 2024
6711b53
Add DockerComposemV1 task to make-options
ivanduplenskikh Jun 28, 2024
5fcb61d
Remove buildConfig from DockerComposeV1 and add Node20 handler as def…
ivanduplenskikh Jun 28, 2024
33f70e1
Update DockerComposeV1 task version
ivanduplenskikh Jul 1, 2024
9d70007
Bump DockerComposeV0 task version
ivanduplenskikh Jul 1, 2024
eca67f1
Changed if empty condition for docker which result
ivanduplenskikh Jul 1, 2024
a729c8d
Build DockerComposeV0
ivanduplenskikh Jul 1, 2024
ced45da
Update resjson manually
ivanduplenskikh Jul 1, 2024
079825e
Update DockerComposeV1
ivanduplenskikh Jul 1, 2024
e14685c
Update unit tests
ivanduplenskikh Jul 1, 2024
720c5e4
Check in unit tests if docker cli exists
ivanduplenskikh Jul 1, 2024
e5f8d8b
Update unit tests and deprecationMessage
ivanduplenskikh Jul 1, 2024
1121b69
Add unit tests
ivanduplenskikh Jul 1, 2024
bbd59a3
Update unit tests DockerComposeV1
ivanduplenskikh Jul 1, 2024
e48d51f
Remove compatibility answers
ivanduplenskikh Jul 1, 2024
f2a07cb
Update DockerComposeV1 resources.resjson
ivanduplenskikh Jul 1, 2024
97dd38d
Update L0Linux
ivanduplenskikh Jul 1, 2024
0d43fa2
Show stdout & stderr in tests
DmitriiBobreshev Jul 1, 2024
9c094ad
Add console.log with composeCommand
ivanduplenskikh Jul 1, 2024
47c982d
Merge branch 'users/v-ivandu/add-DockerComposeV1-task' of https://git…
ivanduplenskikh Jul 1, 2024
c104646
Generated task
ivanduplenskikh Jul 1, 2024
a69623f
Enable system debug
DmitriiBobreshev Jul 1, 2024
77a552d
Update
ivanduplenskikh Jul 1, 2024
81da5b6
Change Node20 to Node20_1
ivanduplenskikh Jul 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@ Tasks/DockerV2/ @microsoft/release-management-task-team @manolerazvan

Tasks/DockerComposeV0/ @microsoft/release-management-task-team @manolerazvan

Tasks/DockerComposeV1/ @microsoft/release-management-task-team @manolerazvan

Tasks/DockerInstallerV0/ @microsoft/release-management-task-team @manolerazvan

Tasks/DotNetCoreCLIV2/ @microsoft/akvelon-build-task-team @DergachevE
Expand Down
13 changes: 5 additions & 8 deletions Tasks/DockerComposeV0/dockercomposeconnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ export default class DockerComposeConnection extends ContainerConnection {
private requireAdditionalDockerComposeFiles: boolean;
private projectName: string;
private finalComposeFile: string;
private useDockerComposeV2: boolean;

constructor() {
super();
this.useDockerComposeV2 = tl.getBoolFeatureFlag("USE_DOCKER_COMPOSE_V2_COMPATIBLE_MODE");
this.setDockerComposePath();
this.dockerComposeFile = DockerComposeUtils.findDockerFile(tl.getInput("dockerComposeFile", true), tl.getInput("cwd"));
if (!this.dockerComposeFile) {
Expand Down Expand Up @@ -95,7 +93,7 @@ export default class DockerComposeConnection extends ContainerConnection {
public createComposeCommand(): tr.ToolRunner {
var command = tl.tool(this.dockerComposePath);

if (this.useDockerComposeV2 && !tl.getInput('dockerComposePath')) {
if (!tl.getInput('dockerComposePath')) {
command.arg("compose");
process.env["COMPOSE_COMPATIBILITY"] = "true";
}
Expand Down Expand Up @@ -186,10 +184,9 @@ export default class DockerComposeConnection extends ContainerConnection {
//Priority to docker-compose path provided by user
this.dockerComposePath = tl.getInput('dockerComposePath');
if (!this.dockerComposePath) {
// If not use the docker-compose avilable on agent
if (this.useDockerComposeV2) {
this.dockerComposePath = tl.which("docker");
} else {
this.dockerComposePath = tl.which("docker");

if (!this.dockerComposePath) {
this.dockerComposePath = tl.which("docker-compose");
}

Expand All @@ -204,7 +201,7 @@ export default class DockerComposeConnection extends ContainerConnection {
private validateProjectNameDockerComposeV2() {
tl.debug(`Start validating project name ${this.projectName}`);

if (this.dockerComposePath.includes("docker-compose") || !this.useDockerComposeV2) {
if (this.dockerComposePath.includes("docker-compose")) {
tl.warning(tl.loc("MigrateToDockerComposeV2"));
return;
}
Expand Down
5 changes: 3 additions & 2 deletions Tasks/DockerComposeV0/task.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 242,
"Patch": 2
"Patch": 4
},
"demands": [],
"preview": "false",
Expand Down Expand Up @@ -356,7 +356,8 @@
"FileContentSynced": "Synced the file content to the disk. The content is %s.",
"ImageNameWithoutTag": "Image name not specified with tag, pushing all tags of the image specified.",
"WritingDockerConfigToTempFile": "Writing Docker config to temp file. File path: %s, Docker config: %s",
"DeprecationMessage": "The DockerCompose@0 task is deprecated. The task uses docker-compose v1 which no longer receives update since July 2023. To use docker compose v2, use the DockerCompose@1 task.",
"InvalidProjectName": "The project name \"%s\" must be a valid docker compose project name. Follow the link for more details: https://docs.docker.com/compose/project-name/#set-a-project-name",
"MigrateToDockerComposeV2": "The task is utilizing Docker Compose V1, but there are plans to transition to Docker Compose V2. It's necessary to investigate how to adapt your project to Docker Compose V2. For guidance on this migration, you can refer to the official Docker Compose documentation at the provided link: https://docs.docker.com/compose/migrate/"
"MigrateToDockerComposeV2": "The task is using Docker Compose V1, which is end-of-life and will be removed from Microsoft-hosted agents July 24. Pipelines running on Microsoft-hosted agents should be updated for Docker Compose v2 compatibility e.g. use compatible container names. For guidance on required updates, please refer to the official Docker Compose documentation at https://docs.docker.com/compose/migrate/"
}
}
3 changes: 2 additions & 1 deletion Tasks/DockerComposeV0/task.loc.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 242,
"Patch": 2
"Patch": 4
},
"demands": [],
"preview": "false",
Expand Down Expand Up @@ -356,6 +356,7 @@
"FileContentSynced": "ms-resource:loc.messages.FileContentSynced",
"ImageNameWithoutTag": "ms-resource:loc.messages.ImageNameWithoutTag",
"WritingDockerConfigToTempFile": "ms-resource:loc.messages.WritingDockerConfigToTempFile",
"DeprecationMessage": "ms-resource:loc.messages.DeprecationMessage",
"InvalidProjectName": "ms-resource:loc.messages.InvalidProjectName",
"MigrateToDockerComposeV2": "ms-resource:loc.messages.MigrateToDockerComposeV2"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"loc.friendlyName": "Docker Compose",
"loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=848006) oder [Docker Compose-Dokumentation anzeigen](https://docs.docker.com/)",
"loc.description": "Erstellen Sie Docker-Anwendungen mit mehreren Containern, übertragen Sie sie mithilfe von Push, oder führen Sie sie aus. Die Aufgabe kann mit Docker oder Azure Container Registry verwendet werden.",
"loc.instanceNameFormat": "$(action)",
"loc.group.displayName.advanced": "Erweiterte Optionen",
"loc.input.label.containerregistrytype": "Containerregistrierungstyp",
"loc.input.help.containerregistrytype": "Wählen Sie einen Containerregistrierungstyp aus.",
"loc.input.label.dockerRegistryEndpoint": "Dienstverbindung für Docker-Registrierung",
"loc.input.help.dockerRegistryEndpoint": "Wählen Sie eine Dienstverbindung für die Docker-Registrierung aus. Erforderlich für Befehle, die eine Authentifizierung bei einer Registrierung erfordern.",
"loc.input.label.azureSubscriptionEndpoint": "Azure-Abonnement",
"loc.input.help.azureSubscriptionEndpoint": "Wählen Sie ein Azure-Abonnement aus.",
"loc.input.label.azureContainerRegistry": "Azure Container Registry",
"loc.input.help.azureContainerRegistry": "Wählen Sie eine Azure Container Registry aus.",
"loc.input.label.dockerComposeFile": "Docker Compose-Datei",
"loc.input.help.dockerComposeFile": "Pfad zur zu verwendenden primären Docker Compose-Datei.",
"loc.input.label.additionalDockerComposeFiles": "Zusätzliche Docker Compose-Dateien",
"loc.input.help.additionalDockerComposeFiles": "Zusätzliche Docker Compose-Dateien, die mit der primären Docker Compose-Datei kombiniert werden soll. Relative Pfade werden in Bezug auf das Verzeichnis, dass die primäre Docker Compose-Datei enthält, aufgelöst. Wenn eine angegebene Datei nicht gefunden wird, wird sie ignoriert. Geben Sie jeden Dateipfad in einer neuen Zeile an.",
"loc.input.label.dockerComposeFileArgs": "Umgebungsvariablen",
"loc.input.help.dockerComposeFileArgs": "Umgebungsvariablen, die während des Befehls festgelegt werden. Geben Sie jedes Name/Wert-Paar in einer neuen Zeile an.",
"loc.input.label.projectName": "Projektname",
"loc.input.help.projectName": "Projektname, der für Standardnamen von Images und Containern verwendet wird.",
"loc.input.label.qualifyImageNames": "Imagenamen qualifizieren",
"loc.input.help.qualifyImageNames": "Qualifizieren Sie die Imagenamen für erstellte Dienste mit dem Hostnamen der Docker-Registrierungsdienstverbindung, sofern nicht anders angegeben.",
"loc.input.label.action": "Aktion",
"loc.input.help.action": "Wählen Sie eine Docker Compose-Aktion aus.",
"loc.input.label.additionalImageTags": "Zusätzliche Imagetags",
"loc.input.help.additionalImageTags": "Zusätzliche Tags für die Docker-Images, die erstellt oder mithilfe von Push übertragen werden sollen.",
"loc.input.label.includeSourceTags": "Quelltags einschließen",
"loc.input.help.includeSourceTags": "Fügen Sie Git-Tags ein, wenn Sie Docker-Images erstellen oder mittels Push übertragen.",
"loc.input.label.includeLatestTag": "Aktuelles Tag einschließen",
"loc.input.help.includeLatestTag": "Fügen Sie das Tag \"latest\" (aktuell) ein, wenn Sie die Docker-Images erstellen oder mittels Push übertragen.",
"loc.input.label.buildImages": "Images erstellen",
"loc.input.help.buildImages": "Erstellen Sie Images, bevor Sie Dienstcontainer starten.",
"loc.input.label.serviceName": "Dienstname",
"loc.input.help.serviceName": "Name des auszuführenden spezifischen Diensts.",
"loc.input.label.containerName": "Containername",
"loc.input.help.containerName": "Name des auszuführenden spezifischen Dienstcontainers.",
"loc.input.label.ports": "Ports",
"loc.input.help.ports": "Ports im spezifischen Dienstcontainer zum Veröffentlichen an den Host. Geben Sie jede Hostport:Containerport-Bindung in einer neuen Zeile an.",
"loc.input.label.workDir": "Arbeitsverzeichnis",
"loc.input.help.workDir": "Das Arbeitsverzeichnis für den spezifischen Dienstcontainer.",
"loc.input.label.entrypoint": "Überschreiben des Einstiegspunkts",
"loc.input.help.entrypoint": "Überschreiben Sie den Standardeinstiegspunkt für den spezifischen Dienstcontainer.",
"loc.input.label.containerCommand": "Befehl",
"loc.input.help.containerCommand": "Im spezifischen Dienstcontainer auszuführender Befehl. Wenn das Image beispielsweise eine einfache Python Flask-Webanwendung enthält, können Sie zum Starten der Webanwendung \"python app.py\" angeben.",
"loc.input.label.detached": "Im Hintergrund ausführen",
"loc.input.help.detached": "Führen Sie die Dienstcontainer im Hintergrund aus.",
"loc.input.label.abortOnContainerExit": "Beim Beenden des Containers abbrechen",
"loc.input.help.abortOnContainerExit": "Alle Container anhalten, wenn ein Container beendet wird.",
"loc.input.label.imageDigestComposeFile": "Imagehashwert-Compose-Datei",
"loc.input.help.imageDigestComposeFile": "Pfad zu einer Docker Compose-Datei, die erstellt und mit den vollständigen Imagerepository-Hashwerten des Docker-Images jedes Diensts befüllt wird.",
"loc.input.label.removeBuildOptions": "Buildoptionen entfernen",
"loc.input.help.removeBuildOptions": "Entfernen Sie die Buildoptionen aus der Docker Compose-Ausgabedatei.",
"loc.input.label.baseResolveDirectory": "Basisauflösungsverzeichnis",
"loc.input.help.baseResolveDirectory": "Das Basisverzeichnis, in dem die entsprechenden Pfade in der Docker Compose-Ausgabedatei aufgelöst werden sollen.",
"loc.input.label.outputDockerComposeFile": "Docker Compose-Datei ausgeben",
"loc.input.help.outputDockerComposeFile": "Pfad zu einer Docker Compose-Ausgabedatei.",
"loc.input.label.dockerComposeCommand": "Befehl",
"loc.input.help.dockerComposeCommand": "Docker Compose-Befehl, der mit Argumenten ausgeführt werden soll. Beispielsweise \"rm --all\" entfernt alle angehaltenen Dienstcontainer.",
"loc.input.label.arguments": "Argumente",
"loc.input.help.arguments": "Docker Compose-Befehlsoptionen. Beispiel: <br> Für Buildbefehl:<br>--pull --compress --parallel",
"loc.input.label.dockerHostEndpoint": "Docker-Hostdienstverbindung",
"loc.input.help.dockerHostEndpoint": "Wählen Sie eine Docker-Hostdienstverbindung. Entspricht standardmäßig dem Agent-Host.",
"loc.input.label.nopIfNoDockerComposeFile": "Kein Vorgang, wenn keine Docker Compose-Datei vorhanden ist",
"loc.input.help.nopIfNoDockerComposeFile": "Wenn die Docker Compose-Datei nicht vorhanden ist, überspringen Sie diese Aufgabe. Dies ist hilfreich, wenn die Aufgabe ein optionales Verhalten ermöglicht, das darauf basiert, dass im Repository eine Docker Compose-Datei enthalten ist.",
"loc.input.label.requireAdditionalDockerComposeFiles": "Zusätzliche Docker Compose-Dateien erfordern",
"loc.input.help.requireAdditionalDockerComposeFiles": "Erzeugt einen Fehler, wenn die zusätzlichen Docker Compose-Dateien nicht vorhanden sind. Dies überschreibt das Standardverhalten, das darin besteht, eine nicht vorhandene Datei zu ignorieren.",
"loc.input.label.cwd": "Arbeitsverzeichnis",
"loc.input.help.cwd": "Arbeitsverzeichnis für den Docker Compose-Befehl.",
"loc.input.label.dockerComposePath": "Pfad zur ausführbaren Docker Compose-Datei",
"loc.input.help.dockerComposePath": "Diese ausführbare docker-compose-Datei wird verwendet, wenn der Pfad angegeben wird.",
"loc.messages.ConnectingToDockerHost": "Die DOCKER_HOST-Variable ist festgelegt. Docker versucht, eine Verbindung mit dem Docker-Host herzustellen: %s",
"loc.messages.ContainerPatternFound": "Muster in Docker Compose-Parameter \"filepath\" gefunden.",
"loc.messages.ContainerPatternNotFound": "Kein Muster in Docker Compose-Parameter \"filepath\" gefunden.",
"loc.messages.ContainerDockerFileNotFound": "Es wurde keine Docker-Datei gefunden, die %s entspricht.",
"loc.messages.AdditionalDockerComposeFileDoesNotExists": "Die zusätzliche Docker Compose-Datei \"%s\" ist nicht vorhanden.",
"loc.messages.CantWriteDataToFile": "In die Datei \"%s\" können keine Daten geschrieben werden. Fehler: %s",
"loc.messages.DockerHostVariableWarning": "Die DOCKER_HOST-Variable ist festgelegt. Stellen Sie sicher, dass der Docker-Daemon auf \"%s\" ausgeführt wird.",
"loc.messages.NoDataWrittenOnFile": "In die Datei \"%s\" wurden keine Daten geschrieben. ",
"loc.messages.FileContentSynced": "Der Inhalt der Datei wurde auf dem Datenträger synchronisiert. Der Inhalt ist \"%s\".",
"loc.messages.ImageNameWithoutTag": "Imagename nicht mit Tag angegeben, Übertragung aller Imagetags mithilfe von Push angegeben.",
"loc.messages.WritingDockerConfigToTempFile": "Die Docker-Konfiguration wird in eine temporäre Datei geschrieben. Dateipfad: %s, Docker-Konfiguration: %s"
}
Loading
Loading