GitHub Actions ã§ã¯ãŒã¯ãããŒãå®è¡ãããšãã« git commit
ãš git push
ãå®è¡ã㊠GitHub Actions ã®å®è¡ãåŸ
ã€ããšãããããïŒããè¿
éã«å®è¡ããŠïŒçµæãåãåãããã«ãactãã䜿ã£ãŠ GitHub Actions ãããŒã«ã«ç°å¢ïŒã³ã³ããïŒã§å®è¡ããä»çµã¿ã詊ããŠã¿ãïŒäŸ¿å©ã ã£ãã®ã§ç޹ä»ããããšæãâïž
åœç¶ãªãã GitHub Actions ãå®å šåçŸã§ããŠãããã§ã¯ãªãïŒæçµçã«ã¯ GitHub Actions ã䜿ãããšã«ã¯ãªããã©ïŒç¹ã«éçºäžã«é »ç¹ã«ãã¹ããå®è¡ã§ããã®ã¯ã¡ãªããã ãšæãïŒããŸã䜵çšããªããéçºäœéšãé«ãããð
ã»ããã¢ãã
macOS ã®å Žå㯠Homebrew ã䜿ã£ãŠç°¡åã«ã»ããã¢ããã§ããïŒä»ã«ã¯ Chocolatey (Windows) ã Bash script ãéžã¹ãïŒä»å㯠act 0.2.40
ãš Docker Desktop 4.16.1 ã䜿ãïŒ
$ brew install act $ act --version act version 0.2.40
act
ã³ãã³ãã«ã¯å€ãã®ãªãã·ã§ã³ãããïŒä»¥äžã«èŒããŠããïŒ
$ act --help Run GitHub actions locally by specifying the event name (e.g. `push`) or an action name directly. Usage: act [event name to run] [flags] If no event name passed, will default to "on: push" If actions handles only one event it will be used as default instead of "on: push" Flags: -a, --actor string user that triggered the event (default "nektos/act") --artifact-server-addr string Defines the address to which the artifact server binds. (default "10.0.0.6") --artifact-server-path string Defines the path where the artifact server stores uploads and retrieves downloads from. If not specified the artifact server will not start. --artifact-server-port string Defines the port where the artifact server listens. (default "34567") -b, --bind bind working directory to container, rather than copy --bug-report Display system information for bug report --container-architecture string Architecture which should be used to run containers, e.g.: linux/amd64. If not specified, will use host default architecture. Requires Docker server API Version 1.41+. Ignored on earlier Docker server platforms. --container-cap-add stringArray kernel capabilities to add to the workflow containers (e.g. --container-cap-add SYS_PTRACE) --container-cap-drop stringArray kernel capabilities to remove from the workflow containers (e.g. --container-cap-drop SYS_PTRACE) --container-daemon-socket string Path to Docker daemon socket which will be mounted to containers (default "/var/run/docker.sock") --container-options string Custom docker container options for the job container without an options property in the job definition --defaultbranch string the name of the main branch --detect-event Use first event type from workflow as event that triggered the workflow -C, --directory string working directory (default ".") -n, --dryrun dryrun mode --env stringArray env to make available to actions with optional value (e.g. --env myenv=foo or --env myenv) --env-file string environment file to read and use as env in the containers (default ".env") -e, --eventpath string path to event JSON file --github-instance string GitHub instance to use. Don't use this if you are not using GitHub Enterprise Server. (default "github.com") -g, --graph draw workflows -h, --help help for act --input stringArray action input to make available to actions (e.g. --input myinput=foo) --input-file string input file to read and use as action input (default ".input") --insecure-secrets NOT RECOMMENDED! Doesn't hide secrets while printing logs. -j, --job string run a specific job ID --json Output logs in json format -l, --list list workflows --no-recurse Flag to disable running workflows from subdirectories of specified path in '--workflows'/'-W' flag --no-skip-checkout Do not skip actions/checkout -P, --platform stringArray custom image to use per platform (e.g. -P ubuntu-18.04=nektos/act-environments-ubuntu:18.04) --privileged use privileged mode -p, --pull pull docker image(s) even if already present -q, --quiet disable logging of output from steps --rebuild rebuild local action docker image(s) even if already present --remote-name string git remote name that will be used to retrieve url of git repo (default "origin") --replace-ghe-action-token-with-github-com string If you are using replace-ghe-action-with-github-com and you want to use private actions on GitHub, you have to set personal access token --replace-ghe-action-with-github-com stringArray If you are using GitHub Enterprise Server and allow specified actions from GitHub (github.com), you can set actions on this. (e.g. --replace-ghe-action-with-github-com =github/super-linter) -r, --reuse don't remove container(s) on successfully completed workflow(s) to maintain state between runs --rm automatically remove container(s)/volume(s) after a workflow(s) failure -s, --secret stringArray secret to make available to actions with optional value (e.g. -s mysecret=foo or -s mysecret) --secret-file string file with list of secrets to read from (e.g. --secret-file .secrets) (default ".secrets") --use-gitignore Controls whether paths specified in .gitignore should be copied into container (default true) --userns string user namespace to use -v, --verbose verbose output --version version for act -w, --watch watch the contents of the local repo and run when files change -W, --workflows string path to workflow file(s) (default "./.github/workflows/")
ä»å䜿ããµã³ãã«ã¯ãŒã¯ãããŒ
ä»åã¯ãµã³ãã«ãšããŠïŒPython ã§å®è£
ãã FizzBuzz ã³ãŒãã«å¯Ÿã㊠Flake8 ãš pytest ãå®è¡ããã¯ãŒã¯ãããŒã䜿ãïŒGitHub Actions ã®ãStarter WorkflowsããšããŠå
¬éãããŠãã python-package.yml
ãããŒã¹ã« .github/workflows/test.yaml
ãçšæããïŒ
name: Python package on: push: - master pull_request: - master jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ['3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | pytest
act
ã³ãã³ãã詊ã
ãã£ãã act
ã³ãã³ãã詊ããŠããâïž
act --list
ã³ãã³ã
act --list
ã³ãã³ããå®è¡ãããšã¯ãŒã¯ãããŒäžèЧã確èªã§ããïŒ
$ act --list Stage Job ID Job name Workflow name Workflow file Events 0 build build Python package test.yaml push,pull_request
act
ã³ãã³ãïŒååå®è¡ïŒ
act
ã³ãã³ããå®è¡ãããšã¯ãŒã¯ãããŒãå®è¡ã§ããïŒååå®è¡ã®å Žåã¯å®è¡æã«äœ¿ã Docker Image ã Large / Medium / Micro ããéžã¶ïŒä»å㯠Medium ãéžãã ïŒãããšïŒèªåçã« ~/.actrc
ãšããèšå®ãã¡ã€ã«ãäœãããŠïŒããã©ã«ãèšå®ãšããŠäœ¿ããããã«ãªãïŒ.actrc
ããªããžããªããšã«äœã£ãŠèšå®ãäžæžãããããšãã§ããïŒ
$ act ? Please choose the default image you want to use with act: - Large size image: +20GB Docker image, includes almost all tools used on GitHub Actions (IMPORTANT: currently only ubuntu-18.04 platform is available) - Medium size image: ~500MB, includes only necessary tools to bootstrap actions and aims to be compatible with all actions - Micro size image: <200MB, contains only NodeJS required to bootstrap actions, doesn't work with all actions
åèãŸã§ã« Large / Medium / Micro ãããããéžãã ãšãã«èªåçã«äœããã ~/.actrc
ã®èšå®ãã¡ã€ã«ã以äžã«èŒããŠããïŒ
Micro
-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
Medium
-P ubuntu-latest=catthehacker/ubuntu:act-latest -P ubuntu-22.04=catthehacker/ubuntu:act-22.04 -P ubuntu-20.04=catthehacker/ubuntu:act-20.04 -P ubuntu-18.04=catthehacker/ubuntu:act-18.04
Large
-P ubuntu-latest=catthehacker/ubuntu:full-latest -P ubuntu-latest=catthehacker/ubuntu:full-20.04 -P ubuntu-18.04=catthehacker/ubuntu:full-18.04
ãªãïŒact 0.2.40 ãŸã§ã¯ Micro ãéžãã ãšãã«äœãããèšå®ãã¡ã€ã«ãééã£ãŠããŠïŒä»¥äžã®ãã«ãªã¯ãšã¹ããåºããŠçŽããŠãããïŒæ¢ã«ãªãªãŒã¹ãããŠãã act 0.2.41 ã§çŽã£ãŠããâïž
ä»åã®ã¯ãŒã¯ãããŒã§ã¯ runs-on: ubuntu-latest
ãšèšå®ããŠããããïŒMedium ã ãš catthehacker/ubuntu:act-latest
ã€ã¡ãŒãžã䜿ã£ãŠã¯ãŒã¯ãããŒãå®è¡ãããïŒçŸæç¹ã ãš ubuntu-latest
㯠ubuntu-22.04
ãåç
§ããŠããããïŒæç€ºçã« -P ubuntu-latest=catthehacker/ubuntu:act-22.04
ãšèšå®ããŠããã®ãè¯ãããšã
act
ã³ãã³ã
æ¹ã㊠act
ã³ãã³ããå®è¡ãããšã¯ãŒã¯ãããŒãå®è¡ã§ããïŒä»å㯠matrix
ã䜿ã£ãŠ Python 3.8 / 3.9 / 3.10 ã䞊åå®è¡ããããïŒå®è¡ãã°ã«ã¯ä»¥äžã®3çš®é¡ãæ··åšããïŒèŠã«ããããé çªã¯å
¥ãæ¿ããŠèŒããŠããïŒïŒãŸã pip install
ã®å®è¡ãã°ã pytest
å®è¡ãã°ã衚瀺ãããããïŒæšæºåºåã¯éåžžã«å€ããªã£ãŠããŸãðŠ
build-1
: Python 3.8build-2
: Python 3.9build-3
: Python 3.10
$ act ïŒäžç¥ïŒ [Python package/build-1] 𧪠Matrix: map[python-version:3.8] [Python package/build-2] 𧪠Matrix: map[python-version:3.9] [Python package/build-3] 𧪠Matrix: map[python-version:3.10] [Python package/build-1] â Success - Main actions/checkout@v3 [Python package/build-2] â Success - Main actions/checkout@v3 [Python package/build-3] â Success - Main actions/checkout@v3 [Python package/build-1] â Success - Main Set up Python 3.8 [Python package/build-2] â Success - Main Set up Python 3.9 [Python package/build-3] â Success - Main Set up Python 3.10 [Python package/build-1] â Success - Main Install dependencies [Python package/build-2] â Success - Main Install dependencies [Python package/build-3] â Success - Main Install dependencies [Python package/build-1] â Success - Main Lint with flake8 [Python package/build-2] â Success - Main Lint with flake8 [Python package/build-3] â Success - Main Lint with flake8 [Python package/build-1] â Success - Main Test with pytest [Python package/build-2] â Success - Main Test with pytest [Python package/build-3] â Success - Main Test with pytest [Python package/build-1] â Success - Post Set up Python 3.8 [Python package/build-2] â Success - Post Set up Python 3.9 [Python package/build-3] â Success - Post Set up Python 3.10 [Python package/build-1] ð Job succeeded [Python package/build-2] ð Job succeeded [Python package/build-3] ð Job succeeded
act --quiet
ã³ãã³ã
æšæºåºåã "å€å°" æžãããšã㯠--quiet
ãªãã·ã§ã³ãçµã¿åãããŠäœ¿ãïŒpip install
ã®å®è¡ãã°ã pytest
å®è¡ãã°ãé衚瀺ã«ã§ããïŒããã§ããŸã å€ããã©ã
$ act --quiet ïŒäžç¥ïŒ [Python package/build-1] 𧪠Matrix: map[python-version:3.8] [Python package/build-2] 𧪠Matrix: map[python-version:3.9] [Python package/build-3] 𧪠Matrix: map[python-version:3.10] [Python package/build-1] â Success - Main actions/checkout@v3 [Python package/build-2] â Success - Main actions/checkout@v3 [Python package/build-3] â Success - Main actions/checkout@v3 [Python package/build-1] â Success - Main Set up Python 3.8 [Python package/build-2] â Success - Main Set up Python 3.9 [Python package/build-3] â Success - Main Set up Python 3.10 [Python package/build-1] â Success - Main Install dependencies [Python package/build-2] â Success - Main Install dependencies [Python package/build-3] â Success - Main Install dependencies [Python package/build-1] â Success - Main Lint with flake8 [Python package/build-2] â Success - Main Lint with flake8 [Python package/build-3] â Success - Main Lint with flake8 [Python package/build-1] â Success - Main Test with pytest [Python package/build-2] â Success - Main Test with pytest [Python package/build-3] â Success - Main Test with pytest [Python package/build-1] â Success - Post Set up Python 3.8 [Python package/build-2] â Success - Post Set up Python 3.9 [Python package/build-3] â Success - Post Set up Python 3.10 [Python package/build-1] ð Job succeeded [Python package/build-2] ð Job succeeded [Python package/build-3] ð Job succeeded
act --reuse
ã³ãã³ã
ã¯ãŒã¯ãããŒå®è¡æã«æ§ç¯ããã€ã¡ãŒãžãåå©çšããå Žå㯠--reuse
ãªãã·ã§ã³ãçµã¿åãããŠäœ¿ãïŒå®è¡æéã¯å€å°æ©ããªãïŒ
$ act --reuse
act --watch
ã³ãã³ã
--watch
ãªãã·ã§ã³ã䜿ããšã³ãŒããã¯ãŒã¯ãããŒèšå®ã®å€æŽãæ€ç¥ããŠïŒèªåçã«ã¯ãŒã¯ãããŒãåå®è¡ã§ããïŒãã ãïŒå®éã«è©ŠããŠã¿ããšïŒ1床ãã¹ããèœã¡ããšåå®è¡ãããïŒæåã«äžå®ããã£ãð
$ act --watch ïŒäžç¥ïŒ [Python package/build-1] â Failure - Main Test with pytest [Python package/build-2] â Failure - Main Test with pytest [Python package/build-3] â Failure - Main Test with pytest
act --env-file
ãš act --secret-file
ã³ãã³ã
ã¯ãŒã¯ãããŒã«ãç°å¢å€æ°ãããã·ãŒã¯ã¬ããããèšå®ããå ŽåïŒä»¥äžã®ããã« --env-file
ã --secret-file
ãªãã·ã§ã³ã䜿ã£ãŠãã¡ã€ã«ãèªã¿èŸŒããïŒçŽæ¥èšå®ãããªã --env
ã --secret
ãªãã·ã§ã³ã䜿ãããã©ïŒç¹ã«ã·ãŒã¯ã¬ããã¯ãã¡ã€ã«ãèªã¿èŸŒãã®ãè¯ãããïŒ
$ act --env-file my.env $ act --secret-file my.secrets
act pull_request
ãš act schedule
ã³ãã³ã
å®ã¯ act
ã³ãã³ããå®è¡ãããš GitHub ã«å¯Ÿãã push
ã€ãã³ããããªã¬ãŒããã¯ãŒã¯ãããŒãå®è¡ããŠããïŒäŸãã°ïŒãã«ãªã¯ãšã¹ãæã«äžéšç°ãªãã¯ãŒã¯ãããŒãå®è¡ããŠãããããªå Žå㯠act pull_request
ã³ãã³ããå®è¡ãããš pull_request
ã€ãã³ããããªã¬ãŒããã¯ãŒã¯ãããŒãå®è¡ã§ããïŒã¹ã±ãžã¥ãŒã«å®è¡ãããŠãããããªå Žå㯠act schedule
ã³ãã³ããå®è¡ãããš schedule
ã€ãã³ããããªã¬ãŒããã¯ãŒã¯ãããŒãå®è¡ã§ããïŒ
on: push: branches: - master pull_request: - master
ããã¯ãŒã¯ãããŒã®äžã§ github.event.pull_request.*
ãªã©ã®ã€ãã³ãããããã£ã«äŸåããŠããå Žå㯠--eventpath
ãªãã·ã§ã³ãçµã¿åãããïŒè©³ãã㯠Wiki ã® Beginner's guide ã«èŒã£ãŠããïŒ
ãŸãšã
GitHub Actions ã®ã¯ãŒã¯ãããŒãããŒã«ã«ç°å¢ã§å®è¡ã§ãããactãã詊ããâïž
調ã¹ããšãããactã㯠GitHub Blog ã§ã玹ä»ãããŠããïŒ
å®éã«è©ŠããŠã¿ãŠ act ã¯äŸ¿å©ã ã£ããã©ïŒåœç¶ãªãã GitHub Actions ãå®å šåçŸã§ããŠãããã§ã¯ãªãïŒäŸãã°ãå®è¡ã§ããç°å¢ã Ubuntu éå®ããïŒåã«ç޹ä»ãã GitHub Actions ã®ãreusable workflowïŒã¯ãŒã¯ãããŒã®åå©çšïŒæªå¯Ÿå¿ããªã©ã¯æ°ã«ããŠããå¿ èŠããããšæãïŒããšã¯ãŒã¯ãããŒããšã©ãŒã«ãªã£ãŠå詊è¡ã§çŽããªã©äžå®å®ãªæåããã£ãŠïŒããå°ã䜿ã£ãŠã¿ãããšæãð
$ act Error: remote reusable workflows are currently not supported (see https://github.com/nektos/act/issues/826 for updates)