diff --git a/msa/js-executor/docker/Dockerfile b/msa/js-executor/docker/Dockerfile index ede28aa4f4..92b2229e79 100644 --- a/msa/js-executor/docker/Dockerfile +++ b/msa/js-executor/docker/Dockerfile @@ -16,13 +16,19 @@ FROM thingsboard/base -COPY start-js-executor.sh ${pkg.name}.deb /tmp/ +ARG TARGETPLATFORM + +COPY start-js-executor.sh ${pkg.name}.deb ${pkg.name}-arm64.deb /tmp/ RUN chmod a+x /tmp/*.sh \ && mv /tmp/start-js-executor.sh /usr/bin -RUN yes | dpkg -i /tmp/${pkg.name}.deb +RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; \ + then yes | dpkg -i /tmp/${pkg.name}-arm64.deb; \ + else yes | dpkg -i /tmp/${pkg.name}.deb; \ + fi RUN rm /tmp/${pkg.name}.deb +RUN rm /tmp/${pkg.name}-arm64.deb RUN systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || : diff --git a/msa/js-executor/install.js b/msa/js-executor/install.js index d180a5247a..9fe911e7b2 100644 --- a/msa/js-executor/install.js +++ b/msa/js-executor/install.js @@ -21,10 +21,13 @@ let _projectRoot = null; (async() => { - await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux'), + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux-x64'), path.join(targetPackageDir('linux'), 'bin', 'tb-js-executor'), {overwrite: true}); - await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-win.exe'), + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux-arm64'), + path.join(targetPackageDir('linux'), 'bin-arm64', 'tb-js-executor'), + {overwrite: true}); + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-win-x64.exe'), path.join(targetPackageDir('windows'), 'bin', 'tb-js-executor.exe'), {overwrite: true}); })(); diff --git a/msa/js-executor/package.json b/msa/js-executor/package.json index 9fe84ffa9f..0e2cee6e54 100644 --- a/msa/js-executor/package.json +++ b/msa/js-executor/package.json @@ -6,7 +6,7 @@ "main": "server.js", "bin": "server.js", "scripts": { - "install": "pkg -t node12-linux-x64,node12-win-x64 --out-path ./target . && node install.js", + "install": "pkg -t node12-linux-x64,node12-linux-arm64,node12-win-x64 --out-path ./target . && node install.js", "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon server.js", "start-prod": "NODE_ENV=production nodemon server.js" diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml index 5cabaed58a..16f1f0293b 100644 --- a/msa/js-executor/pom.xml +++ b/msa/js-executor/pom.xml @@ -42,6 +42,7 @@ package ${project.build.directory}/package/linux ${project.build.directory}/package/windows + pre-integration-test diff --git a/msa/pom.xml b/msa/pom.xml index 024607378c..f5dd65b3e0 100644 --- a/msa/pom.xml +++ b/msa/pom.xml @@ -35,6 +35,7 @@ true true 1.4.13 + none @@ -58,8 +59,67 @@ black-box-tests + + push-docker-amd-arm-images + + + push-docker-amd-arm-images + + + + + + org.codehaus.mojo + exec-maven-plugin + + + push-latest-docker-amd-arm-images + ${docker.push-arm-amd-image.phase} + + exec + + + docker + ${project.build.directory} + + buildx + build + -t + ${docker.repo}/${docker.name}:latest + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-version-docker-amd-arm-images + ${docker.push-arm-amd-image.phase} + + exec + + + docker + ${project.build.directory} + + buildx + build + -t + ${docker.repo}/${docker.name}:${project.version} + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + + + + - @@ -78,5 +138,4 @@ - diff --git a/msa/tb-node/pom.xml b/msa/tb-node/pom.xml index 9cf97b4906..d7d1b41907 100644 --- a/msa/tb-node/pom.xml +++ b/msa/tb-node/pom.xml @@ -38,6 +38,7 @@ tb-node /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/tb/pom.xml b/msa/tb/pom.xml index 841a4edbdf..df00aa3a72 100644 --- a/msa/tb/pom.xml +++ b/msa/tb/pom.xml @@ -355,6 +355,150 @@ + + push-docker-amd-arm-images + + + push-docker-amd-arm-images + + + + + + org.codehaus.mojo + exec-maven-plugin + + + push-latest-docker-amd-arm-tb-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-tb + + buildx + build + -t + ${docker.repo}/${tb.docker.name}:latest + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-version-docker-amd-arm-tb-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-tb + + buildx + build + -t + ${docker.repo}/${tb.docker.name}:${project.version} + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-latest-docker-amd-arm-tb-postgres-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-postgres + + buildx + build + -t + ${docker.repo}/${tb-postgres.docker.name}:latest + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-version-docker-amd-arm-tb-postgres-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-postgres + + buildx + build + -t + ${docker.repo}/${tb-postgres.docker.name}:${project.version} + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-latest-docker-amd-arm-tb-cassandra-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-cassandra + + buildx + build + -t + ${docker.repo}/${tb-cassandra.docker.name}:latest + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + push-version-docker-amd-arm-tb-cassandra-images + pre-integration-test + + exec + + + docker + ${project.build.directory}/docker-cassandra + + buildx + build + -t + ${docker.repo}/${tb-cassandra.docker.name}:${project.version} + --platform=linux/amd64,linux/arm64 + -o + type=registry + . + + + + + + + + diff --git a/msa/transport/coap/pom.xml b/msa/transport/coap/pom.xml index 34b37c6334..155ceb3af8 100644 --- a/msa/transport/coap/pom.xml +++ b/msa/transport/coap/pom.xml @@ -38,6 +38,7 @@ tb-coap-transport /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/transport/http/pom.xml b/msa/transport/http/pom.xml index 0cc5320250..9af7cc5907 100644 --- a/msa/transport/http/pom.xml +++ b/msa/transport/http/pom.xml @@ -38,6 +38,7 @@ tb-http-transport /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/transport/lwm2m/pom.xml b/msa/transport/lwm2m/pom.xml index 2dd44c4386..a1c3689af5 100644 --- a/msa/transport/lwm2m/pom.xml +++ b/msa/transport/lwm2m/pom.xml @@ -38,6 +38,7 @@ tb-lwm2m-transport /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/transport/mqtt/pom.xml b/msa/transport/mqtt/pom.xml index d483ef42eb..97f6cc4e62 100644 --- a/msa/transport/mqtt/pom.xml +++ b/msa/transport/mqtt/pom.xml @@ -38,6 +38,7 @@ tb-mqtt-transport /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/transport/snmp/pom.xml b/msa/transport/snmp/pom.xml index a30942fe4c..f3776fb8c3 100644 --- a/msa/transport/snmp/pom.xml +++ b/msa/transport/snmp/pom.xml @@ -39,6 +39,7 @@ tb-snmp-transport /var/log/${pkg.name} /usr/share/${pkg.name} + pre-integration-test diff --git a/msa/web-ui/docker/Dockerfile b/msa/web-ui/docker/Dockerfile index 90fbb8d34e..5b4acf9eb3 100644 --- a/msa/web-ui/docker/Dockerfile +++ b/msa/web-ui/docker/Dockerfile @@ -16,13 +16,19 @@ FROM thingsboard/base -COPY start-web-ui.sh ${pkg.name}.deb /tmp/ +ARG TARGETPLATFORM + +COPY start-web-ui.sh ${pkg.name}.deb ${pkg.name}-arm64.deb /tmp/ RUN chmod a+x /tmp/*.sh \ && mv /tmp/start-web-ui.sh /usr/bin -RUN yes | dpkg -i /tmp/${pkg.name}.deb +RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; \ + then yes | dpkg -i /tmp/${pkg.name}-arm64.deb; \ + else yes | dpkg -i /tmp/${pkg.name}.deb; \ + fi RUN rm /tmp/${pkg.name}.deb +RUN rm /tmp/${pkg.name}-arm64.deb RUN systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || : diff --git a/msa/web-ui/install.js b/msa/web-ui/install.js index 36b2311bb0..f0021d64f7 100644 --- a/msa/web-ui/install.js +++ b/msa/web-ui/install.js @@ -21,10 +21,13 @@ let _projectRoot = null; (async() => { - await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux'), + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux-x64'), path.join(targetPackageDir('linux'), 'bin', 'tb-web-ui'), {overwrite: true}); - await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-win.exe'), + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux-arm64'), + path.join(targetPackageDir('linux'), 'bin-arm64', 'tb-web-ui'), + {overwrite: true}); + await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-win-x64.exe'), path.join(targetPackageDir('windows'), 'bin', 'tb-web-ui.exe'), {overwrite: true}); })(); diff --git a/msa/web-ui/package.json b/msa/web-ui/package.json index cc98e5f457..9e2075010a 100644 --- a/msa/web-ui/package.json +++ b/msa/web-ui/package.json @@ -6,7 +6,7 @@ "main": "server.js", "bin": "server.js", "scripts": { - "install": "pkg -t node12-linux-x64,node12-win-x64 --out-path ./target . && node install.js", + "install": "pkg -t node12-linux-x64,node12-linux-arm64,node12-win-x64 --out-path ./target . && node install.js", "test": "echo \"Error: no test specified\" && exit 1", "start": "WEB_FOLDER=./target/web nodemon server.js", "start-prod": "NODE_ENV=production nodemon server.js" diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml index 2b973afaba..bf311df492 100644 --- a/msa/web-ui/pom.xml +++ b/msa/web-ui/pom.xml @@ -44,6 +44,7 @@ package ${project.build.directory}/package/linux ${project.build.directory}/package/windows + pre-integration-test diff --git a/packaging/js/build.gradle b/packaging/js/build.gradle index 929b7ed9d7..df9d86dde7 100644 --- a/packaging/js/build.gradle +++ b/packaging/js/build.gradle @@ -36,12 +36,6 @@ ospackage { user pkgUser permissionGroup pkgUser - // Copy the executable file - from("${buildDir}/package/linux/bin/${pkgName}") { - fileMode 0500 - into "bin" - } - // Copy the init file from("${buildDir}/package/linux/init/template") { fileMode 0500 @@ -78,9 +72,17 @@ buildRpm { preUninstall file("${buildDir}/control/rpm/prerm") postUninstall file("${buildDir}/control/rpm/postrm") + into pkgInstallFolder + user pkgUser permissionGroup pkgUser + // Copy the executable file + from("${buildDir}/package/linux/bin/${pkgName}") { + fileMode 0500 + into "bin" + } + // Copy the system unit files from("${buildDir}/control/template.service") { addParentDirs = false @@ -111,9 +113,17 @@ buildDeb { preUninstall file("${buildDir}/control/deb/prerm") postUninstall file("${buildDir}/control/deb/postrm") + into pkgInstallFolder + user pkgUser permissionGroup pkgUser + // Copy the executable file + from("${buildDir}/package/linux/bin/${pkgName}") { + fileMode 0500 + into "bin" + } + // Copy the system unit files from("${buildDir}/control/template.service") { addParentDirs = false @@ -126,3 +136,46 @@ buildDeb { link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf") } + +// Same as the buildRpm task +task buildDebArm64(type: Deb) { + + arch = "arm64" + + archiveFileName = "${pkgName}-arm64.deb" + + configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf") + configurationFile("${pkgInstallFolder}/conf/custom-environment-variables.yml") + configurationFile("${pkgInstallFolder}/conf/default.yml") + configurationFile("${pkgInstallFolder}/conf/logger.js") + + preInstall file("${buildDir}/control/deb/preinst") + postInstall file("${buildDir}/control/deb/postinst") + preUninstall file("${buildDir}/control/deb/prerm") + postUninstall file("${buildDir}/control/deb/postrm") + + into pkgInstallFolder + + user pkgUser + permissionGroup pkgUser + + // Copy the executable file + from("${buildDir}/package/linux/bin-arm64/${pkgName}") { + fileMode 0500 + into "bin" + } + + // Copy the system unit files + from("${buildDir}/control/template.service") { + addParentDirs = false + fileMode 0644 + into "/lib/systemd/system" + rename { String filename -> + "${pkgName}.service" + } + } + + link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf") +} + +buildDeb.finalizedBy buildDebArm64 diff --git a/pom.xml b/pom.xml index 8730be5bee..af4180baab 100755 --- a/pom.xml +++ b/pom.xml @@ -684,6 +684,11 @@ maven-deploy-plugin 3.0.0-M1 + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + org.apache.maven.plugins maven-dependency-plugin