diff --git a/appveyor-ci.yml b/appveyor-ci.yml index 4cc36adb8..ab1188611 100644 --- a/appveyor-ci.yml +++ b/appveyor-ci.yml @@ -1,11 +1,11 @@ version: 1.0.{build} -image: +image: - Visual Studio 2017 - Ubuntu environment: matrix: - ARCH: amd64 - - ARCH: arm + - ARCH: arm - ARCH: arm64 - ARCH: ppc64le - ARCH: s390x @@ -26,7 +26,7 @@ matrix: branches: except: - master -stack: +stack: - node 9, go 1.10 install: - yarn install @@ -38,7 +38,7 @@ init: if (!(Test-Path ~/.docker)) { mkdir ~/.docker }; Set-Content -Value '{ "experimental": "enabled" }' -Path ~/.docker/config.json -Encoding Ascii build_script: - - sh: yarn grunt release:$IMAGE:$ARCH - - cmd: yarn grunt release:%IMAGE%:%ARCH% + - sh: yarn grunt appveyorbuild:$IMAGE:$ARCH + - cmd: yarn grunt appveyorbuild:%IMAGE%:%ARCH% - sh: sudo bash build/ci-linux.sh $IMAGE $ARCH $DOCKER_USER $DOCKER_PASS $APPVEYOR_REPO_BRANCH $APPVEYOR_PULL_REQUEST_NUMBER - - cmd: powershell -Command "& .\\build\\ci-windows.ps1" \ No newline at end of file + - cmd: powershell -Command "& .\\build\\ci-windows.ps1" diff --git a/appveyor-release.yml b/appveyor-release.yml index 348897690..6293e6c90 100644 --- a/appveyor-release.yml +++ b/appveyor-release.yml @@ -5,7 +5,7 @@ image: environment: matrix: - ARCH: amd64 - - ARCH: arm + - ARCH: arm - ARCH: arm64 - ARCH: ppc64le - ARCH: s390x @@ -43,8 +43,8 @@ init: if (!(Test-Path ~/.docker)) { mkdir ~/.docker } Set-Content -Value '{ "experimental": "enabled" }' -Path ~/.docker/config.json -Encoding Ascii build_script: - - sh: yarn grunt release:$IMAGE:$ARCH - - cmd: yarn grunt release:%IMAGE%:%ARCH% + - sh: yarn grunt appveyorbuild:$IMAGE:$ARCH + - cmd: yarn grunt appveyorbuild:%IMAGE%:%ARCH% - sh: sudo bash build/release-linux.sh $IMAGE $ARCH $PORTAINER_VERSION $DOCKER_USER $DOCKER_PASS - cmd: powershell -Command "& .\\build\\release-windows.ps1" test: off diff --git a/build/build_binary.ps1 b/build/build_binary.ps1 old mode 100644 new mode 100755 index 5d486c1f4..f444f776e --- a/build/build_binary.ps1 +++ b/build/build_binary.ps1 @@ -8,17 +8,10 @@ $ErrorActionPreference = "Stop"; $binary = "portainer.exe" $project_path = (Get-ITEM -Path env:APPVEYOR_BUILD_FOLDER).Value -Set-Item env:GOPATH "$project_path\api" - New-Item -Name dist -Path "$project_path" -ItemType Directory | Out-Null -New-Item -Name portainer -Path "$project_path\api\src\github.com\" -ItemType Directory | Out-Null - -Copy-Item -Path "$project_path\api" -Destination "$project_path\api\src\github.com\portainer" -Recurse -Force -ErrorAction:SilentlyContinue -Rename-Item -Path "$project_path\api\src\github.com\portainer\api" -NewName "portainer" -ErrorAction:SilentlyContinue - Set-Location -Path "$project_path\api\cmd\portainer" C:\go\bin\go.exe get -t -d -v ./... C:\go\bin\go.exe build -v -Move-Item -Path "$project_path\api\cmd\portainer\$($binary)" -Destination "$project_path\dist" +Move-Item -Path "$($binary)" -Destination "..\..\..\dist" diff --git a/build/build_binary.sh b/build/build_binary.sh index ae57b007b..124e3fa33 100755 --- a/build/build_binary.sh +++ b/build/build_binary.sh @@ -1,14 +1,9 @@ -export GOPATH="$APPVEYOR_BUILD_FOLDER/api" binary="portainer" - mkdir -p dist -mkdir -p api/src/github.com/portainer/ - -cp -R api/ api/src/github.com/portainer/portainer/ cd 'api/cmd/portainer' go get -t -d -v ./... GOOS=$1 GOARCH=$2 CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags '-s' -mv "$APPVEYOR_BUILD_FOLDER/api/cmd/portainer/$binary" "$APPVEYOR_BUILD_FOLDER/dist/portainer" +mv "${binary}" "../../../dist/portainer" diff --git a/build/build_binary_appveyor.ps1 b/build/build_binary_appveyor.ps1 new file mode 100755 index 000000000..5d486c1f4 --- /dev/null +++ b/build/build_binary_appveyor.ps1 @@ -0,0 +1,24 @@ +param ( + [string]$platform, + [string]$arch +) + +$ErrorActionPreference = "Stop"; + +$binary = "portainer.exe" +$project_path = (Get-ITEM -Path env:APPVEYOR_BUILD_FOLDER).Value + +Set-Item env:GOPATH "$project_path\api" + +New-Item -Name dist -Path "$project_path" -ItemType Directory | Out-Null +New-Item -Name portainer -Path "$project_path\api\src\github.com\" -ItemType Directory | Out-Null + +Copy-Item -Path "$project_path\api" -Destination "$project_path\api\src\github.com\portainer" -Recurse -Force -ErrorAction:SilentlyContinue +Rename-Item -Path "$project_path\api\src\github.com\portainer\api" -NewName "portainer" -ErrorAction:SilentlyContinue + +Set-Location -Path "$project_path\api\cmd\portainer" + +C:\go\bin\go.exe get -t -d -v ./... +C:\go\bin\go.exe build -v + +Move-Item -Path "$project_path\api\cmd\portainer\$($binary)" -Destination "$project_path\dist" diff --git a/build/build_binary_appveyor.sh b/build/build_binary_appveyor.sh new file mode 100755 index 000000000..ae57b007b --- /dev/null +++ b/build/build_binary_appveyor.sh @@ -0,0 +1,14 @@ +export GOPATH="$APPVEYOR_BUILD_FOLDER/api" +binary="portainer" + +mkdir -p dist +mkdir -p api/src/github.com/portainer/ + +cp -R api/ api/src/github.com/portainer/portainer/ + +cd 'api/cmd/portainer' + +go get -t -d -v ./... +GOOS=$1 GOARCH=$2 CGO_ENABLED=0 go build -a --installsuffix cgo --ldflags '-s' + +mv "$APPVEYOR_BUILD_FOLDER/api/cmd/portainer/$binary" "$APPVEYOR_BUILD_FOLDER/dist/portainer" diff --git a/build/ci-linux.sh b/build/ci-linux.sh old mode 100644 new mode 100755 diff --git a/build/ci-windows.ps1 b/build/ci-windows.ps1 old mode 100644 new mode 100755 diff --git a/build/download_docker_binary.ps1 b/build/download_docker_binary.ps1 old mode 100644 new mode 100755 diff --git a/build/release-linux.sh b/build/release-linux.sh old mode 100644 new mode 100755 diff --git a/build/release-windows.ps1 b/build/release-windows.ps1 old mode 100644 new mode 100755 diff --git a/gruntfile.js b/gruntfile.js index e65801918..665e669a3 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -50,6 +50,11 @@ module.exports = function(grunt) { grunt.task.registerTask('release', 'release::', function(p, a) { grunt.task.run(['config:prod', 'clean:all', 'shell:buildBinary:' + p + ':' + a, 'shell:downloadDockerBinary:' + p + ':' + a, 'before-copy', 'copy:assets', 'after-copy']); }); + + grunt.task.registerTask('appveyorbuild', 'appveyorbuild::', function(p, a) { + grunt.task.run(['config:prod', 'clean:all', 'shell:buildBinaryOnAppveyor:' + p + ':' + a, 'shell:downloadDockerBinary:' + p + ':' + a, 'before-copy', 'copy:assets', 'after-copy']); + }); + grunt.registerTask('lint', ['eslint']); grunt.registerTask('run-dev', ['build', 'shell:run:' + arch, 'watch:build']); grunt.registerTask('clear', ['clean:app']); @@ -259,26 +264,49 @@ gruntfile_cfg.replace = { }; function shell_buildBinary(p, a) { - var binfile = 'portainer-'+p+'-'+a; - if (p === "linux") { - return [ - 'if [ -f '+(binfile)+' ]; then', - 'echo "Portainer binary exists";', - 'else', - 'build/build_binary.sh ' + p + ' ' + a + ';', - 'fi' - ].join (' ') - } else { - return [ - 'powershell -Command "& {if (Get-Item -Path '+(binfile+'.exe')+' -ErrorAction:SilentlyContinue) {', - 'Write-Host "Portainer binary exists"', - '} else {', - '& ".\\build\\build_binary.ps1" -platform '+ p +' -arch '+ a +'', - '}}"' - ].join(' ') - } + var binfile = 'portainer-' + p + '-' + a; + if (p === 'linux') { + return [ + 'if [ -f ' + (binfile) + ' ]; then', + 'echo "Portainer binary exists";', + 'else', + 'build/build_binary.sh ' + p + ' ' + a + ';', + 'fi' + ].join(' '); + } else { + return [ + 'powershell -Command "& {if (Get-Item -Path ' + binfile + '.exe -ErrorAction:SilentlyContinue) {', + 'Write-Host "Portainer binary exists"', + '} else {', + '& ".\\build\\build_binary.ps1" -platform ' + p + ' -arch ' + a + '', + '}}"' + ].join(' '); + } } +function shell_buildBinaryOnAppveyor(p, a) { + var binfile = 'portainer-' + p + '-' + a; + if (p === 'linux') { + return [ + 'if [ -f ' + (binfile) + ' ]; then', + 'echo "Portainer binary exists";', + 'else', + 'build/build_binary_appveyor.sh ' + p + ' ' + a + ';', + 'fi' + ].join(' '); + } else { + return [ + 'powershell -Command "& {if (Get-Item -Path ' + binfile + '.exe -ErrorAction:SilentlyContinue) {', + 'Write-Host "Portainer binary exists"', + '} else {', + '& ".\\build\\build_binary_appveyor.ps1" -platform ' + p + ' -arch ' + a + '', + '}}"' + ].join(' '); + } +} + + + function shell_run(arch) { return [ 'docker rm -f portainer', @@ -291,28 +319,29 @@ function shell_downloadDockerBinary(p, a) { var as = { 'amd64': 'x86_64', 'arm': 'armhf', 'arm64': 'aarch64' }; var ip = ((ps[p] === undefined) ? p : ps[p]); var ia = ((as[a] === undefined) ? a : as[a]); - var binaryVersion = (( p === 'windows' ? '<%= shippedDockerVersionWindows %>' : '<%= shippedDockerVersion %>' )); - if (p === "linux") { + var binaryVersion = ((p === 'windows' ? '<%= shippedDockerVersionWindows %>' : '<%= shippedDockerVersion %>')); + if (p === 'linux') { return [ - 'if [ -f '+('dist/docker')+' ]; then', - 'echo "Docker binary exists";', + 'if [ -f dist/docker ]; then', + 'echo "Docker binary exists";', 'else', - 'build/download_docker_binary.sh ' + ip + ' ' + ia + ' ' + binaryVersion + ';', + 'build/download_docker_binary.sh ' + ip + ' ' + ia + ' ' + binaryVersion + ';', 'fi' - ].join (' ') + ].join(' '); } else { return [ - 'powershell -Command "& {if (Get-Item -Path '+('dist/docker.exe')+' -ErrorAction:SilentlyContinue) {', - 'Write-Host "Docker binary exists"', + 'powershell -Command "& {if (Get-Item -Path dist/docker.exe -ErrorAction:SilentlyContinue) {', + 'Write-Host "Docker binary exists"', '} else {', - '& ".\\build\\download_docker_binary.ps1" -docker_version '+ binaryVersion +'', + '& ".\\build\\download_docker_binary.ps1" -docker_version ' + binaryVersion + '', '}}"' - ].join(' ') + ].join(' '); } } gruntfile_cfg.shell = { buildBinary: { command: shell_buildBinary }, + buildBinaryOnAppveyor: { command: shell_buildBinaryOnAppveyor }, run: { command: shell_run }, downloadDockerBinary: { command: shell_downloadDockerBinary } };