fastlane-plugin-appcircle_publish 0.1.0 → 0.1.1.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c2a5d288b4c40f88a903783e30501cb42a56daa662807bc42a051351ca6109e5
|
|
4
|
+
data.tar.gz: a0a8aeae89201b0f75fbf52cd82017236a0344d59deabc29d823c2b3134d7b0c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 71cc90ffd9286737700edfc6b2391e2b2a2f123cbc55612d784a990a575b0f2d791542e8e2b8b62052c2f6cd84caae4502e23c4398bfd95506e49baf95a6163d
|
|
7
|
+
data.tar.gz: 32ddb720ab6ade16c11901bf25f4a7c59544f359224a322de6690015b86c055181f0d16bb403ff2e7a99421d9239e97cdbe818cc72897a47f61fbb969475c8e8
|
data/README.md
CHANGED
|
@@ -3,9 +3,17 @@
|
|
|
3
3
|
[](https://rubygems.org/gems/fastlane-plugin-appcircle_publish)
|
|
4
4
|
|
|
5
5
|
Upload an application binary to an Appcircle **Publish** profile and/or trigger
|
|
6
|
-
its publish flow (app store publishing) directly from your Fastlane
|
|
6
|
+
its publish flow (app store publishing) directly from your Fastlane lane.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Appcircle's **Publish to Stores** module gives you:
|
|
9
|
+
|
|
10
|
+
- **Centralized Store Publishing:** Manage App Store, Google Play, Huawei AppGallery, and Microsoft Intune releases from a single hub instead of navigating each platform separately.
|
|
11
|
+
- **Custom Publish Flows:** Automate your release cycle with repeatable publish flows and ready-to-use integrations tailored to your organization's needs.
|
|
12
|
+
- **Approval Gates:** Add manual approval steps to your publish flow to keep every release under control before it goes live.
|
|
13
|
+
- **Auto Re-sign:** Automatically apply updated signing credentials and versioning to uploaded binaries, keeping releases properly signed without a new build.
|
|
14
|
+
- **Audit and Reporting:** Track every publishing step with audit trails and publish reports for full transparency and compliance.
|
|
15
|
+
|
|
16
|
+
Learn more about [Appcircle Publish to Stores](https://appcircle.io/publish-to-stores?utm_source=fastlane&utm_medium=plugin&utm_campaign=publish).
|
|
9
17
|
|
|
10
18
|
## System Requirements
|
|
11
19
|
|
|
@@ -24,15 +32,15 @@ Note: Both **Appcircle Cloud** and **self-hosted** Appcircle installations are s
|
|
|
24
32
|
|
|
25
33
|
To generate a Personal API Token:
|
|
26
34
|
|
|
27
|
-
1.
|
|
28
|
-
2.
|
|
29
|
-
3. Press
|
|
35
|
+
1. Open the **My Organization** screen from your profile avatar at the bottom left.
|
|
36
|
+
2. Go to the **Security** section and find the **Personal Access Key** card.
|
|
37
|
+
3. Press **Generate Key** to generate your token.
|
|
30
38
|
|
|
31
|
-

|
|
32
40
|
|
|
33
41
|
## What the action does
|
|
34
42
|
|
|
35
|
-
The action has two independent switches
|
|
43
|
+
The action has two independent switches, `upload` and `publish`, both default
|
|
36
44
|
to `false`. **You must enable at least one.** Create the Publish profile in
|
|
37
45
|
Appcircle first; the action targets it by name (profile names are unique per
|
|
38
46
|
platform).
|
|
@@ -42,7 +50,7 @@ platform).
|
|
|
42
50
|
| `true` | `false` | Upload `appPath` as a new app version on the profile. |
|
|
43
51
|
| `false` | `true` | Trigger the publish flow for the profile's **current release candidate**. |
|
|
44
52
|
| `true` | `true` | Upload `appPath`, **mark the new version as release candidate**, then trigger the publish flow for it. |
|
|
45
|
-
| `false` | `false` | Error
|
|
53
|
+
| `false` | `false` | Error: nothing to do. |
|
|
46
54
|
|
|
47
55
|
**Rules:**
|
|
48
56
|
|
|
@@ -102,8 +110,8 @@ fastlane add_plugin appcircle_publish
|
|
|
102
110
|
end
|
|
103
111
|
```
|
|
104
112
|
|
|
105
|
-
- `personalAPIToken` / `personalAccessKey`: Provide exactly one to authenticate Appcircle services.
|
|
106
|
-
- `platform`: Target platform of the Publish profile
|
|
113
|
+
- `personalAPIToken` / `personalAccessKey`: Provide exactly one to authenticate with Appcircle services. Providing both, or neither, fails with a descriptive error.
|
|
114
|
+
- `platform`: Target platform of the Publish profile: `ios` or `android`.
|
|
107
115
|
- `publishProfile`: Name of the Publish profile to target.
|
|
108
116
|
- `upload` (default `false`): Upload `appPath` as a new app version.
|
|
109
117
|
- `publish` (default `false`): Trigger the profile's publish flow.
|
|
@@ -127,7 +135,7 @@ If you run a self-hosted Appcircle installation, point the action to your own en
|
|
|
127
135
|
)
|
|
128
136
|
```
|
|
129
137
|
|
|
130
|
-
> **Self-signed or private CA certificates:** If your self-hosted Appcircle server uses a self-signed certificate (or one issued by a private/internal CA), requests will fail certificate validation. The plugin does not disable TLS verification. Trust the server's CA on the machine running Fastlane
|
|
138
|
+
> **Self-signed or private CA certificates:** If your self-hosted Appcircle server uses a self-signed certificate (or one issued by a private/internal CA), requests will fail certificate validation. The plugin does not disable TLS verification. Trust the server's CA on the machine running Fastlane: add it to the system certificate store, or point the `SSL_CERT_FILE` environment variable at a PEM bundle that includes it.
|
|
131
139
|
|
|
132
140
|
### Leveraging Environment Variables
|
|
133
141
|
|
|
@@ -145,4 +153,4 @@ If you have trouble using plugins, check out the [Plugins Troubleshooting](https
|
|
|
145
153
|
|
|
146
154
|
### Reference
|
|
147
155
|
|
|
148
|
-
For more detailed instructions and support, visit the [Appcircle Publish documentation](https://docs.appcircle.io/publish-to-stores
|
|
156
|
+
For more detailed instructions and support, visit the [Appcircle Publish to Stores documentation](https://docs.appcircle.io/marketplace/fastlane/publish-to-stores).
|
|
@@ -71,11 +71,11 @@ module Fastlane
|
|
|
71
71
|
self.ac_login_with_pat(personalAPIToken)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
-
profileId =
|
|
74
|
+
profileId = PublishUploadService.get_publish_profile_id(auth_token: @@apiToken, platform: platform, profile_name: publishProfile, api_endpoint: @@apiEndpoint)
|
|
75
75
|
|
|
76
76
|
# Guard: never start a new publish if one is already running for the profile.
|
|
77
77
|
if publish
|
|
78
|
-
active =
|
|
78
|
+
active = PublishUploadService.get_active_publish_count_for_profile(auth_token: @@apiToken, publish_profile_id: profileId, api_endpoint: @@apiEndpoint)
|
|
79
79
|
if active > 0
|
|
80
80
|
UI.user_error!("A publish is already in progress for profile '#{publishProfile}'. Not starting a new one.")
|
|
81
81
|
end
|
|
@@ -85,23 +85,23 @@ module Fastlane
|
|
|
85
85
|
|
|
86
86
|
# --- Upload ---
|
|
87
87
|
if upload
|
|
88
|
-
response =
|
|
88
|
+
response = PublishUploadService.upload_artifact(token: @@apiToken, app: appPath, platform: platform, publish_profile_id: profileId, api_endpoint: @@apiEndpoint)
|
|
89
89
|
self.checkTaskStatus(response["taskId"])
|
|
90
|
-
appVersionId =
|
|
90
|
+
appVersionId = PublishUploadService.get_latest_app_version_id(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, api_endpoint: @@apiEndpoint)
|
|
91
91
|
UI.success("#{appPath} uploaded to the Appcircle Publish profile '#{publishProfile}' successfully")
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
# --- Publish ---
|
|
95
95
|
if publish
|
|
96
96
|
if upload && appVersionId
|
|
97
|
-
|
|
97
|
+
PublishUploadService.mark_release_candidate(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, app_version_id: appVersionId, api_endpoint: @@apiEndpoint)
|
|
98
98
|
UI.message("Marked the uploaded version as release candidate.")
|
|
99
99
|
else
|
|
100
|
-
appVersionId =
|
|
100
|
+
appVersionId = PublishUploadService.get_release_candidate_version_id(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, api_endpoint: @@apiEndpoint)
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
publishId =
|
|
104
|
-
|
|
103
|
+
publishId = PublishUploadService.get_publish_id(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, app_version_id: appVersionId, api_endpoint: @@apiEndpoint)
|
|
104
|
+
PublishUploadService.start_publish(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, publish_id: publishId, api_endpoint: @@apiEndpoint)
|
|
105
105
|
UI.success("Publish flow started for profile '#{publishProfile}'.")
|
|
106
106
|
success = self.poll_publish_status(platform, profileId, appVersionId)
|
|
107
107
|
UI.user_error!("Publish flow failed.") unless success
|
|
@@ -153,7 +153,7 @@ module Fastlane
|
|
|
153
153
|
def self.poll_publish_status(platform, profileId, appVersionId, interval: 5, max_attempts: 240)
|
|
154
154
|
step_state = {}
|
|
155
155
|
max_attempts.times do
|
|
156
|
-
data =
|
|
156
|
+
data = PublishUploadService.get_publish_object(auth_token: @@apiToken, platform: platform, publish_profile_id: profileId, app_version_id: appVersionId, api_endpoint: @@apiEndpoint)
|
|
157
157
|
(data['steps'] || []).each do |step|
|
|
158
158
|
id = step['id'] || step['name']
|
|
159
159
|
next if id.nil?
|
|
@@ -3,9 +3,9 @@ require 'uri'
|
|
|
3
3
|
require 'json'
|
|
4
4
|
require 'rest-client'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
module PublishUploadService
|
|
7
|
+
BASE_URL = "https://api.appcircle.io"
|
|
7
8
|
|
|
8
|
-
module UploadService
|
|
9
9
|
def self.put_with_retry(url, body, headers, max_retries: 5)
|
|
10
10
|
attempt = 0
|
|
11
11
|
delay = 1.0
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane-plugin-appcircle_publish
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1.beta.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- appcircleio
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-07-
|
|
11
|
+
date: 2026-07-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rest-client
|
|
@@ -54,12 +54,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
54
54
|
version: '2.6'
|
|
55
55
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- - "
|
|
57
|
+
- - ">"
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version:
|
|
59
|
+
version: 1.3.1
|
|
60
60
|
requirements: []
|
|
61
61
|
rubygems_version: 3.3.27
|
|
62
62
|
signing_key:
|
|
63
63
|
specification_version: 4
|
|
64
|
-
summary: Upload an application binary to an Appcircle Publish profile
|
|
64
|
+
summary: Upload an application binary to an Appcircle Publish profile and/or trigger
|
|
65
|
+
its publish flow (app store publishing).
|
|
65
66
|
test_files: []
|