Skip to content

--platform argument doesn't support labels containing equals symbol #4691

@Jay-Anslow-Forter

Description

@Jay-Anslow-Forter

Bug report info

act version:            0.2.76
GOOS:                   darwin
GOARCH:                 arm64
NumCPU:                 14
Docker host:            unix:///Users/REDACTED/.rd/docker.sock
Sockets found:
Config files:           
        /Users/REDACTED/Library/Application Support/act/actrc:
                -P ubuntu-latest=node:16-buster-slim
                -P ubuntu-22.04=node:16-bullseye-slim
                -P ubuntu-20.04=node:16-buster-slim
                -P ubuntu-18.04=node:16-buster-slim
        /Users/REDACTED/.actrc:
                --container-architecture=linux/amd64
        .actrc:
                --platform runner-size=large=node:16-bullseye-slim
Build info:
        Go version:            go1.24.1
        Module path:           github.com/nektos/act
        Main version:          v0.2.76
        Main path:             github.com/nektos/act
        Main checksum:         
        Build settings:
                -buildmode:           exe
                -compiler:            gc
                -ldflags:             -s -w -X main.version=0.2.76 -X main.commit=4f4913f9f34da9f349bf4f842c56e9d7f8af3729 -X main.date=2025-04-01T02:36:03Z -X main.builtBy=goreleaser
                CGO_ENABLED:          0
                GOARCH:               arm64
                GOOS:                 darwin
                GOARM64:              v8.0
                vcs:                  git
                vcs.revision:         4f4913f9f34da9f349bf4f842c56e9d7f8af3729
                vcs.time:             2025-04-01T02:35:41Z
                vcs.modified:         false
Docker Engine:
        Engine version:        26.1.5
        Engine runtime:        runc
        Cgroup version:        2
        Cgroup driver:         cgroupfs
        Storage driver:        overlay2
        Registry URI:          https://index.docker.io/v1/
        OS:                    Alpine Linux v3.20
        OS type:               linux
        OS version:            3.20.5
        OS arch:               aarch64
        OS kernel:             6.6.71-0-virt
        OS CPU:                6
        OS memory:             7936 MB
        Security options:
                name=seccomp,profile=builtin
                name=cgroupns

Command used with act

act pull_request --platform runner-size=large=node:16-bullseye-slim

Describe issue

act doesn't support self-hosted runners when the label contains =. For example, when I set --platform runner-size=large=node:16-bullseye-slim, I'd expect a job with runs-on: runner-size=large to use the node:16-bullseye-slim label when run on act.

Instead, I just get the following error message:

[my-workflow.yaml/my-job] 🚧  Skipping unsupported platform -- Try running with `-P runner-size=large=...`

This workflow runs fine in GitHub (i.e., these are valid labels), we only have issues with act

Link to GitHub repository

No response

Workflow content

on:
  pull_request: {}
  workflow_dispatch: {}

defaults:
  run:
    shell: bash

jobs:
  my-job:
    runs-on: runner-size=large
    steps:
      - run: echo Hello, world!

Relevant log output

DEBU[0000] Handling container host and socket           
DEBU[0000] Defaulting container socket to DOCKER_HOST   
INFO[0000] Using docker host 'unix:///Users/{REDACTED_HOME_DIR}/.rd/docker.sock', and daemon socket 'unix:///Users/{REDACTED_HOME_DIR}/.rd/docker.sock' 
DEBU[0000] Loading environment from {REDACTED_WORKING_DIR}/.env 
DEBU[0000] Loading action inputs from {REDACTED_WORKING_DIR}/.input 
DEBU[0000] Loading secrets from {REDACTED_WORKING_DIR}/.secrets 
DEBU[0000] Conditional GET for notices etag=80ed96e6-b434-4a19-8c41-d896d693b14b 
DEBU[0000] Loading vars from {REDACTED_WORKING_DIR}/.vars 
DEBU[0000] Evaluated matrix inclusions: map[]           
DEBU[0000] Loading workflows from '{REDACTED_WORKING_DIR}/.github/workflows' 
DEBU[0000] Loading workflows recursively                
DEBU[0000] Found workflow 'my-workflow.yaml' in '{REDACTED_WORKING_DIR}/.github/workflows/my-workflow.yaml' 
DEBU[0000] Reading workflow '{REDACTED_WORKING_DIR}/.github/workflows/my-workflow.yaml' 
DEBU[0000] Using first passed in arguments event for filtering: pull_request 
DEBU[0000] Preparing plan with a job: my-job 
DEBU[0000] Using first passed in arguments event: pull_request 
DEBU[0000] Planning job: my-job         
DEBU[0000] gc: 2025-05-27 17:43:19.377129 +0100 BST m=+0.153301251  module=artifactcache
DEBU[0000] Plan Stages: [0x140001220d8]                 
DEBU[0000] Stages Runs: [my-job]        
DEBU[0000] Job.Name: my-job             
DEBU[0000] Job.RawNeeds: {0 0    <nil> []    0 0}       
DEBU[0000] Job.RawRunsOn: {8 0 !!str runner-size=large  <nil> []    11 14} 
DEBU[0000] Job.Env: {0 0    <nil> []    0 0}            
DEBU[0000] Job.If: {0 0  success()  <nil> []    0 0}    
DEBU[0000] Job.Steps: actions/checkout@v4               
DEBU[0000] Job.Steps: make artifacts.jsonl              
DEBU[0000] Job.Steps: Publish to Artifactory            
DEBU[0000] Job.TimeoutMinutes:                          
DEBU[0000] Job.Services: map[]                          
DEBU[0000] Job.Strategy: <nil>                          
DEBU[0000] Job.RawContainer: {0 0    <nil> []    0 0}   
DEBU[0000] Job.Defaults.Run.Shell:                      
DEBU[0000] Job.Defaults.Run.WorkingDirectory:           
DEBU[0000] Job.Outputs: map[]                           
DEBU[0000] Job.Uses:                                    
DEBU[0000] Job.With: map[]                              
DEBU[0000] Job.Result:                                  
DEBU[0000] Empty Strategy, matrixes=[map[]]             
DEBU[0000] Job Matrices: [map[]]                        
DEBU[0000] Runner Matrices: map[]                       
DEBU[0000] Final matrix after applying user inclusions '[map[]]' 
DEBU[0000] Found revision: c9a389b8e7ff394835577f49c0cadaf1 
DEBU[0000] Detected CPUs: 14                            
[my-workflow.yaml/my-job] [DEBUG] evaluating expression 'success()'
[my-workflow.yaml/my-job] [DEBUG] expression 'success()' evaluated to 'true'
[my-workflow.yaml/my-job] 🚧  Skipping unsupported platform -- Try running with `-P runner-size=large=...`
DEBU[0000] Saving notices etag=80ed96e6-b434-4a19-8c41-d896d693b14b 
DEBU[0000] No new notices

Additional information

The cmd.newPlatforms() function splits on the first equals, so it'll be parsing the string "runner-size=large=node:16-bullseye-slim" as []string{"runner-size", "large", "node:16-bullseye-slim"} and discarding it.

I'd be happy to provide a PR to change this parsing code so that it splits on the last equals instead, if you'd consider accepting this change

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions