Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 20 additions & 10 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ inputs:
}
}
required: true
github_custom_ref:
description: Custom Git ref (e.g. refs/heads/branch-name) used to override GITHUB_REF for dynamic checkouts.
required: false
default: ""
github_custom_ref_name:
description: Custom branch name (e.g. branch-name) used to override GITHUB_REF_NAME in matrix jobs or custom workflows.
required: false
default: ""
github_token_repo_full_access:
description: GitHub token with full access permissions to repositories (used by installer script and RMK).
required: true
Expand Down Expand Up @@ -213,20 +221,22 @@ runs:
run: python ${{ github.action_path }}/main.py
shell: bash
env:
INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS: ${{ inputs.github_token_repo_full_access }}
INPUT_ALLOWED_ENVIRONMENTS: ${{ inputs.allowed_environments }}
INPUT_CLUSTER_PROVIDER_CREDENTIALS: ${{ inputs.cluster_provider_credentials }}
INPUT_GITHUB_CUSTOM_REF: ${{ inputs.github_custom_ref }}
INPUT_GITHUB_CUSTOM_REF_NAME: ${{ inputs.github_custom_ref_name }}
INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS: ${{ inputs.github_token_repo_full_access }}
INPUT_RMK_CLUSTER_PROVIDER: ${{ inputs.rmk_cluster_provider }}
INPUT_RMK_VERSION: ${{ inputs.rmk_version }}
INPUT_RMK_COMMAND: ${{ inputs.rmk_command }}
INPUT_RMK_DOWNLOAD_URL: ${{ inputs.rmk_download_url }}
INPUT_RMK_SLACK_NOTIFICATIONS: ${{ inputs.rmk_slack_notifications }}
INPUT_RMK_SLACK_WEBHOOK: ${{ inputs.rmk_slack_webhook }}
INPUT_RMK_PROJECT_DEPENDENCY_NAME: ${{ inputs.rmk_project_dependency_name }}
INPUT_RMK_PROJECT_DEPENDENCY_VERSION: ${{ inputs.rmk_project_dependency_version }}
INPUT_RMK_RELEASE_REPOSITORY_FULL_NAME: ${{ inputs.rmk_release_repository_full_name }}
INPUT_RMK_RELEASE_VERSION: ${{ inputs.rmk_release_version }}
INPUT_RMK_SLACK_CHANNEL: ${{ inputs.rmk_slack_channel }}
INPUT_RMK_SLACK_MESSAGE_DETAILS: ${{ inputs.rmk_slack_message_details }}
INPUT_RMK_COMMAND: ${{ inputs.rmk_command }}
INPUT_RMK_UPDATE_SKIP_DEPLOY: ${{ inputs.rmk_update_skip_deploy }}
INPUT_RMK_SLACK_NOTIFICATIONS: ${{ inputs.rmk_slack_notifications }}
INPUT_RMK_SLACK_WEBHOOK: ${{ inputs.rmk_slack_webhook }}
INPUT_RMK_SYNC_LABELS: ${{ inputs.rmk_sync_labels }}
INPUT_RMK_RELEASE_REPOSITORY_FULL_NAME: ${{ inputs.rmk_release_repository_full_name }}
INPUT_RMK_RELEASE_VERSION: ${{ inputs.rmk_release_version }}
INPUT_RMK_PROJECT_DEPENDENCY_NAME: ${{ inputs.rmk_project_dependency_name }}
INPUT_RMK_PROJECT_DEPENDENCY_VERSION: ${{ inputs.rmk_project_dependency_version }}
INPUT_RMK_UPDATE_SKIP_DEPLOY: ${{ inputs.rmk_update_skip_deploy }}
INPUT_RMK_VERSION: ${{ inputs.rmk_version }}
4 changes: 3 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
args = ArgumentParser().parse_args()

"""Retrieve GitHub Action environment variables"""
github_context = GitHubContext.from_env()
github_context = GitHubContext.from_env(
github_custom_ref=args.github_custom_ref,
github_custom_ref_name=args.github_custom_ref_name)

"""Determine the project environment based on the repository branch"""
environment = ExtendedEnvironmentSelector().select_environment(github_context)
Expand Down
8 changes: 8 additions & 0 deletions src/input_output/input.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ def setup_arguments(self):
action=self.EnvDefault, envvar="INPUT_CLUSTER_PROVIDER_CREDENTIALS",
type=str, required=False)

self.parser.add_argument("--github-custom-ref",
action=self.EnvDefault, envvar="INPUT_GITHUB_CUSTOM_REF",
type=str, required=False)

