Skip to content

Commit 694ef50

Browse files
committed
#V2 - support custom GITHUB_REF and GITHUB_REF_NAME values
1 parent f3085d6 commit 694ef50

File tree

4 files changed

+55
-15
lines changed

4 files changed

+55
-15
lines changed

action.yml

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ inputs:
110110
}
111111
}
112112
required: true
113+
github_custom_ref:
114+
description: Custom Git ref (e.g. refs/heads/branch-name) used to override GITHUB_REF for dynamic checkouts.
115+
required: false
116+
default: ""
117+
github_custom_ref_name:
118+
description: Custom branch name (e.g. branch-name) used to override GITHUB_REF_NAME in matrix jobs or custom workflows.
119+
required: false
120+
default: ""
113121
github_token_repo_full_access:
114122
description: GitHub token with full access permissions to repositories (used by installer script and RMK).
115123
required: true
@@ -213,20 +221,22 @@ runs:
213221
run: python ${{ github.action_path }}/main.py
214222
shell: bash
215223
env:
216-
INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS: ${{ inputs.github_token_repo_full_access }}
217224
INPUT_ALLOWED_ENVIRONMENTS: ${{ inputs.allowed_environments }}
218225
INPUT_CLUSTER_PROVIDER_CREDENTIALS: ${{ inputs.cluster_provider_credentials }}
226+
INPUT_GITHUB_CUSTOM_REF: ${{ inputs.github_custom_ref }}
227+
INPUT_GITHUB_CUSTOM_REF_NAME: ${{ inputs.github_custom_ref_name }}
228+
INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS: ${{ inputs.github_token_repo_full_access }}
219229
INPUT_RMK_CLUSTER_PROVIDER: ${{ inputs.rmk_cluster_provider }}
220-
INPUT_RMK_VERSION: ${{ inputs.rmk_version }}
230+
INPUT_RMK_COMMAND: ${{ inputs.rmk_command }}
221231
INPUT_RMK_DOWNLOAD_URL: ${{ inputs.rmk_download_url }}
222-
INPUT_RMK_SLACK_NOTIFICATIONS: ${{ inputs.rmk_slack_notifications }}
223-
INPUT_RMK_SLACK_WEBHOOK: ${{ inputs.rmk_slack_webhook }}
232+
INPUT_RMK_PROJECT_DEPENDENCY_NAME: ${{ inputs.rmk_project_dependency_name }}
233+
INPUT_RMK_PROJECT_DEPENDENCY_VERSION: ${{ inputs.rmk_project_dependency_version }}
234+
INPUT_RMK_RELEASE_REPOSITORY_FULL_NAME: ${{ inputs.rmk_release_repository_full_name }}
235+
INPUT_RMK_RELEASE_VERSION: ${{ inputs.rmk_release_version }}
224236
INPUT_RMK_SLACK_CHANNEL: ${{ inputs.rmk_slack_channel }}
225237
INPUT_RMK_SLACK_MESSAGE_DETAILS: ${{ inputs.rmk_slack_message_details }}
226-
INPUT_RMK_COMMAND: ${{ inputs.rmk_command }}
227-
INPUT_RMK_UPDATE_SKIP_DEPLOY: ${{ inputs.rmk_update_skip_deploy }}
238+
INPUT_RMK_SLACK_NOTIFICATIONS: ${{ inputs.rmk_slack_notifications }}
239+
INPUT_RMK_SLACK_WEBHOOK: ${{ inputs.rmk_slack_webhook }}
228240
INPUT_RMK_SYNC_LABELS: ${{ inputs.rmk_sync_labels }}
229-
INPUT_RMK_RELEASE_REPOSITORY_FULL_NAME: ${{ inputs.rmk_release_repository_full_name }}
230-
INPUT_RMK_RELEASE_VERSION: ${{ inputs.rmk_release_version }}
231-
INPUT_RMK_PROJECT_DEPENDENCY_NAME: ${{ inputs.rmk_project_dependency_name }}
232-
INPUT_RMK_PROJECT_DEPENDENCY_VERSION: ${{ inputs.rmk_project_dependency_version }}
241+
INPUT_RMK_UPDATE_SKIP_DEPLOY: ${{ inputs.rmk_update_skip_deploy }}
242+
INPUT_RMK_VERSION: ${{ inputs.rmk_version }}

main.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
args = ArgumentParser().parse_args()
1818

1919
"""Retrieve GitHub Action environment variables"""
20-
github_context = GitHubContext.from_env()
20+
github_context = GitHubContext.from_env(
21+
github_custom_ref=args.github_custom_ref,
22+
github_custom_ref_name=args.github_custom_ref_name)
2123

2224
"""Determine the project environment based on the repository branch"""
2325
environment = ExtendedEnvironmentSelector().select_environment(github_context)

src/input_output/input.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ def setup_arguments(self):
2828
action=self.EnvDefault, envvar="INPUT_CLUSTER_PROVIDER_CREDENTIALS",
2929
type=str, required=False)
3030

