{"id":43985185,"url":"https://github.com/veertuinc/anka-vm-github-action","last_synced_at":"2026-02-07T09:34:36.565Z","repository":{"id":38461739,"uuid":"271161106","full_name":"veertuinc/anka-vm-github-action","owner":"veertuinc","description":"A GitHub Action for running commands inside of Anka VMs with host level runners","archived":false,"fork":false,"pushed_at":"2024-09-07T09:01:22.000Z","size":1399,"stargazers_count":10,"open_issues_count":10,"forks_count":1,"subscribers_count":3,"default_branch":"release/v1","last_synced_at":"2025-08-31T03:09:20.489Z","etag":null,"topics":["ci-cd","ios","macos","virtual-machine","virtualization"],"latest_commit_sha":null,"homepage":"https://docs.veertu.com/anka/plugins-and-integrations/controller-less/github-actions/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veertuinc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-06-10T02:47:50.000Z","updated_at":"2025-05-06T13:10:43.000Z","dependencies_parsed_at":"2023-12-14T16:43:22.669Z","dependency_job_id":null,"html_url":"https://github.com/veertuinc/anka-vm-github-action","commit_stats":{"total_commits":44,"total_committers":3,"mean_commits":"14.666666666666666","dds":"0.20454545454545459","last_synced_commit":"b721ed8b9e93df09a48f885e647ea09411fb8a90"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/veertuinc/anka-vm-github-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veertuinc%2Fanka-vm-github-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veertuinc%2Fanka-vm-github-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veertuinc%2Fanka-vm-github-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veertuinc%2Fanka-vm-github-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veertuinc","download_url":"https://codeload.github.com/veertuinc/anka-vm-github-action/tar.gz/refs/heads/release/v1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veertuinc%2Fanka-vm-github-action/sbom","scorecard":{"id":917941,"data":{"date":"2025-08-11","repo":{"name":"github.com/veertuinc/anka-vm-github-action","commit":"b721ed8b9e93df09a48f885e647ea09411fb8a90"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/21 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/codeql-analysis.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/codeql-analysis.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/codeql-analysis.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/codeql-analysis.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:121: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:203: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:238: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:273: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:314: update your workflow using https://app.stepsecurity.io/secureworkflow/veertuinc/anka-vm-github-action/tests.yml/release/v1?enable=pin","Info:   0 out of  15 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/veertuinc/.github/SECURITY.md:1","Info: Found linked content: github.com/veertuinc/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/veertuinc/.github/SECURITY.md:1","Info: Found text in security policy: github.com/veertuinc/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 17 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-7r3h-m5j6-3q42","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T22:01:03.485Z","repository_id":38461739,"created_at":"2025-08-24T22:01:03.486Z","updated_at":"2025-08-24T22:01:03.486Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29191420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-cd","ios","macos","virtual-machine","virtualization"],"created_at":"2026-02-07T09:34:35.845Z","updated_at":"2026-02-07T09:34:36.560Z","avatar_url":"https://github.com/veertuinc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Using the Anka VM GitHub Action\n\n**IMPORTANT: This is not able to run other actions inside of the Anka macOS VMs. We recommend our [anka-actions (up/down)](https://docs.veertu.com/anka/plugins-and-integrations/controller-+-registry/github-actions/) instead which will instead run everything inside of the VM itself.**\n\n1. Install the [Anka Build Virtualization Software](https://github.com/veertuinc/getting-started#initial-setup) onto a macOS host machine. \n    - You'll also need an [Anka Template and Tag](https://ankadocs.veertu.com/docs/getting-started/creating-your-first-vm/#anka-build-license--cloud-understanding-vm-templates-tags-and-disk-usage) (you can use our [getting started repo's create-template script](https://github.com/veertuinc/getting-started#create-vm-templatebash))\n2. Install and ensure you have registered a shared (org level; found under org settings/actions) _or_ project specific self-hosted runner (found under repo settings/actions) with GitHub. These runners need to be running on the host machines you run your Anka Virtualization CLI.\n    \u003e If you want ephemeral VMs to spin up for your CI/CD job, install the github actions runner inside of the node running the Anka Build Virtualization software. **For persistent VMs, install the runner inside of the VM and don't use this action.**\n3. Include a `.github/workflows/{whatever}.yml` in your repo\n4. Make sure to set your mapping key `uses:` to `veertuinc/anka-vm-github-action@vX.X.X`\n5. There are a few required key/values you need to include under `with:`: `anka-vm-template-name` and `commands` (see the Inputs section for more information)\n\n```yaml\nname: My Project's CI/CD\non:\n  push:\n    branches: [ master ]\njobs:\n  ios:\n    runs-on: [self-hosted, macOS]\n    steps:\n      - uses: actions/checkout@v2\n      - name: build\n        id: build\n        uses: veertuinc/anka-vm-github-action@v1.3.3\n        with:\n          anka-vm-template-name: \"11.4\"\n          anka-vm-tag-name: \"vanilla+port-forward-22+brew-git\"\n          anka-run-options: \"--env\"\n          vm-commands: |\n            echo \\\"Starting build process on \\$(hostname)\\\"\n            ./build.sh \u0026\u0026 \\\n            ./cleanup.sh\n          anka-cp-host-paths: |\n            ./\n            /Users/nathanpierce/cache\n          artifact-files: |\n            log.txt\n            build/binaryfile-v1\n```\n\nUsing the above yaml, the Anka GitHub Action will:\n\n1. Clone your project repo to the github action runner's working directory (on the host) (`uses: actions/checkout@v2`)\n2. Pull the Template `11.4` and Tag `vanilla+port-forward-22+brew-git` from the Registry into the host\n3. Prepare an Anka VM using that Template and Tag\n4. Upload the entire host working directory (`./`) and a `/Users/nathanpierce/cache` from the user root on the host into the VM using `anka cp`\n    \u003e If you don't specify anything, `./` will always be uploaded\n5. Execute the `vm-commands` inside of the VM (using `anka run`), ensuring Environment Variables (secrets, or anything else your CI/CD builds/tests need) on the host are passed in with `anka-run-options: \"--env\"`\n6. Pull the `artifact-files` out of the VM using `anka cp` and then upload an artifact/archive with both `./log.txt` and `./build/binaryfile-v1` inside\n\n## Transferring Host files into the VM\n\nIf you need to move files from the host into the VM, see the below points:\n\n- **Anka Virtualization versions \u003e= 2.3:** Starting in Anka 2.3, the automatic mounting of the current directory in the VM was removed. Instead, we now use `anka cp` to upload the cloned working directory contents in by default, or any of the files or folders you specify in `anka-cp-host-paths`.\n\n- **Anka Virtualization versions \u003c= 2.2.3:** When using the legacy mounting method, build and test time can be significantly impacted by the default host -\u003e guest mount performance.\n  - By default, `anka run` mounts the current working directory on the host into the VM. So, any commands that you run will have access to the cloned working directory files.\n  - You can `cd` out of the mounted directory (`/private/var/tmp/ankafs.0`) inside of the VM and then do a git clone of your project's repo. This allows you to then move the files you want (using `vm-commands`) to upload as an artifact back into the mounted directory (`/private/var/tmp/ankafs.0`) so they are available on the host.\n\n# Inputs\n\nThese are defined under the `with:` mapping key inside of your workflow yaml.\n\n#### `anka-vm-template-name` (string) (required)\n- **Name or UUID of your Anka VM Template**\n#### `vm-commands` (multi-line string or regular string) (required)\n- **Commands you wish to run inside of the Anka VM**\n- You can use `vm-commands: |` for multi-line input, OR, you can just use a single line string `vm-commands: \"echo 123\"`\n- You need to escape nested/inner double quotes `\\\"`: `vm-commands: \"echo \\\"123\\\"\"`\n- You need to escape any dollar signs `\\$` so that it doesn't interpolate from the host side. Unless of course you wish to pass in something from the host into the VM.\n- When interpolating, be sure to use the proper amount of escapes for the desired effect:\n    ```bash\n    \\\\\\$(echo $HOME)\n    \\\\\\$(echo \\$HOME)\n    \\\\\\$(echo \\\\\\$HOME)\n    ```\n    will result in...\n    ```bash\n    $(echo /Users/nathanpierce) # HOST level env was interpolated\n    $(echo /Users/anka)         # GUEST level env was interpolated\n    $(echo $HOME)               # No interpolation\n    ```\n#### `anka-vm-tag-name` (string) (optional)\n- **Name of Anka VM Template Tag**\n- Defaults to latest tag\n#### `anka-custom-vm-label` (string) (optional)\n- **Label for the cloned VM that will execute your code**\n- Defaults to `github-actions-${GITHUB_REPOSITORY}-${GITHUB_RUN_NUMBER}-${GITHUB_JOB}-${GITHUB_ACTION}`\n- Your custom label will have a random number added to the end of it to prevent collisions when two VMs are running on the same node with the same label. You can interpolate the ENV we create with `$(eval echo \\$$(echo ${GITHUB_ACTION}_vmLabel))` in your `host-post-commands` to obtain the specific VM name.\n#### `host-pre-commands` (string) (optional)\n- **Commands you wish to run outside on the node (host) BEFORE preparation of and execution inside the VM**\n- You need to escape double quotes `\\\"`\n#### `host-post-commands` (string) (optional)\n- **Commands you wish to run outside on the node (host) AFTER preparation of and execution inside the VM**\n- You need to escape double quotes `\\\"`\n#### `anka-start-options` (string) (optional)\n- **Options set for the anka start execution**\n#### `anka-run-options` (string) (optional)\n- **Options set for anka run execution**\n#### `anka-registry-pull-options` (string) (optional)\n- **Options set for anka registry pull execution**\n#### `host-command-options` (string; js object or JSON) (optional)\n- **Options to use for github actions exec command**\n- **DO NOT** use single quotes to wrap values! Example: `{ cwd: 'This Wont Work' }`\n- Supported options: https://github.com/actions/toolkit/blob/master/packages/exec/src/interfaces.ts\n#### `lock-file-location` (string) (optional)\n- **Location where the pull/clone lock file exists**\n- Defaults to \"/tmp\"\n#### `artifact-files` (multi-line string) (optional)\n- **Each file or folder path you wish to upload and include in the final artifact, newline separated**\n- Symlinks and directories are not supported. You need to archive your directories in order to include them in the artifact.\n- **Anka Virtualization versions \u003c= 2.2.3:** Requires the default host \u003c-\u003e guest mounted volume so that the artifact creation/upload code, running on the host, can see the files you specify and are created inside of the VM.\n#### `artifact-archive-file-name` (string) (optional)\n- **Name of the artifact (archive) that contains all of the files specified in the `artifact-files` input.**\n- Defaults to \"artifact\"\n#### `artifacts-directory-on-host` (string) (optional)\n- **An absolute or relative file path that denotes the root parent directory of the files being uploaded.**\n- Defaults to \"./\"\n#### `skip-registry-pull` (boolean) (optional)\n- **Skip the registry pull; useful if you do not have a registry or it is down but the Template + Tag are already on the node.**\n#### `anka-cp-disable` (boolean) (optional)\n- **Disables the use anka cp command to move files from VM to host (a requirement to upload them as artifacts).**\n- Only useful for Anka Virtualization versions \u003e= 2.3\n- Defaults to false\n#### `anka-cp-host-paths` (multi-line string) (optional)\n- **Each file you wish to upload from the host into the VM, newline separated.**\n- You can use `./` in order to upload the entire current host directory contents into the VM\n- If uploading a symlink to a directory into the VM, the contents of the linked directory will be copied into the VM with the same name as the symlink.\n#### `anka-cp-destination-directory` (string) (optional)\n- **Destination directory on VM you wish to upload the anka-cp-host-paths into.**\n- Defaults to \"./\"\n- We will create the destination directory in the VM if it does not exist\n\n### Outputs\n\nThese are returned to your workflow.yaml so that subsequent steps can use them.\n\n#### `std`\n- The STDOUT and STDERR from the executed commands\n- Includes artifact upload output\n\nUsage:\n\n```yaml\njobs:\n  functional-tests-second-agent:\n    runs-on: [self-hosted, macOS]\n    needs: prep\n    steps:\n      - uses: actions/checkout@v2\n      - name: sleep\n        run: \"sleep 20\"\n      - name: pull test 2\n        id: pull-test-2\n        uses: veertuinc/anka-vm-github-action@v1.3.2\n        with:\n          anka-vm-template-name: \"11.4\"\n          anka-vm-tag-name: \"base:port-forward-22\"\n          vm-commands: |\n            env\n            ls -laht ./\n            ls -laht ../\n            pwd\n            echo \\\"HERE\\\" \u0026\u0026 \\\n            echo \\\"THERE HERE WHERE\\\"\n\n      - name: Check for output\n        run: |\n          PULL_TEST_STD=\"${{ steps.pull-test-2.outputs.std }}\"\n          printf \"pull test std ========================\\n$PULL_TEST_STD\"\n          [[ ! -z \"$(echo \\\\\"$PULL_TEST_STD\\\\\" | head -n 1)\" ]] || exit 50\n          [[ ! -z \"$(echo \\\\\"$PULL_TEST_STD\\\\\" | grep 'Lock file /tmp/registry-pull-lock-10.15.6 found')\" ]] || exit 51\n          true\n```\n\n\n## Developing\n\n### Prepare your environment\n\n```bash\nnpm install\n```\n\n### Testing\n\nThere are two types of tests we perform:\n1. Unit tests (testing functions)\n\n    ```bash\n    npm run test\n    ```\n\n2. Functional testing using a workflow yaml (not in this repo)\n\n### Building\n\n```bash \nnpm run package\n```\n\n### TO-DO\n\n- Dynamically generate tests.yml for template version to update without having to manually do it in multiple places.\n- yaml lists: https://github.com/actions/toolkit/issues/184\n- Figure out how to handle agent lost situations (steps just run indefinitely)\n- Support multiple artifacts and files for those artifacts\n- Better tests with mocks so we can avoid so much functional testing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveertuinc%2Fanka-vm-github-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveertuinc%2Fanka-vm-github-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveertuinc%2Fanka-vm-github-action/lists"}