diff --git a/.github/workflows/cyberduck-release-windows-chocolatey.yml b/.github/workflows/cyberduck-release-windows-chocolatey.yml new file mode 100644 index 00000000000..1500d5e8948 --- /dev/null +++ b/.github/workflows/cyberduck-release-windows-chocolatey.yml @@ -0,0 +1,19 @@ +name: cyberduck-release-windows-chocolatey +on: + workflow_dispatch: +env: + CHOCOLATEY_API: "${{ secrets.CHOCOLATEY_API_KEY }}" +# # TimestamperBuildWrapper was not converted because the behavior is available by default in GitHub Actions and/or it is not configurable +jobs: + build: + runs-on: + - windows-latest + steps: + - name: checkout + uses: actions/checkout@v4.1.0 + - name: run batch command + shell: cmd + run: FOR %%c in ("%GITHUB_REPOSITORY%\..\cyberduck-release-windows\windows\target\release\cyberduck.*.nupkg") DO C:\ProgramData\chocolatey\bin\cpush --verbose --api-key %CHOCOLATEY_API% %%c +# # Mailer plugin was not converted because GitHub Actions will email the actor after failed build and does not support emailing a list of recipients + + diff --git a/.github/workflows/cyberduck-release-windows.yml b/.github/workflows/cyberduck-release-windows.yml new file mode 100644 index 00000000000..571c47b770a --- /dev/null +++ b/.github/workflows/cyberduck-release-windows.yml @@ -0,0 +1,208 @@ +name: cyberduck-release-windows +on: + workflow_dispatch: + inputs: + GIT_TAG: + required: false + +env: + AWS_ACCESS_KEY_DEPLOYMENT: "${{ secrets.AWS_ACCESS_KEY_DEPLOYMENT }}" + AWS_SECRET_KEY_DEPLOYMENT: "${{ secrets.AWS_SECRET_KEY_DEPLOYMENT }}" + AWS_CUSTOM_IP5_ACCESS_KEY_DEPLOYMENT: "${{ secrets.AWS_CUSTOM_IP5_ACCESS_KEY_DEPLOYMENT }}" + AWS_CUSTOM_IP5_SECRET_KEY_DEPLOYMENT: "${{ secrets.AWS_CUSTOM_IP5_SECRET_KEY_DEPLOYMENT }}" + RACKSPACE_USER: "${{ secrets.RACKSPACE_USER }}" + RACKSPACE_PASSWORD: "${{ secrets.RACKSPACE_PASSWORD }}" + +jobs: + build: + runs-on: + - windows-latest + steps: + - name: clean workspace + shell: ruby {0} + run: |- + require "fileutils" + Dir.chdir(ENV["GITHUB_WORKSPACE"]) do + paths = Dir.glob(["**/*"]) + paths -= Dir.glob([".git/**", ".repository/**"]) + paths.each do |path| + File.delete(path) if File.file?(path) + FileUtils.rm_rf(path) if File.directory?(path) + end + end + + - name: checkout + uses: actions/checkout@v4.1.0 + with: + fetch-depth: '0' + ref: ${{ inputs.GIT_TAG }} + + - name: Copy Sparkle Updater Private Key (DSA) + shell: pwsh + env: + SPARKLE_UPDATER_PK: ${{ secrets.WIN_SPARKLE_UPDATER_PRIVATE_KEY }} + run: ${env:SPARKLE_UPDATER_PK} > "${env:GITHUB_WORKSPACE}\www\update\private.pem" + + - name: Generate maven settings.xml + uses: s4u/maven-settings-action@v2.8.0 + with: + path: "${{ github.workspace }}/settings.xml" + servers: | + [{ + "id": "custom-ip5-maven.cyberduck.io-release", + "username": "${{ secrets.AWS_CUSTOM_IP5_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_CUSTOM_IP5_SECRET_KEY_DEPLOYMENT }}" + }, + { + "id": "custom-ip5-maven.cyberduck.io-snapshot", + "username": "${{ secrets.AWS_CUSTOM_IP5_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_CUSTOM_IP5_SECRET_KEY_DEPLOYMENT }}" + }, + { + "id": "maven.iterate.ch-release", + "username": "${{ secrets.AWS_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_SECRET_KEY_DEPLOYMENT }}" + }, + { + "id": "maven.iterate.ch-snapshot", + "username": "${{ secrets.AWS_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_SECRET_KEY_DEPLOYMENT }}" + }, + { + "id": "maven.cyberduck.io-release", + "username": "${{ secrets.AWS_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_SECRET_KEY_DEPLOYMENT }}" + }, + { + "id": "maven.cyberduck.io-snapshot", + "username": "${{ secrets.AWS_ACCESS_KEY_DEPLOYMENT }}", + "password": "${{ secrets.AWS_SECRET_KEY_DEPLOYMENT }}" + }] + + - name: Set up JDK 17 and skip overwriting of settings.xml + uses: actions/setup-java@v4.0.0 + with: + distribution: 'temurin' + java-version: '17' + settings-path: "${{ github.workspace }}" + overwrite-settings: false + + - name: Install upload requirement Cyberduck CLI using chocolatey + shell: pwsh + run: Import-Module "${env:ChocolateyInstall}\helpers\chocolateyProfile.psm1" && choco install duck -y && refreshenv && "${env:Path}" | Out-File -FilePath ${env:GITHUB_PATH} -Append + # run: Import-Module "${env:ChocolateyInstall}\helpers\chocolateyProfile.psm1" && choco install duck -y && refreshenv && Get-Command duck | Split-Path -Parent | Out-File -FilePath ${env:GITHUB_PATH} -Append + + - name: Install build requirement Bonjour Print Services for Windows (https://community.chocolatey.org/packages/bonjour) + shell: pwsh + run: Import-Module "${env:ChocolateyInstall}\helpers\chocolateyProfile.psm1" && choco install bonjour -y && refreshenv && "${env:Path}" | Out-File -FilePath ${env:GITHUB_PATH} -Append + + - name: Install build requirement openssl using chocolatey + shell: pwsh + run: Import-Module "${env:ChocolateyInstall}\helpers\chocolateyProfile.psm1" && choco install openssl -y && refreshenv && "${env:Path}" | Out-File -FilePath ${env:GITHUB_PATH} -Append + + - name: Add MSBuild.exe to PATH + uses: microsoft/setup-msbuild@v1.1 + + - name: Run maven + # Todo: Remove "-e" and "-DskipSign=true" Options for production + run: mvn clean deploy -DskipSign=true -e --settings ${env:GITHUB_WORKSPACE}/settings.xml -DskipTests -D"sparkle.feed=" + + - name: Upload files to Rackspace + shell: pwsh + run: echo "Dummy rackspace upload" +# run: Get-ChildItem "${Env:GITHUB_WORKSPACE}\windows\target\release\" -Filter Cyberduck-* | Foreach-Object -process { duck --upload rackspace:/cdn.cyberduck.ch/ $_.FullName --username ${Env:RACKSPACE_USER} --password ${Env:RACKSPACE_PASSWORD} --retry --quiet --existing overwrite --region DFW } +# run: FOR %%c in ("%GITHUB_WORKSPACE%\windows\target\release\Cyberduck-*") DO "C:\Program Files\Cyberduck CLI\duck.exe" --upload rackspace:/cdn.cyberduck.ch/ "%%c" --username %RACKSPACE_USER% --password %RACKSPACE_PASSWORD% --retry --quiet --existing overwrite --region DFW + + - name: Upload files to AWS S3 Bucket + shell: pwsh + # Todo: Remove echos + run: dir "${Env:GITHUB_WORKSPACE}"; echo ${Env:GITHUB_WORKSPACE}\windows\target\release\; Get-ChildItem "${Env:GITHUB_WORKSPACE}\windows\target\release\" -Filter Cyberduck-* | Foreach-Object -process { duck --upload s3:/ip5-cicd-cyberduck/ $_.FullName --username ${Env:AWS_CUSTOM_IP5_ACCESS_KEY_DEPLOYMENT} --password ${Env:AWS_CUSTOM_IP5_SECRET_KEY_DEPLOYMENT} --retry --quiet --existing overwrite --region eu-west-1} +# run: Get-ChildItem "${Env:GITHUB_WORKSPACE}\windows\target\release\" -Filter Cyberduck-* | Foreach-Object -process { duck --upload s3:/release.cyberduck.io/ $_.FullName --username ${Env:AWS_ACCESS_KEY_DEPLOYMENT} --password ${Env:AWS_SECRET_KEY_DEPLOYMENT} --retry --quiet --existing overwrite --region us-east-1 } +# run: FOR %%c in ("%GITHUB_WORKSPACE%\windows\target\release\Cyberduck-*") DO "C:\Program Files\Cyberduck CLI\duck.exe" --upload s3:/release.cyberduck.io/ "%%c" --username %AWS_ACCESS_KEY_DEPLOYMENT% --password %AWS_SECRET_KEY_DEPLOYMENT% --retry --quiet --existing overwrite --region us-east-1 + + - name: Upload Artifacts + uses: actions/upload-artifact@v3.1.3 + if: always() + with: + path: |- + windows\target\release\*.exe + windows\target\release\*.msi + windows\target\release\*.appx + !**/*~ + !**/#*# + !**/.#* + !**/%*% + !**/._* + !**/CVS + !**/CVS/** + !**/.cvsignore + !**/SCCS + !**/SCCS/** + !**/vssver.scc + !**/.svn + !**/.svn/** + !**/.DS_Store + !**/.git + !**/.git/** + !**/.gitattributes + !**/.gitignore + !**/.gitmodules + !**/.hg + !**/.hg/** + !**/.hgignore + !**/.hgsub + !**/.hgsubstate + !**/.hgtags + !**/.bzr + !**/.bzr/** + !**/.bzrignore + +# # Fingerprinter was not converted because the behavior is available by default in GitHub Actions and/or it is not configurable +# # Mailer plugin was not converted because GitHub Actions will email the actor after failed build and does not support emailing a list of recipients + # Ensure parameter if_key_exists is set correctly + - name: Install SSH key + uses: shimataro/ssh-key-action@v2.6.1 + with: + key: "${{ secrets.VERSION_CYBERDUCK_IO_SSH_KEY }}" + name: id_rsa-version_cyberduck_io + known_hosts: "${{ secrets.VERSION_CYBERDUCK_IO_KNOWN_HOSTS }}" + if_key_exists: replace # replace will allow us to update the ssh-key on an existing build + config: | + Host VERSION_CYBERDUCK_IO + HostName ${{ secrets.VERSION_CYBERDUCK_IO_HOST_NAME }} + User ${{ secrets.VERSION_CYBERDUCK_IO_USER }} + IdentityFile ~/.ssh/id_rsa-version_cyberduck_io + if: always() + + - name: setup file transfer file + uses: actions/github-script@v7.0.0 + with: + script: |- + const fs = require('fs').promises + const path = require('path') + const patterns = "windows/target/update/changelog.*,!**/*~,!**/#*#,!**/.#*,!**/%*%,!**/._*,!**/CVS,!**/CVS/**,!**/.cvsignore,!**/SCCS,!**/SCCS/**,!**/vssver.scc,!**/.svn,!**/.svn/**,!**/.DS_Store,!**/.git,!**/.git/**,!**/.gitattributes,!**/.gitignore,!**/.gitmodules,!**/.hg,!**/.hg/**,!**/.hgignore,!**/.hgsub,!**/.hgsubstate,!**/.hgtags,!**/.bzr,!**/.bzr/**,!**/.bzrignore" + const globber = await glob.create(patterns.replace(/,/g, "\n")) + const files = [] + for await (const file of globber.globGenerator()) { + if ((await fs.lstat(file)).isDirectory()) continue + files.push(path.relative(process.cwd(), file)) + } + fs.writeFile("version_cyberduck_io-transfer.txt", files.join("\n"), (err) => {}) + if: always() + + - name: run file transfers + run: |- + ssh VERSION_CYBERDUCK_IO 'mkdir -p windows' + tar -cvf version_cyberduck_io-transfer.tar --files-from version_cyberduck_io-transfer.txt + scp version_cyberduck_io-transfer.tar VERSION_CYBERDUCK_IO: + ssh VERSION_CYBERDUCK_IO 'tar -xvf version_cyberduck_io-transfer.tar -C windows && rm version_cyberduck_io-transfer.tar' + if: always() +# # This item has no matching transformer +# - uses: hudson.tasks.BuildTrigger +# with: +# childProjects: cyberduck-release-windows-chocolatey +# threshold: +# name: SUCCESS +# ordinal: '0' +# color: BLUE +# completeBuild: 'true' diff --git a/pom.xml b/pom.xml index ecd2c3ef51d..2d005fb7802 100644 --- a/pom.xml +++ b/pom.xml @@ -859,12 +859,14 @@ maven.cyberduck.io-release - s3://repo.maven.cyberduck.io/releases/ + + file://${user.home} default maven.cyberduck.io-snapshot - s3://repo.maven.cyberduck.io/snapshots/ + file://${user.home} github-pages-site