nektos / act

Run your GitHub Actions locally 🚀
https://nektosact.com
MIT License
54.5k stars 1.36k forks source link

`GITHUB_JOB` should be the id not the name #1473

Open jsoref opened 1 year ago

jsoref commented 1 year ago

Bug report info

act version:            0.2.33
GOOS:                   darwin
GOARCH:                 arm64
NumCPU:                 10
Docker host:            DOCKER_HOST environment variable is unset/empty.
Sockets found:
    /var/run/docker.sock
    /Users/jsoref/.docker/run/docker.sock
Config files:           
    /Users/jsoref/.actrc:
        -P ubuntu-latest=catthehacker/ubuntu:act-latest
        -P ubuntu-20.04=catthehacker/ubuntu:act-20.04
        -P ubuntu-18.04=catthehacker/ubuntu:act-18.04
        -P ubuntu-16.04=catthehacker/ubuntu:act-16.04
        -P self-hosted=catthehacker/ubuntu:act-latest
Build info:
    Go version:            go1.19.2
    Module path:           command-line-arguments
    Main version:          
    Main path:             
    Main checksum:         
    Build settings:
        -compiler:            gc
        -ldflags:             -X main.version=0.2.33
        CGO_ENABLED:          1
        CGO_CFLAGS:           
        CGO_CPPFLAGS:         
        CGO_CXXFLAGS:         
        CGO_LDFLAGS:          
        GOARCH:               arm64
        GOOS:                 darwin
Docker Engine:
    Engine version:        20.10.18
    Engine runtime:        runc
    Cgroup version:        1
    Cgroup driver:         cgroupfs
    Storage driver:        overlay2
    Registry URI:          https://index.docker.io/v1/
    OS:                    Alpine Linux v3.16
    OS type:               linux
    OS version:            3.16.2
    OS arch:               aarch64
    OS kernel:             5.15.64-0-virt
    OS CPU:                2
    OS memory:             7938 MB
    Security options:
        name=seccomp,profile=default

Command used with act

act -W .github/workflows/spelling.yml

Describe issue

Per https://docs.github.com/en/actions/learn-github-actions/environment-variables#naming-conventions-for-environment-variables

Environment variable Description
GITHUB_JOB The job_id of the current job. For example, greeting_job.

GITHUB_JOB should be the job id, not the job name.

I have some code which tries to identify the workflow based on this variable, and at least, the documentation says that what I'm doing is correct: https://github.com/check-spelling/check-spelling/blob/2edd26d0adeaa4e72bfd30e4873855ecb6ba4390/unknown-words.sh#L353

(I'm going to add some code to tolerate this behavior as well as I'm trying to ship...)

Link to GitHub repository

https://github.com/check-spelling/pleroma/blob/spell-check-with-spelling/.github/workflows/spelling.yml

Workflow content

# this is slightly different from what's in the repository as I need some bits to make act more or less work...

name: Check Spelling

# Comment management is handled through a secondary job, for details see:
# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
#
# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
#   (in odd cases, it might actually run just to collapse a commment, but that's fairly rare)
#   it needs `contents: write` in order to add a comment.
#
# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
#   or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
#   it needs `pull-requests: write` in order to manipulate those comments.

# Updating pull request branches is managed via comment handling.
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
#
# These elements work together to make it happen:
#
# `on.issue_comment`
#   This event listens to comments by users asking to update the metadata.
#
# `jobs.update`
#   This job runs in response to an issue_comment and will push a new commit
#   to update the spelling metadata.
#
# `with.experimental_apply_changes_via_bot`
#   Tells the action to support and generate messages that enable it
#   to make a commit to update the spelling metadata.
#
# `with.ssh_key`
#   In order to trigger workflows when the commit is made, you can provide a
#   secret (typically, a write-enabled github deploy key).
#
#   For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key

on:
  push:
    branches:
    - "**"
    tags-ignore:
    - "**"
  pull_request_target:
    branches:
    - "**"
    tags-ignore:
    - "**"
    types:
    - 'opened'
    - 'reopened'
    - 'synchronize'
  issue_comment:
    types:
    - 'created'

