Switch from SFTP to s3 in Fastlane for publishing release to server
[ci skip]
This commit is contained in:
parent
d72b39c1b0
commit
8d7700331a
18
Gemfile.lock
18
Gemfile.lock
@ -4,10 +4,12 @@ GEM
|
|||||||
CFPropertyList (3.0.3)
|
CFPropertyList (3.0.3)
|
||||||
addressable (2.7.0)
|
addressable (2.7.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
|
apktools (0.7.4)
|
||||||
|
rubyzip (~> 2.0)
|
||||||
artifactory (3.0.15)
|
artifactory (3.0.15)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
aws-eventstream (1.1.0)
|
aws-eventstream (1.1.0)
|
||||||
aws-partitions (1.424.0)
|
aws-partitions (1.426.0)
|
||||||
aws-sdk-core (3.112.0)
|
aws-sdk-core (3.112.0)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
aws-partitions (~> 1, >= 1.239.0)
|
aws-partitions (~> 1, >= 1.239.0)
|
||||||
@ -50,7 +52,7 @@ GEM
|
|||||||
faraday_middleware (1.0.0)
|
faraday_middleware (1.0.0)
|
||||||
faraday (~> 1.0)
|
faraday (~> 1.0)
|
||||||
fastimage (2.2.2)
|
fastimage (2.2.2)
|
||||||
fastlane (2.173.0)
|
fastlane (2.174.0)
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
CFPropertyList (>= 2.3, < 4.0.0)
|
||||||
addressable (>= 2.3, < 3.0.0)
|
addressable (>= 2.3, < 3.0.0)
|
||||||
artifactory (~> 3.0)
|
artifactory (~> 3.0)
|
||||||
@ -87,6 +89,10 @@ GEM
|
|||||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||||
xcpretty (~> 0.3.0)
|
xcpretty (~> 0.3.0)
|
||||||
xcpretty-travis-formatter (>= 0.0.3)
|
xcpretty-travis-formatter (>= 0.0.3)
|
||||||
|
fastlane-plugin-aws_s3 (1.8.0)
|
||||||
|
apktools (~> 0.7)
|
||||||
|
aws-sdk-s3 (~> 1)
|
||||||
|
mime-types (~> 3.3)
|
||||||
fastlane-plugin-get_version_name (0.2.2)
|
fastlane-plugin-get_version_name (0.2.2)
|
||||||
gh_inspector (1.1.3)
|
gh_inspector (1.1.3)
|
||||||
google-api-client (0.38.0)
|
google-api-client (0.38.0)
|
||||||
@ -109,7 +115,7 @@ GEM
|
|||||||
webrick
|
webrick
|
||||||
google-apis-iamcredentials_v1 (0.1.0)
|
google-apis-iamcredentials_v1 (0.1.0)
|
||||||
google-apis-core (~> 0.1)
|
google-apis-core (~> 0.1)
|
||||||
google-apis-storage_v1 (0.1.0)
|
google-apis-storage_v1 (0.2.0)
|
||||||
google-apis-core (~> 0.1)
|
google-apis-core (~> 0.1)
|
||||||
google-cloud-core (1.5.0)
|
google-cloud-core (1.5.0)
|
||||||
google-cloud-env (~> 1.0)
|
google-cloud-env (~> 1.0)
|
||||||
@ -125,7 +131,7 @@ GEM
|
|||||||
google-cloud-core (~> 1.2)
|
google-cloud-core (~> 1.2)
|
||||||
googleauth (~> 0.9)
|
googleauth (~> 0.9)
|
||||||
mini_mime (~> 1.0)
|
mini_mime (~> 1.0)
|
||||||
googleauth (0.15.0)
|
googleauth (0.15.1)
|
||||||
faraday (>= 0.17.3, < 2.0)
|
faraday (>= 0.17.3, < 2.0)
|
||||||
jwt (>= 1.4, < 3.0)
|
jwt (>= 1.4, < 3.0)
|
||||||
memoist (~> 0.16)
|
memoist (~> 0.16)
|
||||||
@ -140,6 +146,9 @@ GEM
|
|||||||
json (2.5.1)
|
json (2.5.1)
|
||||||
jwt (2.2.2)
|
jwt (2.2.2)
|
||||||
memoist (0.16.2)
|
memoist (0.16.2)
|
||||||
|
mime-types (3.3.1)
|
||||||
|
mime-types-data (~> 3.2015)
|
||||||
|
mime-types-data (3.2020.1104)
|
||||||
mini_magick (4.11.0)
|
mini_magick (4.11.0)
|
||||||
mini_mime (1.0.2)
|
mini_mime (1.0.2)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
@ -204,6 +213,7 @@ DEPENDENCIES
|
|||||||
bcrypt_pbkdf
|
bcrypt_pbkdf
|
||||||
ed25519
|
ed25519
|
||||||
fastlane
|
fastlane
|
||||||
|
fastlane-plugin-aws_s3
|
||||||
fastlane-plugin-get_version_name
|
fastlane-plugin-get_version_name
|
||||||
net-sftp
|
net-sftp
|
||||||
|
|
||||||
|
@ -12,8 +12,10 @@ SIGNING_UPDATE_APK_STORE_KEY_PATH=
|
|||||||
SIGNING_UPDATE_APK_STORE_PUB_KEY_PATH=
|
SIGNING_UPDATE_APK_STORE_PUB_KEY_PATH=
|
||||||
APK_STORE_BASIC_URL=
|
APK_STORE_BASIC_URL=
|
||||||
|
|
||||||
FTP_SERVER_USERNAME=
|
S3_BUCKET=
|
||||||
FTP_SERVER_KEY_FILE=
|
S3_ENDPOINT=
|
||||||
FTP_SERVER_PORT=
|
S3_REGION=
|
||||||
|
S3_ACCESS_KEY=
|
||||||
|
S3_SECRET_ACCESS_KEY=
|
||||||
|
|
||||||
SLACK_URL=
|
SLACK_URL=
|
||||||
|
@ -20,14 +20,14 @@ platform :android do |options|
|
|||||||
gradle(task: "test")
|
gradle(task: "test")
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Deploy new version to Google Play and APK Store options: beta:false scheduled:false (default)"
|
desc "Deploy new version to Google Play and APK Store options: beta:false (default)"
|
||||||
lane :deploy do |options|
|
lane :deploy do |options|
|
||||||
release_note_path_en = "metadata/android/en-US/changelogs/default.txt"
|
release_note_path_en = "metadata/android/en-US/changelogs/default.txt"
|
||||||
|
|
||||||
# use english-change-log for french language too
|
# use english-change-log for french language too
|
||||||
FileUtils.cp(release_note_path_en, "metadata/android/fr-FR/changelogs/default.txt")
|
FileUtils.cp(release_note_path_en, "metadata/android/fr-FR/changelogs/default.txt")
|
||||||
|
|
||||||
deployToPlaystore(scheduled:options[:scheduled], beta:options[:beta])
|
deployToPlaystore(beta:options[:beta])
|
||||||
|
|
||||||
if options[:beta]
|
if options[:beta]
|
||||||
puts "Skipping deployment to server cause there isn't currently a beta channel"
|
puts "Skipping deployment to server cause there isn't currently a beta channel"
|
||||||
@ -40,8 +40,8 @@ platform :android do |options|
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
deployToServer(scheduled:options[:scheduled], beta:options[:beta])
|
deployToServer(beta:options[:beta])
|
||||||
deployToFDroid(scheduled:options[:scheduled], beta:options[:beta])
|
deployToFDroid(beta:options[:beta])
|
||||||
|
|
||||||
slack(
|
slack(
|
||||||
default_payloads: [], # reduce the notification to the minimum
|
default_payloads: [], # reduce the notification to the minimum
|
||||||
@ -55,7 +55,7 @@ platform :android do |options|
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "Deploy new version to Play Store"
|
desc "Deploy new version to Play Store"
|
||||||
private_lane :deployToPlaystore do |options|
|
lane :deployToPlaystore do |options|
|
||||||
deploy_target = "production"
|
deploy_target = "production"
|
||||||
|
|
||||||
if options[:beta]
|
if options[:beta]
|
||||||
@ -96,7 +96,7 @@ platform :android do |options|
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "Deploy new version to server"
|
desc "Deploy new version to server"
|
||||||
private_lane :deployToServer do |options|
|
lane :deployToServer do |options|
|
||||||
gradle(task: "clean")
|
gradle(task: "clean")
|
||||||
|
|
||||||
gradle(
|
gradle(
|
||||||
@ -112,13 +112,12 @@ platform :android do |options|
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}.apk")
|
||||||
|
|
||||||
server_host = ENV["APK_STORE_BASIC_URL"]
|
server_host = ENV["APK_STORE_BASIC_URL"]
|
||||||
server_relative_folder = "/mnt/data/android/"
|
|
||||||
base_url = "https://#{server_host}/android/"
|
base_url = "https://#{server_host}/android/"
|
||||||
apk_url = "#{base_url}#{version}/Cryptomator-#{version}.apk"
|
apk_url = "#{base_url}#{version}/Cryptomator-#{version}.apk"
|
||||||
relative_apk_url = "#{server_relative_folder}#{version}/Cryptomator-#{version}.apk"
|
|
||||||
release_note_url = "#{base_url}#{version}/release-notes.html"
|
release_note_url = "#{base_url}#{version}/release-notes.html"
|
||||||
relative_release_note_url = "#{server_relative_folder}#{version}/release-notes.html"
|
|
||||||
|
|
||||||
claims = {
|
claims = {
|
||||||
"version": version,
|
"version": version,
|
||||||
@ -129,44 +128,47 @@ platform :android do |options|
|
|||||||
private_key = OpenSSL::PKey.read(File.read(ENV["SIGNING_UPDATE_APK_STORE_KEY_PATH"]))
|
private_key = OpenSSL::PKey.read(File.read(ENV["SIGNING_UPDATE_APK_STORE_KEY_PATH"]))
|
||||||
token = JWT.encode claims, private_key, "ES256"
|
token = JWT.encode claims, private_key, "ES256"
|
||||||
|
|
||||||
latest_version_filename = "latest-version.json"
|
|
||||||
if options[:scheduled]
|
|
||||||
latest_version_filename = "latest-version-#{version}.json"
|
latest_version_filename = "latest-version-#{version}.json"
|
||||||
puts "Scheduled upload activated, uploading latest-version.json to #{latest_version_filename} with claims #{claims}"
|
|
||||||
else
|
|
||||||
puts "#{latest_version_filename} has claims #{claims}"
|
|
||||||
end
|
|
||||||
|
|
||||||
latest_version_jsn = File.new("latest_versions/#{latest_version_filename}","w")
|
latest_version_jsn = File.new("latest_versions/#{latest_version_filename}","w")
|
||||||
latest_version_jsn.write(token)
|
latest_version_jsn.write(token)
|
||||||
latest_version_jsn.close
|
latest_version_jsn.close
|
||||||
latest_version_jsn = File.open("latest_versions/#{latest_version_filename}","r")
|
|
||||||
|
|
||||||
release_note_path = "release_notes_apkstore_en.html"
|
puts "Uploading APK and release note"
|
||||||
release_note_file = File.open(release_note_path,"r")
|
|
||||||
|
|
||||||
puts latest_version_filename
|
aws_s3(
|
||||||
|
bucket: ENV['S3_BUCKET'],
|
||||||
|
endpoint: ENV['S3_ENDPOINT'],
|
||||||
|
region: ENV['S3_REGION'],
|
||||||
|
access_key: ENV['S3_ACCESS_KEY'],
|
||||||
|
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
|
||||||
|
path: "android/#{version}",
|
||||||
|
files: [
|
||||||
|
"fastlane/release/Cryptomator-#{version}.apk",
|
||||||
|
"fastlane/release-notes.html"
|
||||||
|
],
|
||||||
|
skip_html_upload: true,
|
||||||
|
apk: ''
|
||||||
|
)
|
||||||
|
|
||||||
Net::SFTP.start(
|
puts "Uploading #{latest_version_filename} with claims #{claims}"
|
||||||
ENV["FTP_SERVER_URL"],
|
puts "Rename #{latest_version_filename} to latest-version.json for deployment"
|
||||||
ENV["FTP_SERVER_USERNAME"],
|
|
||||||
:keys=>[ENV["FTP_SERVER_KEY_FILE"]],
|
|
||||||
keys_only: true,
|
|
||||||
verify_host_key: :never,
|
|
||||||
:port=>ENV["FTP_SERVER_PORT"]
|
|
||||||
) do |sftp|
|
|
||||||
puts "Uploading files to server..."
|
|
||||||
sftp.mkdir! "#{server_relative_folder}#{version}"
|
|
||||||
sftp.upload!(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], relative_apk_url)
|
|
||||||
sftp.upload!(release_note_file, relative_release_note_url)
|
|
||||||
sftp.upload!(latest_version_jsn, "#{server_relative_folder}#{latest_version_filename}")
|
|
||||||
end
|
|
||||||
|
|
||||||
latest_version_jsn.close
|
aws_s3(
|
||||||
release_note_file.close
|
bucket: ENV['S3_BUCKET'],
|
||||||
|
endpoint: ENV['S3_ENDPOINT'],
|
||||||
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}_signed.apk")
|
region: ENV['S3_REGION'],
|
||||||
|
access_key: ENV['S3_ACCESS_KEY'],
|
||||||
|
secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
|
||||||
|
path: "android",
|
||||||
|
files: [
|
||||||
|
"fastlane/latest_versions/#{latest_version_filename}"
|
||||||
|
],
|
||||||
|
skip_html_upload: true,
|
||||||
|
apk: ''
|
||||||
|
)
|
||||||
|
|
||||||
|
FileUtils.mv("release/Cryptomator-#{version}.apk", "release/Cryptomator-#{version}_signed.apk")
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Deploy new version to F-Droid"
|
desc "Deploy new version to F-Droid"
|
||||||
@ -187,7 +189,6 @@ platform :android do |options|
|
|||||||
)
|
)
|
||||||
|
|
||||||
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}_fdroid_signed.apk")
|
FileUtils.cp(lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], "release/Cryptomator-#{version}_fdroid_signed.apk")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
after_all do |lane|
|
after_all do |lane|
|
||||||
|
@ -3,3 +3,4 @@
|
|||||||
# Ensure this file is checked in to source control!
|
# Ensure this file is checked in to source control!
|
||||||
|
|
||||||
gem 'fastlane-plugin-get_version_name'
|
gem 'fastlane-plugin-get_version_name'
|
||||||
|
gem 'fastlane-plugin-aws_s3'
|
||||||
|
@ -25,7 +25,17 @@ Run all the tests
|
|||||||
```
|
```
|
||||||
fastlane android deploy
|
fastlane android deploy
|
||||||
```
|
```
|
||||||
Deploy new version to Google Play and APK Store options: beta:false scheduled:false (default)
|
Deploy new version to Google Play and APK Store options: beta:false (default)
|
||||||
|
### android deployToPlaystore
|
||||||
|
```
|
||||||
|
fastlane android deployToPlaystore
|
||||||
|
```
|
||||||
|
Deploy new version to Play Store
|
||||||
|
### android deployToServer
|
||||||
|
```
|
||||||
|
fastlane android deployToServer
|
||||||
|
```
|
||||||
|
Deploy new version to server
|
||||||
### android deployToFDroid
|
### android deployToFDroid
|
||||||
```
|
```
|
||||||
fastlane android deployToFDroid
|
fastlane android deployToFDroid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user