Compare commits

..

2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
23ea13be96 Complete documentation and tests for action execution model
Co-authored-by: salmanmkc <32169182+salmanmkc@users.noreply.github.com>
2025-08-14 09:26:12 +00:00
copilot-swe-agent[bot]
e4511c02ad Initial plan 2025-08-14 09:09:22 +00:00
11 changed files with 532 additions and 530 deletions

View File

@@ -8,37 +8,42 @@
The runner is the application that runs a job from a GitHub Actions workflow. It is used by GitHub Actions in the [hosted virtual environments](https://github.com/actions/virtual-environments), or you can [self-host the runner](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-self-hosted-runners) in your own environment.
## Understanding How Actions Work
**New to GitHub Actions development?** The runner (this repository) is compiled C# code that executes actions. Actions themselves typically do NOT require compilation:
- **JavaScript Actions** run source `.js` files directly
- **Container Actions** use Docker images (pre-built or built from Dockerfile)
- **Composite Actions** are YAML step definitions
📖 See [docs/action-execution-model.md](docs/action-execution-model.md) for detailed information and [examples](docs/examples/action-execution-examples.md).
## Get Started
For more information about installing and using self-hosted runners, see [Adding self-hosted runners](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/adding-self-hosted-runners) and [Using self-hosted runners in a workflow](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-self-hosted-runners-in-a-workflow)
## Download and Install
Runner releases:
![win](docs/res/win_sm.png) **Windows**: [Prerequisites](docs/start/envwin.md) | [Download](https://github.com/actions/runner/releases)
![win](docs/res/win_sm.png) [Pre-reqs](docs/start/envwin.md) | [Download](https://github.com/actions/runner/releases)
![macOS](docs/res/apple_sm.png) **macOS**: [Prerequisites](docs/start/envosx.md) | [Download](https://github.com/actions/runner/releases)
![macOS](docs/res/apple_sm.png) [Pre-reqs](docs/start/envosx.md) | [Download](https://github.com/actions/runner/releases)
![linux](docs/res/linux_sm.png) **Linux**: [Prerequisites](docs/start/envlinux.md) | [Download](https://github.com/actions/runner/releases)
![linux](docs/res/linux_sm.png) [Pre-reqs](docs/start/envlinux.md) | [Download](https://github.com/actions/runner/releases)
## Documentation and Resources
### Note
- 📚 **[Complete Documentation Index](docs/README.md)** - Comprehensive guide to all documentation
- 📖 **[Contributing Guide](docs/contribute.md)** - Development setup, building, and testing
- 🔧 **[Automation Scripts](docs/automate.md)** - Automate runner setup and configuration
- 🛠️ **[Troubleshooting Guides](docs/checks/README.md)** - Common issues and solutions
- 🏗️ **[Architecture Decision Records](docs/adrs/README.md)** - Important architectural decisions
- ⚙️ **Platform Prerequisites:** [Linux](docs/start/envlinux.md) | [Windows](docs/start/envwin.md) | [macOS](docs/start/envosx.md)
Thank you for your interest in this GitHub repo, however, right now we are not taking contributions.
## Support and Community
We continue to focus our resources on strategic areas that help our customers be successful while making developers' lives easier. While GitHub Actions remains a key part of this vision, we are allocating resources towards other areas of Actions and are not taking contributions to this repository at this time. The GitHub public roadmap is the best place to follow along for any updates on features were working on and what stage theyre in.
Thank you for your interest in this repository. Please note our current contribution and support guidelines:
We are taking the following steps to better direct requests related to GitHub Actions, including:
**Bug Reports:** You are welcome to report bugs in this repository through Issues.
1. We will be directing questions and support requests to our [Community Discussions area](https://github.com/orgs/community/discussions/categories/actions)
**Feature Requests:** Please submit feature and enhancement requests on the [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions) page.
2. High Priority bugs can be reported through Community Discussions or you can report these to our support team https://support.github.com/contact/bug-report.
**Support Questions:** For help and support, please use our [Community Discussions area](https://github.com/orgs/community/discussions/categories/actions).
3. Security Issues should be handled as per our [security.md](security.md)
**Security Issues:** Please report security vulnerabilities following our [security policy](security.md).
We will still provide security updates for this project and fix major breaking changes during this time.
**High Priority Issues:** Critical bugs can be reported through Community Discussions or our [support team](https://support.github.com/contact/bug-report).
You are welcome to still raise bugs in this repo.

View File

@@ -1,61 +0,0 @@
# GitHub Actions Runner Documentation
Welcome to the GitHub Actions Runner documentation. This guide will help you get started with self-hosted runners, contribute to the project, and troubleshoot common issues.
## 🚀 Getting Started
### Installation and Setup
- **[Linux Prerequisites](start/envlinux.md)** - Complete setup guide for Linux systems
- **[Windows Prerequisites](start/envwin.md)** - Complete setup guide for Windows systems
- **[macOS Prerequisites](start/envosx.md)** - Complete setup guide for macOS systems
### Quick Start
1. Download the [latest runner release](https://github.com/actions/runner/releases)
2. Follow the platform-specific prerequisites guide above
3. Configure your runner with `./config.sh` (Linux/macOS) or `.\config.cmd` (Windows)
4. Start the runner with `./run.sh` (Linux/macOS) or `.\run.cmd` (Windows)
## 🔧 Administration and Automation
- **[Automation Scripts](automate.md)** - Automate runner deployment and management
- **[Troubleshooting Guides](checks/)** - Common issues and solutions
## 🏗️ Development and Contributing
- **[Contributing Guide](contribute.md)** - Development setup, building, and testing
- **[Architecture Decision Records](adrs/README.md)** - Important architectural decisions and design patterns
## 📋 Reference Materials
### System Checks and Troubleshooting
- **[Network Connectivity](checks/network.md)** - Troubleshoot network issues
- **[Git Configuration](checks/git.md)** - Git-related problems
- **[Actions Troubleshooting](checks/actions.md)** - Action-specific issues
- **[SSL Certificate Issues](checks/sslcert.md)** - Certificate and TLS problems
- **[Node.js Issues](checks/nodejs.md)** - Node.js runtime problems
- **[Internet Connectivity](checks/internet.md)** - General connectivity issues
### Development Resources
- **[Visual Studio Code Setup](contribute/vscode.md)** - IDE configuration for development
- **[Design Documentation](design/)** - Technical design documents
## 🆘 Getting Help
### Community Support
- **[GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)** - Ask questions and get help from the community
- **[GitHub Support](https://support.github.com/contact/bug-report)** - Report critical bugs or get professional support
### Reporting Issues
- **Bug Reports**: Open an issue in this repository
- **Feature Requests**: Use [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions-and-packages)
- **Security Issues**: Follow our [security policy](../security.md)
## 📖 Additional Resources
- **[GitHub Actions Documentation](https://docs.github.com/en/actions)** - Official GitHub Actions documentation
- **[Self-hosted Runners Guide](https://docs.github.com/en/actions/hosting-your-own-runners)** - GitHub's official self-hosted runner documentation
- **[Runner Releases](https://github.com/actions/runner/releases)** - Download the latest runner versions
---
> **Note**: This documentation is maintained by the GitHub Actions team and the community. If you find any issues or have suggestions for improvement, please open an issue or contribute a pull request.

View File

@@ -0,0 +1,144 @@
# GitHub Actions Execution Model
## Question: Do Actions Need to be Compiled?
**Short Answer**: No, GitHub Actions themselves do **NOT** need to be compiled from source code. They run directly as interpreted code, container images, or step definitions.
## How Different Action Types Are Executed
### 1. JavaScript Actions (`using: node12/16/20/24`)
JavaScript actions execute source code directly without compilation:
```yaml
# action.yml
runs:
using: 'node20'
main: 'index.js'
```
**Execution Process**:
1. Runner downloads the action repository
2. Locates the `main` JavaScript file (e.g., `index.js`)
3. Executes it directly using Node.js runtime: `node index.js`
4. No compilation or build step required
**Code Reference**: `src/Runner.Worker/Handlers/NodeScriptActionHandler.cs`
- Resolves the target script file
- Executes using Node.js: `StepHost.ExecuteAsync()` with node executable
### 2. Container Actions (`using: docker`)
Container actions run pre-built images or build from Dockerfile:
```yaml
# action.yml - Pre-built image
runs:
using: 'docker'
image: 'docker://alpine:3.10'
```
```yaml
# action.yml - Build from Dockerfile
runs:
using: 'docker'
image: 'Dockerfile'
```
**Execution Process**:
1. If using pre-built image: Pull and run the container
2. If using Dockerfile: Build the container image, then run it
3. No compilation of action source code - Docker handles image building
**Code Reference**: `src/Runner.Worker/Handlers/ContainerActionHandler.cs`
- Handles both pre-built images and Dockerfile builds
- Uses Docker commands to run containers
### 3. Composite Actions (`using: composite`)
Composite actions are collections of steps defined in YAML:
```yaml
# action.yml
runs:
using: 'composite'
steps:
- run: echo "Hello"
shell: bash
- uses: actions/checkout@v3
```
**Execution Process**:
1. Parse the YAML step definitions
2. Execute each step in sequence
3. No compilation - just step orchestration
**Code Reference**: `src/Runner.Worker/Handlers/CompositeActionHandler.cs`
- Iterates through defined steps
- Executes each step using appropriate handlers
## What Does Get Compiled?
### The GitHub Actions Runner (This Repository)
The runner itself is compiled from C# source code:
```bash
cd src
./dev.sh build # Compiles the runner binaries
```
**What gets compiled**:
- `Runner.Listener` - Registers with GitHub and receives jobs
- `Runner.Worker` - Executes individual jobs and steps
- `Runner.PluginHost` - Handles plugin execution
- Supporting libraries
**Build Output**: Compiled binaries in `_layout/bin/`
## Key Distinctions
| Component | Compilation Required | Execution Method |
|-----------|---------------------|------------------|
| **Runner** (this repo) | ✅ Yes - C# → binaries | Compiled executable |
| **JavaScript Actions** | ❌ No | Direct interpretation |
| **Container Actions** | ❌ No* | Container runtime |
| **Composite Actions** | ❌ No | YAML interpretation |
*Container actions may involve building Docker images, but not compiling action source code.
## Implementation Details
### Action Loading Process
1. **Action Discovery** (`ActionManager.LoadAction()`)
- Parses `action.yml` manifest
- Determines action type from `using` field
- Creates appropriate execution data object
2. **Handler Selection** (`HandlerFactory.Create()`)
- Routes to appropriate handler based on action type
- `NodeScriptActionHandler` for JavaScript
- `ContainerActionHandler` for Docker
- `CompositeActionHandler` for composite
3. **Execution** (Handler-specific `RunAsync()`)
- Each handler implements execution logic
- No compilation step - direct execution
### Source Code References
- **Action Type Detection**: `src/Runner.Worker/ActionManifestManager.cs:428-495`
- **Handler Factory**: `src/Runner.Worker/Handlers/HandlerFactory.cs`
- **JavaScript Execution**: `src/Runner.Worker/Handlers/NodeScriptActionHandler.cs:143-153`
- **Container Execution**: `src/Runner.Worker/Handlers/ContainerActionHandler.cs:247-261`
## Conclusion
GitHub Actions are designed for **runtime interpretation**, not compilation:
- **JavaScript actions** run source `.js` files directly
- **Container actions** use existing images or build from Dockerfile
- **Composite actions** are YAML step definitions
The only compilation involved is building the **runner infrastructure** (this repository) that interprets and executes the actions.

View File

@@ -76,76 +76,3 @@ Repo level one-liner. NOTE: replace with yourorg/yourrepo (repo level) or just
```bash
curl -s https://raw.githubusercontent.com/actions/runner/main/scripts/delete.sh | bash -s yourorg/yourrepo runnername
```
## Troubleshooting
### Common Issues
#### Permission Denied
```bash
# Ensure scripts have execute permissions
chmod +x ./config.sh ./run.sh
```
#### PAT Token Issues
```bash
# Verify your PAT has the correct scopes:
# - repo (for repository-level runners)
# - admin:org (for organization-level runners)
export RUNNER_CFG_PAT=your_token_here
echo $RUNNER_CFG_PAT # Verify it's set
```
#### Network Connectivity
```bash
# Test GitHub connectivity
curl -H "Authorization: token $RUNNER_CFG_PAT" https://api.github.com/user
# For GitHub Enterprise Server
curl -H "Authorization: token $RUNNER_CFG_PAT" https://your-github-enterprise/api/v3/user
```
#### Service Installation Fails
```bash
# Check if running as appropriate user
whoami
# For Linux - ensure systemd is available
systemctl --version
# For macOS - ensure launchd is available
launchctl version
```
#### Runner Registration Fails
```bash
# Check if runner already exists
curl -H "Authorization: token $RUNNER_CFG_PAT" \
"https://api.github.com/repos/OWNER/REPO/actions/runners"
# Remove existing runner if needed
./config.sh remove --token $RUNNER_CFG_PAT
```
### Getting Help
- **Configuration Issues**: Check the [Prerequisites](start/envlinux.md) for your platform
- **Network Problems**: Review [network troubleshooting guide](checks/network.md)
- **General Support**: Visit [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)
### Advanced Examples
#### Organization-level Runner with Custom Labels
```bash
export RUNNER_CFG_PAT=your_org_pat
curl -s https://raw.githubusercontent.com/actions/runner/main/scripts/create-latest-svc.sh | \
bash -s -- -s myorg -n prod-runner-1 -l production,linux,docker
```
#### Repository-level Runner for GitHub Enterprise
```bash
export RUNNER_CFG_PAT=your_ghe_pat
curl -s https://raw.githubusercontent.com/actions/runner/main/scripts/create-latest-svc.sh | \
bash -s -- -s myorg/myrepo -g github.company.com -n build-server -u builder
```
```

View File

@@ -1,66 +0,0 @@
# Troubleshooting Guides
This directory contains troubleshooting guides for common issues you might encounter when setting up or running GitHub Actions self-hosted runners.
## Quick Reference
| Issue Type | Guide | Description |
|------------|-------|-------------|
| 🌐 **Network** | [network.md](network.md) | Connection issues, proxy, firewall problems |
| 🔒 **SSL/TLS** | [sslcert.md](sslcert.md) | Certificate and TLS handshake issues |
| 📦 **Git** | [git.md](git.md) | Git configuration and repository access |
| ⚡ **Actions** | [actions.md](actions.md) | Action-specific runtime issues |
| 🟢 **Node.js** | [nodejs.md](nodejs.md) | Node.js runtime and npm issues |
| 🌍 **Internet** | [internet.md](internet.md) | General internet connectivity |
## Common First Steps
Before diving into specific guides, try these general troubleshooting steps:
### 1. Check Basic Connectivity
```bash
# Test GitHub API access
curl -I https://api.github.com/
# For GitHub Enterprise Server
curl -I https://your-github-enterprise.com/api/v3/
```
### 2. Verify Runner Status
```bash
# Check if runner service is running
./svc.sh status
# View recent logs
tail -f _diag/Runner_*.log
```
### 3. Test Runner Configuration
```bash
# Re-run configuration
./config.sh
# Test connection without running
./run.sh --check
```
## Getting Additional Help
If these guides don't resolve your issue:
1. **Search existing issues** in the [runner repository](https://github.com/actions/runner/issues)
2. **Check GitHub Status** at [githubstatus.com](https://githubstatus.com)
3. **Ask the community** in [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)
4. **Contact support** for critical issues via [GitHub Support](https://support.github.com/contact)
## Contributing
Found a solution to a common problem not covered here? Consider contributing:
1. Create a new `.md` file for the issue type
2. Follow the format of existing guides
3. Submit a pull request with your improvements
---
💡 **Tip**: Always check the `_diag/` directory for detailed log files when troubleshooting issues.

View File

@@ -1,28 +1,17 @@
# Contributions
## Table of Contents
- [Getting Started](#getting-started)
- [Issues](#issues)
- [Enhancements and Feature Requests](#enhancements-and-feature-requests)
- [Required Dev Dependencies](#required-dev-dependencies)
- [Quickstart: Run a Job from a Real Repository](#quickstart-run-a-job-from-a-real-repository)
- [Development Life Cycle](#development-life-cycle)
- [Clone Repository](#clone-repository)
- [Build Layout](#build-layout)
- [Test Layout](#test-layout)
- [Configure Runner](#configure-runner)
- [Run Runner](#run-runner)
- [View Logs](#view-logs)
- [Editors](#editors)
- [Styling](#styling)
## Getting Started
We welcome contributions in the form of issues and pull requests. We view the contributions and the process as the same for github and external contributors. Please note the runner typically requires changes across the entire system and we aim for issues in the runner to be entirely self contained and fixable here. Therefore, we will primarily handle bug issues opened in this repo and we kindly request you to create all feature and enhancement requests on the [GitHub Feedback](https://github.com/community/community/discussions/categories/actions-and-packages) page.
> IMPORTANT: Building your own runner is critical for the dev inner loop process when contributing changes. However, only runners built and distributed by GitHub (releases) are supported in production. Be aware that workflows and orchestrations run service side with the runner being a remote process to run steps. For that reason, the service can pull the runner forward so customizations can be lost.
## Understanding Actions vs Runner
**New to GitHub Actions development?** See [Action Execution Model](action-execution-model.md) to understand the difference between:
- **Actions** (JavaScript, containers, composite) - Run without compilation
- **Runner** (this repository) - Compiled C# application that executes actions
For examples of how different action types work, see [Action Execution Examples](examples/action-execution-examples.md).
## Issues
Log issues for both bugs and enhancement requests. Logging issues are important for the open community.
@@ -143,8 +132,8 @@ cd runner/_layout
./config.(sh/cmd) # configure your custom runner
```
You will need the name of your repository and a runner registration token.
Check the [Quickstart section](#quickstart-run-a-job-from-a-real-repository) if you don't know how to get this token.
You will need your the name of your repository and a runner registration token.
Check [Quickstart](##Quickstart:-Run-a-job-from-a-real-repository) if you don't know how to get this token.
These can also be passed down as arguments to `config.(sh/cmd)`:
```bash

View File

@@ -0,0 +1,117 @@
# Action Execution Examples
This directory contains examples demonstrating how different types of GitHub Actions are executed without compilation.
## JavaScript Action Example
A simple JavaScript action that runs source code directly:
### action.yml
```yaml
name: 'JavaScript Example'
description: 'Demonstrates direct JavaScript execution'
runs:
using: 'node20'
main: 'index.js'
```
### index.js
```javascript
// This file runs directly - no compilation needed
console.log('Hello from JavaScript action!');
console.log('Process args:', process.argv);
console.log('Environment:', process.env.INPUT_MESSAGE || 'No input provided');
```
**Execution**: The runner directly executes `node index.js` - no build step.
## Container Action Example
### action.yml (Pre-built image)
```yaml
name: 'Container Example'
description: 'Demonstrates container execution'
runs:
using: 'docker'
image: 'docker://alpine:latest'
entrypoint: '/bin/sh'
args:
- '-c'
- 'echo "Hello from container!" && env | grep INPUT_'
```
### action.yml (Build from source)
```yaml
name: 'Container Build Example'
description: 'Demonstrates building from Dockerfile'
runs:
using: 'docker'
image: 'Dockerfile'
args:
- 'Hello from built container!'
```
### Dockerfile
```dockerfile
FROM alpine:latest
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
```
### entrypoint.sh
```bash
#!/bin/sh
echo "Container built and running: $1"
echo "Environment variables:"
env | grep INPUT_ || echo "No INPUT_ variables found"
```
**Execution**: Docker builds the image (if needed) and runs the container - action source isn't compiled.
## Composite Action Example
### action.yml
```yaml
name: 'Composite Example'
description: 'Demonstrates composite action execution'
runs:
using: 'composite'
steps:
- name: Run shell command
run: echo "Step 1: Hello from composite action!"
shell: bash
- name: Use another action
uses: actions/checkout@v4
with:
path: 'checked-out-code'
- name: Run another shell command
run: |
echo "Step 3: Files in workspace:"
ls -la
shell: bash
```
**Execution**: The runner interprets the YAML and executes each step - no compilation.
## Comparison with Runner Compilation
The **runner itself** (this repository) must be compiled:
```bash
# This compiles the runner from C# source code
cd src
./dev.sh build
# The compiled runner then executes actions WITHOUT compiling them
./_layout/bin/Runner.Worker
```
## Key Takeaway
- **Actions** = Interpreted at runtime (JavaScript, containers, YAML)
- **Runner** = Compiled from source (C# → binaries)
The runner compiles once and then executes many different actions without compiling them.

View File

@@ -6,21 +6,10 @@
Please see "[Supported architectures and operating systems for self-hosted runners](https://docs.github.com/en/actions/reference/runners/self-hosted-runners#linux)."
## Quick Setup
The `./config.sh` script will automatically check and guide you through installing .NET dependencies:
```bash
./config.sh
# If dependencies are missing, run:
./bin/installdependencies.sh
```
## Install .NET Core Linux Dependencies
The `./config.sh` will check .NET Core dependencies during runner configuration.
You might see something like this which indicates a dependency is missing:
## Install .Net Core 3.x Linux Dependencies
The `./config.sh` will check .Net Core 3.x dependencies during runner configuration.
You might see something like this which indicate a dependency's missing.
```bash
./config.sh
libunwind.so.8 => not found
@@ -28,87 +17,34 @@ You might see something like this which indicates a dependency is missing:
Dependencies is missing for Dotnet Core 6.0
Execute ./bin/installdependencies.sh to install any missing Dotnet Core 6.0 dependencies.
```
You can easily correct the problem by executing `./bin/installdependencies.sh`.
The `installdependencies.sh` script should install all required dependencies on all supported Linux versions
> Note: The `installdependencies.sh` script will try to use the default package management mechanism on your Linux flavor (ex. `yum`/`apt-get`/`apt`).
> **Note:** The `installdependencies.sh` script will try to use the default package management mechanism on your Linux flavor (ex. `yum`/`apt-get`/`apt`).
### Full dependencies list
## Manual Dependency Installation
Debian based OS (Debian, Ubuntu, Linux Mint)
If the automatic installation doesn't work, you can manually install dependencies using your package manager:
### Debian based OS (Debian, Ubuntu, Linux Mint)
```bash
sudo apt-get update
sudo apt-get install -y liblttng-ust1 libkrb5-3 zlib1g libssl1.1 libicu66
```
**Required packages:**
- liblttng-ust1 or liblttng-ust0
- libkrb5-3
- zlib1g
- libssl1.1, libssl1.0.2 or libssl1.0.0
- libicu63, libicu60, libicu57 or libicu55
### Fedora based OS (Fedora, Red Hat Enterprise Linux, CentOS, Oracle Linux 7)
Fedora based OS (Fedora, Red Hat Enterprise Linux, CentOS, Oracle Linux 7)
```bash
sudo yum install -y lttng-ust openssl-libs krb5-libs zlib libicu
# Or for newer systems:
sudo dnf install -y lttng-ust openssl-libs krb5-libs zlib libicu
```
**Required packages:**
- lttng-ust
- openssl-libs
- krb5-libs
- zlib
- libicu
### SUSE based OS (OpenSUSE, SUSE Enterprise)
SUSE based OS (OpenSUSE, SUSE Enterprise)
```bash
sudo zypper install -y lttng-ust libopenssl1_1 krb5 zlib libicu60_2
```
**Required packages:**
- lttng-ust
- libopenssl1_1
- krb5
- zlib
- libicu60_2
## Troubleshooting
### Common Issues
**Permission denied errors:**
```bash
sudo chmod +x ./config.sh ./run.sh
```
**Missing dependencies after installation:**
```bash
# Check what's missing
ldd ./bin/Runner.Listener
# Reinstall dependencies
./bin/installdependencies.sh
```
**SSL/TLS errors:**
```bash
# Update certificates
sudo apt-get update && sudo apt-get install ca-certificates
# Or for RHEL/CentOS:
sudo yum update ca-certificates
```
### Getting Help
- Check our [troubleshooting guide](../checks/README.md)
- Search [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)
- Review [common network issues](../checks/network.md)
## [More .NET Core Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x)
## [More .Net Core Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x)

View File

@@ -1,136 +1,9 @@
# ![osx](../res/apple_med.png) macOS System Prerequisites
# ![osx](../res/apple_med.png) macOS/OS X System Prerequisites
## Supported Versions
Please see "[Supported architectures and operating systems for self-hosted runners](https://docs.github.com/en/actions/reference/runners/self-hosted-runners#macos)."
## Quick Setup
1. **Download** the latest runner from [releases](https://github.com/actions/runner/releases)
2. **Extract** the downloaded archive: `tar xzf actions-runner-osx-x64-*.tar.gz`
3. **Run** `./config.sh` to configure the runner
4. **Install** as a service: `sudo ./svc.sh install` and `sudo ./svc.sh start`
## System Requirements
### macOS Version
- macOS 10.15 (Catalina) or later
- Both Intel (x64) and Apple Silicon (ARM64) are supported
### Required Tools
#### Homebrew (Recommended)
Install Homebrew for easy package management:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
#### Development Tools
```bash
# Install Xcode Command Line Tools
xcode-select --install
# Install essential development tools via Homebrew
brew install git curl wget
```
### .NET Runtime
- .NET 6.0 runtime (automatically included with the runner)
## Setup Steps
### 1. Download and Extract
```bash
# Create runner directory
mkdir ~/actions-runner && cd ~/actions-runner
# Download latest release (replace with actual version)
curl -O -L https://github.com/actions/runner/releases/download/v2.xyz.z/actions-runner-osx-x64-2.xyz.z.tar.gz
# Extract
tar xzf ./actions-runner-osx-x64-2.xyz.z.tar.gz
```
### 2. Configure
```bash
./config.sh --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
```
### 3. Run as Service (macOS)
```bash
# Install as launchd service
sudo ./svc.sh install
# Start the service
sudo ./svc.sh start
# Check status
sudo ./svc.sh status
```
### 4. Run Interactively (Alternative)
```bash
./run.sh
```
## macOS-Specific Considerations
### Security & Privacy
- Allow the runner executable through macOS Gatekeeper
- Grant necessary permissions in System Preferences > Security & Privacy
### Code Signing
For repositories that build macOS applications:
```bash
# Install certificates for code signing
security import developer_certificates.p12 -k ~/Library/Keychains/login.keychain
```
### Xcode Integration
If building iOS/macOS apps:
```bash
# Install Xcode from App Store or developer portal
# Set Xcode path
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
```
## Troubleshooting
### Common Issues
**Permission Denied:**
```bash
chmod +x ./config.sh ./run.sh ./svc.sh
```
**Gatekeeper Issues:**
```bash
# Allow unsigned binary to run
sudo spctl --master-disable
# Or specifically allow the runner
sudo spctl --add ./bin/Runner.Listener
```
**Service Not Starting:**
```bash
# Check system logs
sudo ./svc.sh status
tail -f ~/Library/Logs/Runner_*.log
```
**Path Issues:**
```bash
# Ensure proper PATH in your shell profile
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```
### Getting Help
- Check our [troubleshooting guide](../checks/README.md)
- Review [common network issues](../checks/network.md)
- Search [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)
## [More .NET Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/macos-prerequisites?tabs=netcore30)
## [More .Net Core Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/macos-prerequisites?tabs=netcore30)

View File

@@ -4,92 +4,4 @@
Please see "[Supported architectures and operating systems for self-hosted runners](https://docs.github.com/en/actions/reference/runners/self-hosted-runners#windows)."
## Quick Setup
1. **Download** the latest runner from [releases](https://github.com/actions/runner/releases)
2. **Extract** the downloaded archive to your desired directory
3. **Run** `config.cmd` as Administrator to configure the runner
4. **Install** as a service (optional): `svc.sh install` and `svc.sh start`
## System Requirements
### .NET Runtime
- .NET 6.0 runtime (automatically installed with the runner)
- Windows PowerShell 5.1 or PowerShell Core 6.0+
### Windows Features
Windows runners require the following components:
```powershell
# Enable required Windows features (run as Administrator)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```
### Visual Studio Build Tools (For builds requiring compilation)
For repositories that need to compile code, install:
- **Visual Studio 2017 or newer** [Install here](https://visualstudio.microsoft.com)
- **Visual Studio 2022 17.3 Preview or later** (for ARM64) [Install here](https://docs.microsoft.com/en-us/visualstudio/releases/2022/release-notes-preview)
### Git for Windows
- **Git for Windows** [Install here](https://git-scm.com/downloads) (required for repository operations)
## Common Setup Steps
### 1. Create Runner Directory
```cmd
mkdir C:\actions-runner
cd C:\actions-runner
```
### 2. Download and Extract
```powershell
# Download latest release
Invoke-WebRequest -Uri "https://github.com/actions/runner/releases/download/v2.xyz.z/actions-runner-win-x64-2.xyz.z.zip" -OutFile "actions-runner.zip"
# Extract
Expand-Archive -Path "actions-runner.zip" -DestinationPath "."
```
### 3. Configure
```cmd
.\config.cmd --url https://github.com/YOUR_ORG/YOUR_REPO --token YOUR_TOKEN
```
### 4. Run as Service
```cmd
# Install service
.\svc.sh install
# Start service
.\svc.sh start
```
## Troubleshooting
### Common Issues
**PowerShell Execution Policy:**
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
**Windows Defender/Antivirus:**
- Add runner directory to antivirus exclusions
- Exclude `Runner.Listener.exe` and `Runner.Worker.exe`
**Firewall Issues:**
```powershell
# Allow runner through Windows Firewall
New-NetFirewallRule -DisplayName "GitHub Actions Runner" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
```
**Permission Issues:**
- Run `config.cmd` as Administrator
- Ensure the runner user has "Log on as a service" rights
### Getting Help
- Check our [troubleshooting guide](../checks/README.md)
- Review [common issues](../checks/actions.md)
- Search [GitHub Community Discussions](https://github.com/orgs/community/discussions/categories/actions)
## [More .NET Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/windows-prerequisites?tabs=netcore30)
## [More .NET Core Prerequisites Information](https://docs.microsoft.com/en-us/dotnet/core/windows-prerequisites?tabs=netcore30)

View File

@@ -0,0 +1,226 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using GitHub.DistributedTask.WebApi;
using GitHub.Runner.Worker;
using Moq;
using Xunit;
namespace GitHub.Runner.Common.Tests.Worker
{
/// <summary>
/// Tests to verify that actions are executed without compilation
/// </summary>
public sealed class ActionExecutionModelL0
{
private CancellationTokenSource _ecTokenSource;
private Mock<IExecutionContext> _ec;
private TestHostContext _hc;
[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public void JavaScriptActions_UseSourceFiles_NoCompilation()
{
try
{
// Arrange
Setup();
var actionManifest = new ActionManifestManager();
actionManifest.Initialize(_hc);
// Create a temporary action.yml for a JavaScript action
string actionYml = @"
name: 'Test JS Action'
description: 'Test JavaScript action execution'
runs:
using: 'node20'
main: 'index.js'
";
string tempFile = Path.GetTempFileName();
File.WriteAllText(tempFile, actionYml);
// Act
var result = actionManifest.Load(_ec.Object, tempFile);
// Assert - JavaScript actions should use direct script execution
Assert.Equal(ActionExecutionType.NodeJS, result.Execution.ExecutionType);
var nodeAction = result.Execution as NodeJSActionExecutionData;
Assert.NotNull(nodeAction);
Assert.Equal("node20", nodeAction.NodeVersion);
Assert.Equal("index.js", nodeAction.Script); // Points to source file, not compiled binary
// Cleanup
File.Delete(tempFile);
}
finally
{
Teardown();
}
}
[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public void ContainerActions_UseImages_NoSourceCompilation()
{
try
{
// Arrange
Setup();
var actionManifest = new ActionManifestManager();
actionManifest.Initialize(_hc);
// Create a temporary action.yml for a container action
string actionYml = @"
name: 'Test Container Action'
description: 'Test container action execution'
runs:
using: 'docker'
image: 'alpine:latest'
entrypoint: '/bin/sh'
args:
- '-c'
- 'echo Hello World'
";
string tempFile = Path.GetTempFileName();
File.WriteAllText(tempFile, actionYml);
// Act
var result = actionManifest.Load(_ec.Object, tempFile);
// Assert - Container actions should use images, not compiled source
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
var containerAction = result.Execution as ContainerActionExecutionData;
Assert.NotNull(containerAction);
Assert.Equal("alpine:latest", containerAction.Image); // Uses pre-built image
Assert.Equal("/bin/sh", containerAction.EntryPoint);
// Cleanup
File.Delete(tempFile);
}
finally
{
Teardown();
}
}
[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public void CompositeActions_UseStepDefinitions_NoCompilation()
{
try
{
// Arrange
Setup();
var actionManifest = new ActionManifestManager();
actionManifest.Initialize(_hc);
// Create a temporary action.yml for a composite action
string actionYml = @"
name: 'Test Composite Action'
description: 'Test composite action execution'
runs:
using: 'composite'
steps:
- run: echo 'Hello from step 1'
shell: bash
- run: echo 'Hello from step 2'
shell: bash
";
string tempFile = Path.GetTempFileName();
File.WriteAllText(tempFile, actionYml);
// Act
var result = actionManifest.Load(_ec.Object, tempFile);
// Assert - Composite actions should use step definitions, not compiled code
Assert.Equal(ActionExecutionType.Composite, result.Execution.ExecutionType);
var compositeAction = result.Execution as CompositeActionExecutionData;
Assert.NotNull(compositeAction);
Assert.Equal(2, compositeAction.Steps.Count); // Contains step definitions, not binaries
// Cleanup
File.Delete(tempFile);
}
finally
{
Teardown();
}
}
[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public void ActionTypes_DoNotRequireCompilation_OnlyInterpretation()
{
// This test documents that actions are interpreted, not compiled
// JavaScript actions: Node.js interprets .js files directly
// Container actions: Docker runs images or builds from Dockerfile
// Composite actions: Runner interprets YAML step definitions
// The runner itself (this C# code) is compiled, but actions are not
Assert.True(true, "Actions use interpretation model, not compilation model");
}
[Fact]
[Trait("Level", "L0")]
[Trait("Category", "Worker")]
public void ActionExecutionTypes_ShowNoCompilationRequired()
{
// Test that all action execution types are designed for interpretation
// NodeJS actions execute source JavaScript files directly
var nodeAction = new NodeJSActionExecutionData
{
NodeVersion = "node20",
Script = "index.js" // Points to source file, not compiled binary
};
Assert.Equal(ActionExecutionType.NodeJS, nodeAction.ExecutionType);
Assert.Equal("index.js", nodeAction.Script);
// Container actions use images, not compiled source
var containerAction = new ContainerActionExecutionData
{
Image = "alpine:latest" // Pre-built image, not compiled from this action's source
};
Assert.Equal(ActionExecutionType.Container, containerAction.ExecutionType);
Assert.Equal("alpine:latest", containerAction.Image);
// Composite actions contain step definitions
var compositeAction = new CompositeActionExecutionData
{
Steps = new List<GitHub.DistributedTask.Pipelines.ActionStep>()
};
Assert.Equal(ActionExecutionType.Composite, compositeAction.ExecutionType);
Assert.NotNull(compositeAction.Steps); // Contains YAML-defined steps, not compiled code
}
private void Setup([CallerMemberName] string name = "")
{
_ecTokenSource = new CancellationTokenSource();
_hc = new TestHostContext(this, name);
_ec = new Mock<IExecutionContext>();
_ec.Setup(x => x.CancellationToken).Returns(_ecTokenSource.Token);
_ec.Setup(x => x.Global).Returns(new GlobalContext
{
Variables = new Variables(_hc, new Dictionary<string, VariableValue>()),
FileTable = new List<string>()
});
}
private void Teardown()
{
_hc?.Dispose();
_ecTokenSource?.Dispose();
}
}
}