-
Notifications
You must be signed in to change notification settings - Fork 80
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ebbf50b
commit 99e87c7
Showing
93 changed files
with
2,948 additions
and
1,093 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
name: pia-mobile/ios/vpn-ios | ||
on: | ||
push: | ||
workflow_dispatch: | ||
concurrency: | ||
group: "${{ github.ref }}" | ||
cancel-in-progress: true | ||
env: | ||
PIA_STAGING_ENDPOINT: "${{ secrets.PIA_STAGING_ENDPOINT }}" | ||
PIA_CUSTOM_SERVERS: chipotle251:US:chipotle251.londontrustmedia.com:108.61.57.211:8080:500 sharingan:GB:sharingan.londontrustmedia.com:185.195.200.20:8080:500 | ||
PIA_FIREBASE_PLIST: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>CLIENT_ID</key><string>599746893663-naub4m5ppoos0tuodrjuk67t0q5saj3m.apps.googleusercontent.com</string><key>REVERSED_CLIENT_ID</key><string>com.googleusercontent.apps.599746893663-naub4m5ppoos0tuodrjuk67t0q5saj3m</string><key>API_KEY</key><string>AIzaSyD_9Gdzi4WgNfAwl9PPupph1eWnf0zstA4</string><key>GCM_SENDER_ID</key><string>599746893663</string><key>PLIST_VERSION</key><string>1</string><key>BUNDLE_ID</key><string>com.privateinternetaccess.ios.PIA-VPN</string><key>PROJECT_ID</key><string>pia-ios-e7da0</string><key>STORAGE_BUCKET</key><string>pia-ios-e7da0.appspot.com</string><key>IS_ADS_ENABLED</key><false></false><key>IS_ANALYTICS_ENABLED</key><false></false><key>IS_APPINVITE_ENABLED</key><true></true><key>IS_GCM_ENABLED</key><true></true><key>IS_SIGNIN_ENABLED</key><true></true><key>GOOGLE_APP_ID</key><string>1:599746893663:ios:9a64d6b91b33eb1f3088ea</string><key>DATABASE_URL</key><string>https://pia-ios-e7da0.firebaseio.com</string></dict></plist> | ||
APPCENTER_API_TOKEN: "${{ secrets.APPCENTER_API_TOKEN }}" | ||
APPCENTER_OWNER_NAME: Kape | ||
APPCENTER_APP_NAME: PIA-VPN | ||
APPCENTER_DISTRIBUTE_DESTINATIONS: QA,Developers | ||
APPSTORE_USERNAME: "${{ secrets.APPSTORE_USERNAME }}" | ||
APPSTORE_SPECIFIC_PWD: "${{ secrets.APPSTORE_SPECIFIC_PWD }}" | ||
APPSTORE_PASSWORD: 7Uyz@VouY3pvn!gdU7Zr | ||
APP_IDENTIFIER: "${{ secrets.APP_IDENTIFIER }}" | ||
APPSTORE_CONNECT_TEAM_ID: '609225' | ||
APPSTORE_DEVELOPER_TEAM_ID: "${{ secrets.APPSTORE_DEVELOPER_TEAM_ID }}" | ||
FASTLANE_USER: "${{ secrets.FASTLANE_USER }}" | ||
FASTLANE_PASSWORD: 7Uyz@VouY3pvn!gdU7Zr | ||
MATCH_PASSWORD: "${{ secrets.MATCH_PASSWORD }}" | ||
SLACK_URL: "${{ secrets.SLACK_URL }}" | ||
DELIVER_USER: "${{ secrets.DELIVER_USER }}" | ||
jobs: | ||
qa_archive: | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads//^release.*$/') | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
MATCH_TYPE: adhoc | ||
GYM_SCHEME: PIA VPN dev | ||
GYM_EXPORT_METHOD: ad-hoc | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane create_archive | ||
- uses: actions/upload-artifact@v2 | ||
if: success() | ||
with: | ||
name: "${{ github.job }}" | ||
retention-days: 7 | ||
path: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*" | ||
beta_manual_archive: | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: github.event_name == 'workflow_dispatch' | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
MATCH_TYPE: appstore | ||
GYM_SCHEME: PIA VPN | ||
GYM_EXPORT_METHOD: app-store | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane create_beta_archive | ||
- uses: actions/upload-artifact@v2 | ||
if: success() | ||
with: | ||
name: "${{ github.job }}" | ||
retention-days: 7 | ||
path: "$STAGE_TESTFLIGHT_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*" | ||
manual_qa_archive: | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: github.event_name == 'workflow_dispatch' | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
MATCH_TYPE: adhoc | ||
GYM_SCHEME: PIA VPN dev | ||
GYM_EXPORT_METHOD: ad-hoc | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane create_archive | ||
- uses: actions/upload-artifact@v2 | ||
if: success() | ||
with: | ||
name: "${{ github.job }}" | ||
retention-days: 7 | ||
path: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*" | ||
qa_deploy: | ||
needs: | ||
- qa_archive | ||
- beta_manual_archive | ||
- manual_qa_archive | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads//^release.*$/') | ||
environment: | ||
name: hockey | ||
url: "$HOCKEY_URL" | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
IPA_OUTPUT_PATH: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa" | ||
FL_HOCKEY_IPA: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa" | ||
FL_HOCKEY_COMMIT_SHA: "${{ github.sha }}" | ||
FL_HOCKEY_BUILD_SERVER_URL: "${{ github.server_url }}/${{ github.repository }}/-/jobs/${{ github.job }}" | ||
FL_HOCKEY_REPOSITORY_URL: "${{ github.server_url }}/${{ github.repository }}" | ||
FL_HOCKEY_NOTIFY: 'false' | ||
FL_HOCKEY_STRATEGY: replace | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- uses: actions/download-artifact@v2 | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane qa_deploy | ||
- uses: actions/upload-artifact@v2 | ||
if: success() | ||
with: | ||
name: "${{ github.job }}" | ||
retention-days: 7 | ||
path: "$SERIALIZED_ARCHIVE_JSON" | ||
beta_manual_deploy: | ||
needs: | ||
- qa_archive | ||
- beta_manual_archive | ||
- manual_qa_archive | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: github.event_name == 'workflow_dispatch' | ||
environment: | ||
name: testflight | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
PILOT_IPA: "$STAGE_TESTFLIGHT_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa" | ||
PILOT_DISTRIBUTE_EXTERNAL: 'true' | ||
DEMO_ACCOUNT_REQUIRED: 'true' | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- uses: actions/download-artifact@v2 | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane beta_deploy | ||
manual_qa_deploy: | ||
needs: | ||
- qa_archive | ||
- beta_manual_archive | ||
- manual_qa_archive | ||
runs-on: | ||
- self-hosted | ||
- ios | ||
if: github.event_name == 'workflow_dispatch' | ||
environment: | ||
name: hockey | ||
url: "$HOCKEY_URL" | ||
timeout-minutes: 60 | ||
env: | ||
LC_ALL: en_US.UTF-8 | ||
LANG: en_US.UTF-8 | ||
STAGE_BUILD_PATH: build | ||
STAGE_ARTIFACTS_PATH: dist | ||
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist | ||
STAGE_ARCHIVE_NAME: pia-vpn | ||
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json" | ||
IPA_OUTPUT_PATH: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa" | ||
FL_HOCKEY_IPA: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa" | ||
FL_HOCKEY_COMMIT_SHA: "${{ github.sha }}" | ||
FL_HOCKEY_BUILD_SERVER_URL: "${{ github.server_url }}/${{ github.repository }}/-/jobs/${{ github.job }}" | ||
FL_HOCKEY_REPOSITORY_URL: "${{ github.server_url }}/${{ github.repository }}" | ||
FL_HOCKEY_NOTIFY: 'false' | ||
FL_HOCKEY_STRATEGY: replace | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 50 | ||
lfs: true | ||
- uses: actions/download-artifact@v2 | ||
- run: gem install bundler --no-ri --no-rdoc | ||
- run: bundle update | ||
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint" | ||
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers" | ||
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist" | ||
- run: bundle exec fastlane qa_deploy | ||
- uses: actions/upload-artifact@v2 | ||
if: success() | ||
with: | ||
name: "${{ github.job }}" | ||
retention-days: 7 | ||
path: "$SERIALIZED_ARCHIVE_JSON" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<key>expired</key> | ||
<dict/> | ||
<key>valid</key> | ||
<dict/> | ||
<key>invalid</key> | ||
<dict> | ||
<key>username</key> | ||
<string>random.username</string> | ||
<key>password</key> | ||
<string>passWord@533</string> | ||
</dict> | ||
</dict> | ||
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// | ||
// CredentialsUtil.swift | ||
// PIA VPN | ||
// | ||
// Created by Waleed Mahmood on 08.03.22. | ||
// Copyright © 2022 Private Internet Access Inc. All rights reserved. | ||
// | ||
|
||
import Foundation | ||
|
||
public enum CredentialsType: String { | ||
case valid = "valid" | ||
case expired = "expired" | ||
case invalid = "invalid" | ||
} | ||
|
||
public struct Credentials: Codable { | ||
let username: String | ||
let password: String | ||
|
||
init(from dictionary: Any) throws { | ||
let data = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted) | ||
let decoder = JSONDecoder() | ||
self = try decoder.decode(Self.self, from: data) | ||
} | ||
} | ||
|
||
public class CredentialsUtil { | ||
public static func credentials(type: CredentialsType) -> Credentials { | ||
let bundle = Bundle(for: CredentialsUtil.self) | ||
guard let filePath = bundle.path(forResource: "Credentials", ofType: "plist") else { | ||
fatalError("Couldn't find file 'Credentials.plist'") | ||
} | ||
|
||
let plist = NSDictionary(contentsOfFile: filePath) | ||
guard let dictionary = plist?.object(forKey: type.rawValue) as? [String: String] else { | ||
fatalError("Couldn't find key '\(type.rawValue)' in 'Credentials.plist'") | ||
} | ||
|
||
do { | ||
return try Credentials(from: dictionary) | ||
} | ||
catch { | ||
fatalError("Credential file does not contain required information") | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
// | ||
// PIALaunchTests.swift | ||
// PIA VPN UITests | ||
// | ||
// Created by Waleed Mahmood on 01.03.22. | ||
// Copyright © 2022 Private Internet Access Inc. All rights reserved. | ||
// | ||
|
||
import XCTest | ||
|
||
class PIALaunchTests: XCTestCase { | ||
|
||
override class var runsForEachTargetApplicationUIConfiguration: Bool { | ||
true | ||
} | ||
|
||
override func setUpWithError() throws { | ||
continueAfterFailure = false | ||
} | ||
|
||
func testLaunch() throws { | ||
let app = XCUIApplication() | ||
app.launch() | ||
|
||
// Insert steps here to perform after app launch but before taking a screenshot, | ||
// such as logging into a test account or navigating somewhere in the app | ||
|
||
let attachment = XCTAttachment(screenshot: app.screenshot()) | ||
attachment.name = "Launch Screen" | ||
attachment.lifetime = .keepAlways | ||
add(attachment) | ||
} | ||
} |
Oops, something went wrong.