31+
self.parser.add_argument("--github-custom-ref",
32+
action=self.EnvDefault, envvar="INPUT_GITHUB_CUSTOM_REF",
33+
type=str, required=False)
34+
35+
self.parser.add_argument("--github-custom-ref-name",
36+
action=self.EnvDefault, envvar="INPUT_GITHUB_CUSTOM_REF_NAME",
37+
type=str, required=False)
38+
3139
self.parser.add_argument("--github-token",
3240
action=self.EnvDefault, envvar="INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS",
3341
type=str, required=False)

src/utils/github_environment_variables.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# GITHUB_ACTOR=user
22
# GITHUB_API_URL=https://api.github.com/
3+
# GITHUB_BASE_REF=feature/FFS-2-test
34
# GITHUB_EVENT_NAME=workflow_dispatch
5+
# GITHUB_HEAD_REF=feature/FFS-3-test
46
# GITHUB_REF=refs/heads/feature-branch-1
57
# GITHUB_REF_NAME=feature/FFS-123-test
68
# GITHUB_REF_TYPE=branch
79
# GITHUB_REPOSITORY=octocat/Hello-World
810
# GITHUB_REPOSITORY_OWNER=octocat
911
# GITHUB_RUN_ATTEMPT=1
1012
# GITHUB_RUN_ID=1658821493
13+
# GITHUB_RUN_NUMBER=1
1114
# GITHUB_SERVER_URL=https://github.com
15+
# GITHUB_SHA=ffac537e6cbbf934b08745a378932722df287a53
1216

1317
import os
1418

@@ -20,30 +24,38 @@
2024
class GitHubContext:
2125
actor: str
2226
api_url: str
27+
base_ref: str
2328
event_name: str
29+
head_ref: str
2430
ref: str
2531
ref_name: str
2632
ref_type: str
2733
repository: str
2834
repository_owner: str
2935
run_attempt: str
3036
run_id: str
37+
run_number: str
3138
server_url: str
39+
sha: str
3240

3341
@staticmethod
34-
def from_env() -> "GitHubContext":
42+
def from_env(github_custom_ref="", github_custom_ref_name="") -> "GitHubContext":
3543
required_env_vars = [
3644
"GITHUB_ACTOR",
3745
"GITHUB_API_URL",
46+
"GITHUB_BASE_REF",
3847
"GITHUB_EVENT_NAME",
48+
"GITHUB_HEAD_REF",
3949
"GITHUB_REF",
4050
"GITHUB_REF_NAME",
4151
"GITHUB_REF_TYPE",
4252
"GITHUB_REPOSITORY",
4353
"GITHUB_REPOSITORY_OWNER",
4454
"GITHUB_RUN_ATTEMPT",
4555
"GITHUB_RUN_ID",
56+
"GITHUB_RUN_NUMBER",
4657
"GITHUB_SERVER_URL",
58+
"GITHUB_SHA",
4759
]
4860

4961
missing_vars = [var for var in required_env_vars if os.getenv(var) is None]
@@ -53,31 +65,39 @@ def from_env() -> "GitHubContext":
5365
return GitHubContext(
5466
actor=os.getenv("GITHUB_ACTOR"),
5567
api_url=os.getenv("GITHUB_API_URL"),
56-
event_name=os.getenv("GITHUB_EVENT_NAME"),
57-
ref=os.getenv("GITHUB_REF"),
58-
ref_name=os.getenv("GITHUB_REF_NAME"),
68+
base_ref=os.getenv("GITHUB_EVENT_NAME"),
69+
event_name=os.getenv("GITHUB_BASE_REF"),
70+
head_ref=os.getenv("GITHUB_HEAD_REF"),
71+
ref=github_custom_ref if github_custom_ref else os.getenv("GITHUB_REF"),
72+
ref_name=github_custom_ref_name if github_custom_ref_name else os.getenv("GITHUB_REF_NAME"),
5973
ref_type=os.getenv("GITHUB_REF_TYPE"),
6074
repository=os.getenv("GITHUB_REPOSITORY"),
6175
repository_owner=os.getenv("GITHUB_REPOSITORY_OWNER"),
6276
run_attempt=os.getenv("GITHUB_RUN_ATTEMPT"),
6377
run_id=os.getenv("GITHUB_RUN_ID"),
78+
run_number=os.getenv("GITHUB_RUN_NUMBER"),
6479
server_url=os.getenv("GITHUB_SERVER_URL"),
80+
sha=os.getenv("GITHUB_SHA"),
6581
)
6682

6783
def to_list(self) -> List[str]:
6884
"""Return context attributes as a list."""
6985
return [
7086
f"actor: {self.actor}",
7187
f"api_url: {self.api_url}",
88+
f"base_ref: {self.base_ref}",
7289
f"event_name: {self.event_name}",
90+
f"head_ref: {self.head_ref}",
7391
f"ref: {self.ref}",
7492
f"ref_name: {self.ref_name}",
7593
f"ref_type: {self.ref_type}",
7694
f"repository: {self.repository}",
7795
f"repository_owner: {self.repository_owner}",
7896
f"run_attempt: {self.run_attempt}",
7997
f"run_id: {self.run_id}",
98+
f"run_number: {self.run_number}",
8099
f"server_url: {self.server_url}",
100+
f"sha: {self.sha}",
81101
]
82102

83103
def to_string(self) -> str:

0 commit comments

Comments
 (0)