I’m having a weird issue with my private GitHub repository’s CI workflow. Even though all the steps complete successfully, each step in the Actions interface displays just Error: in red text. This makes it really hard to debug when there are actual failures since I can’t see the proper error messages without checking the raw logs.
Here’s my workflow configuration:
name: Test and Build
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16]
steps:
- uses: actions/checkout@v3
- name: Install Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- name: Run ESLint
run: npm run eslint
- name: Check Formatting
run: npm run format-check
In the raw logs I can see some control characters but I’m not sure if those are causing the problem. Even simple commands like echo "hello" show these characters. Has anyone encountered this before?
Had the same issue last month with a private repo. Those weird control characters are ANSI escape sequences from ESLint and Prettier - they output colored text by default, and GitHub Actions sometimes displays it wrong. Quick fix: add NO_COLOR=1 or FORCE_COLOR=0 before your npm commands. You can also use npm run eslint -- --no-color and similar flags for formatting checks. Won’t break your workflow, just cleans up the messy display in the Actions UI.
This happens when your npm scripts output ANSI color codes that GitHub Actions can’t render properly. I’ve seen it tons of times with ESLint and Prettier configs. Update your package.json scripts to disable color output - try “eslint”: “eslint . --color=false” and “format-check”: “prettier --check . --no-color”. You can also set environment variables in your workflow file at the job level with env: CI: true. Most tools recognize this and automatically turn off colored output. The CI variable works really well since many linting tools already have built-in logic to detect CI environments.
Had this exact issue with a React project earlier this year. Turns out my .eslintrc config was using a custom formatter that outputs ANSI sequences. Besides the color flag fixes others mentioned, check if you’re running custom ESLint plugins or formatters - they might be dumping extra output. Some Node.js packages auto-detect TTY and force colors no matter what CI environment you’re in. I fixed it by adding TERM=dumb to my workflow environment variables. Most CLI tools then treat it as a basic terminal without color support.
check for console.log statements or debug output in your scripts - that’s probably what’s causing it. it’s not always ANSI codes; sometimes dependencies dump random output too. run your npm commands with --silent locally to test this. also double-check your eslint config for any odd reporter settings.
Those ANSI escape sequences are a pain, but dealing with them manually across multiple repos gets old fast. I’ve been there with the environment variables and config tweaks.
I moved all my CI workflows to Latenode instead of fighting GitHub Actions quirks. You can set up scenarios that run tests and builds without those display issues. Plus you get way more control over the environment and can easily pipe outputs between different tools.
I built a scenario that pulls from GitHub, runs ESLint and Prettier with clean output formatting, then posts results back. Takes maybe 10 minutes to set up and works consistently across all projects. No more hunting through raw logs or messing with color flags in every package.json.
The webhook integration is solid too - triggers on pushes just like Actions but actually shows readable output when things go wrong.