jobs:
  spelling:
    name: Check Spelling
    permissions:
      contents: read
      pull-requests: read
      actions: read
      security-events: write
    outputs:
      followup: ${{ steps.spelling.outputs.followup }}
      internal_state_directory: ${{ steps.spelling.outputs.internal_state_directory }}
      docker_container: ${{ steps.spelling.outputs.docker_container }}
    runs-on: ubuntu-latest
    if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
    concurrency:
      group: spelling-${{ github.event.pull_request.number || github.ref }}
      # note: If you use only_check_changed_files, you do not want cancel-in-progress
      cancel-in-progress: true
    steps:
    - name: check-spelling
      id: spelling
      uses: check-spelling/check-spelling@prerelease
      with:
        suppress_push_for_open_pull_request: 1
        checkout: true
        spell_check_this: check-spelling/spell-check-this@prerelease
        post_comment: 0
        use_magic_file: 1
        experimental_apply_changes_via_bot: 1
        use_sarif: 1
        extra_dictionary_limit: 10
        extra_dictionaries:
          cspell:software-terms/src/software-terms.txt
          cspell:node/node.txt
          cspell:html/html.txt
          cspell:npm/npm.txt
          cspell:elixir/elixir.txt
          cspell:fullstack/fullstack.txt
          cspell:aws/aws.txt
          cspell:cpp/src/stdlib-cerrno.txt
          cspell:filetypes/filetypes.txt
          cspell:python/src/common/extra.txt
          cspell:python/src/python/python.txt
          cspell:css/css.txt
          cspell:lorem-ipsum/dictionary.txt
          cspell:cpp/src/ecosystem.txt
          cspell:django/django.txt
        check_extra_dictionaries: ''

  comment-push:
    name: Report (Push)
    # If your workflow isn't running on push, you can remove this job
    runs-on: ubuntu-latest
    needs: spelling
    permissions:
      contents: write
    if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
    steps:
    - name: comment
      uses: check-spelling/check-spelling@prerelease
      with:
        checkout: true
        spell_check_this: check-spelling/spell-check-this@prerelease
        task: ${{ needs.spelling.outputs.followup }}
        internal_state_directory: ${{ needs.spelling.outputs.internal_state_directory }}
        caller_container: ${{ needs.spelling.outputs.docker_container }}
        debug: 1

  comment-pr:
    name: Report (PR)
    # If you workflow isn't running on pull_request*, you can remove this job
    runs-on: ubuntu-latest
    needs: spelling
    permissions:
      pull-requests: write
    if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
    steps:
    - name: comment
      uses: check-spelling/check-spelling@prerelease
      with:
        checkout: true
        spell_check_this: check-spelling/spell-check-this@prerelease
        task: ${{ needs.spelling.outputs.followup }}
        experimental_apply_changes_via_bot: 1

  update:
    name: Update PR
    permissions:
      contents: write
      pull-requests: write
      actions: read
    runs-on: ubuntu-latest
    if: ${{
        github.event_name == 'issue_comment' &&
        github.event.issue.pull_request &&
        contains(github.event.comment.body, '@check-spelling-bot apply')
      }}
    concurrency:
      group: spelling-update-${{ github.event.issue.number }}
      cancel-in-progress: false
    steps:
    - name: apply spelling updates
      uses: check-spelling/check-spelling@prerelease
      with:
        experimental_apply_changes_via_bot: 1
        checkout: true
        ssh_key: "${{ secrets.CHECK_SPELLING }}"

Relevant log output

[Check Spelling/Report (Push) ]   | + echo env:
[Check Spelling/Report (Push) ]   | env:
[Check Spelling/Report (Push) ]   | + env
[Check Spelling/Report (Push) ]   | + sort
...
[Check Spelling/Report (Push) ]   | ACT=true
...
[Check Spelling/Report (Push) ]   | GITHUB_ACTION_REF=
[Check Spelling/Report (Push) ]   | GITHUB_ACTION_REPOSITORY=
...
[Check Spelling/Report (Push) ]   | GITHUB_JOB=Report (Push)

Additional information

I don't think #1458 is particularly relevant, although it may be adjacent.

I've included GITHUB_ACTION_REF and GITHUB_ACTION_REPOSITORY which should also be set, but aren't. They're technically out of scope, and I'm in the middle of adding additional code to work around their empty values.

To make the run faster, you can add:

.github/actions/spelling/only.txt:

CHANGELOG.md
jsoref commented 1 year ago

Sigh