self.parser.add_argument("--github-custom-ref-name",
action=self.EnvDefault, envvar="INPUT_GITHUB_CUSTOM_REF_NAME",
type=str, required=False)

self.parser.add_argument("--github-token",
action=self.EnvDefault, envvar="INPUT_GITHUB_TOKEN_REPO_FULL_ACCESS",
type=str, required=False)
Expand Down
28 changes: 24 additions & 4 deletions src/utils/github_environment_variables.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
# GITHUB_ACTOR=user
# GITHUB_API_URL=https://api.github.com/
# GITHUB_BASE_REF=feature/FFS-2-test
# GITHUB_EVENT_NAME=workflow_dispatch
# GITHUB_HEAD_REF=feature/FFS-3-test
# GITHUB_REF=refs/heads/feature-branch-1
# GITHUB_REF_NAME=feature/FFS-123-test
# GITHUB_REF_TYPE=branch
# GITHUB_REPOSITORY=octocat/Hello-World
# GITHUB_REPOSITORY_OWNER=octocat
# GITHUB_RUN_ATTEMPT=1
# GITHUB_RUN_ID=1658821493
# GITHUB_RUN_NUMBER=1
# GITHUB_SERVER_URL=https://github.com
# GITHUB_SHA=ffac537e6cbbf934b08745a378932722df287a53

import os

Expand All @@ -20,30 +24,38 @@
class GitHubContext:
actor: str
api_url: str
base_ref: str
event_name: str
head_ref: str
ref: str
ref_name: str
ref_type: str
repository: str
repository_owner: str
run_attempt: str
run_id: str
run_number: str
server_url: str
sha: str

@staticmethod
def from_env() -> "GitHubContext":
def from_env(github_custom_ref="", github_custom_ref_name="") -> "GitHubContext":
required_env_vars = [
"GITHUB_ACTOR",
"GITHUB_API_URL",
"GITHUB_BASE_REF",
"GITHUB_EVENT_NAME",
"GITHUB_HEAD_REF",
"GITHUB_REF",
"GITHUB_REF_NAME",
"GITHUB_REF_TYPE",
"GITHUB_REPOSITORY",
"GITHUB_REPOSITORY_OWNER",
"GITHUB_RUN_ATTEMPT",
"GITHUB_RUN_ID",
"GITHUB_RUN_NUMBER",
"GITHUB_SERVER_URL",
"GITHUB_SHA",
]

missing_vars = [var for var in required_env_vars if os.getenv(var) is None]
Expand All @@ -53,31 +65,39 @@ def from_env() -> "GitHubContext":
return GitHubContext(
actor=os.getenv("GITHUB_ACTOR"),
api_url=os.getenv("GITHUB_API_URL"),
event_name=os.getenv("GITHUB_EVENT_NAME"),
ref=os.getenv("GITHUB_REF"),
ref_name=os.getenv("GITHUB_REF_NAME"),
base_ref=os.getenv("GITHUB_EVENT_NAME"),
event_name=os.getenv("GITHUB_BASE_REF"),
head_ref=os.getenv("GITHUB_HEAD_REF"),
ref=github_custom_ref if github_custom_ref else os.getenv("GITHUB_REF"),
ref_name=github_custom_ref_name if github_custom_ref_name else os.getenv("GITHUB_REF_NAME"),
ref_type=os.getenv("GITHUB_REF_TYPE"),
repository=os.getenv("GITHUB_REPOSITORY"),
repository_owner=os.getenv("GITHUB_REPOSITORY_OWNER"),
run_attempt=os.getenv("GITHUB_RUN_ATTEMPT"),
run_id=os.getenv("GITHUB_RUN_ID"),
run_number=os.getenv("GITHUB_RUN_NUMBER"),
server_url=os.getenv("GITHUB_SERVER_URL"),
sha=os.getenv("GITHUB_SHA"),
)

def to_list(self) -> List[str]:
"""Return context attributes as a list."""
return [
f"actor: {self.actor}",
f"api_url: {self.api_url}",
f"base_ref: {self.base_ref}",
f"event_name: {self.event_name}",
f"head_ref: {self.head_ref}",
f"ref: {self.ref}",
f"ref_name: {self.ref_name}",
f"ref_type: {self.ref_type}",
f"repository: {self.repository}",
f"repository_owner: {self.repository_owner}",
f"run_attempt: {self.run_attempt}",
f"run_id: {self.run_id}",
f"run_number: {self.run_number}",
f"server_url: {self.server_url}",
f"sha: {self.sha}",
]

def to_string(self) -> str:
Expand Down