| 107 | } |
| 108 | |
| 109 | func (e *CodexEngine) GetInstallationSteps(workflowData *WorkflowData) []GitHubActionStep { |
| 110 | codexEngineLog.Printf("Generating installation steps for Codex engine: workflow=%s", workflowData.Name) |
| 111 | |
| 112 | // Skip installation if custom command is specified |
| 113 | if workflowData.EngineConfig != nil && workflowData.EngineConfig.Command != "" { |
| 114 | codexEngineLog.Printf("Skipping installation steps: custom command specified (%s)", workflowData.EngineConfig.Command) |
| 115 | return []GitHubActionStep{} |
| 116 | } |
| 117 | |
| 118 | steps := BuildStandardNpmEngineInstallStepsNoCooldown( |
| 119 | "@openai/codex", |
| 120 | string(constants.DefaultCodexVersion), |
| 121 | "Install Codex CLI", |
| 122 | "codex", |
| 123 | workflowData, |
| 124 | ) |
| 125 | |
| 126 | // Add AWF installation step if firewall is enabled |
| 127 | if isFirewallEnabled(workflowData) { |
| 128 | firewallConfig := getFirewallConfig(workflowData) |
| 129 | agentConfig := getAgentConfig(workflowData) |
| 130 | var awfVersion string |
| 131 | if firewallConfig != nil { |
| 132 | awfVersion = firewallConfig.Version |
| 133 | } |
| 134 | |
| 135 | // Install AWF binary (or skip if custom command is specified) |
| 136 | awfInstall := generateAWFInstallationStep(awfVersion, agentConfig) |
| 137 | if len(awfInstall) > 0 { |
| 138 | steps = append(steps, awfInstall) |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | return steps |
| 143 | } |
| 144 | |
| 145 | // GetDeclaredOutputFiles returns the output files that Codex may produce. |
| 146 | // Use /tmp/gh-aw for Codex runtime logs because ${RUNNER_TEMP}/gh-aw is |