From 694ef50498fa821b9f7667d3ae8655987a5394c2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Panasiuk Date: Thu, 8 May 2025 15:20:05 +0200 Subject: [PATCH] #V2 - support custom GITHUB_REF and GITHUB_REF_NAME values --- action.yml | 30 +++++++++++++++-------- main.py | 4 ++- src/input_output/input.py | 8 ++++++ src/utils/github_environment_variables.py | 28 ++++++++++++++++++--- 4 files changed, 55 insertions(+), 15 deletions(-) diff --git a/action.yml b/action.yml index 1c08e74..0a825c5 100644 --- a/action.yml +++ b/action.yml @@ -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 @@ -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 }} diff --git a/main.py b/main.py index 45a8e29..e37868e 100644 --- a/main.py +++ b/main.py @@ -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) diff --git a/src/input_output/input.py b/src/input_output/input.py index 24a7ad6..6b980bb 100644 --- a/src/input_output/input.py +++ b/src/input_output/input.py @@ -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) diff --git a/src/utils/github_environment_variables.py b/src/utils/github_environment_variables.py index 096fc34..717447d 100644 --- a/src/utils/github_environment_variables.py +++ b/src/utils/github_environment_variables.py @@ -1,6 +1,8 @@ # 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 @@ -8,7 +10,9 @@ # 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 @@ -20,7 +24,9 @@ class GitHubContext: actor: str api_url: str + base_ref: str event_name: str + head_ref: str ref: str ref_name: str ref_type: str @@ -28,14 +34,18 @@ class GitHubContext: 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", @@ -43,7 +53,9 @@ def from_env() -> "GitHubContext": "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] @@ -53,15 +65,19 @@ 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]: @@ -69,7 +85,9 @@ def to_list(self) -> List[str]: 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}", @@ -77,7 +95,9 @@ def to_list(self) -> List[str]: 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: