Skip to content

Commit

Permalink
Better readme and functional test
Browse files Browse the repository at this point in the history
  • Loading branch information
NorseGaud committed Jun 17, 2020
1 parent b99689c commit 0188a76
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 36 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/functional-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ jobs:
echo "HERE" && \
echo "THERE HERE WHERE"
host-pre-commands: "env && echo PRE COMMANDS"
host-post-commands: "echo POST COMMANDS && echo \"CWD: $(pwd)\""
host-post-commands: |
echo POST COMMANDS
echo \"CWD: $(pwd)\"
anka-start-options: "-f"
anka-run-options: "--workdir /tmp"
host-command-options: |
Expand Down
67 changes: 32 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
## Using the (BETA) Anka GitHub Action

1. Install the [Anka Virtualization CLI](https://github.com/veertuinc/getting-started#initial-setup) onto a macOS host machine. You'll need a [Template and Tag](https://github.com/veertuinc/getting-started#create-templatebash) generated.
1. Install and ensure you have registered a shared (org level; found under org settings/actions) _or_ project specific runner (found under repo settings/actions) with GitHub. These runners need to be running on the host machines you run your Anka Virtualization CLI.
1. 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.
1. Include a `.github/workflows/{whatever}.yml` in your repo
2. Make sure to set your mapping key `uses:` to `veertuinc/[email protected]`
3. There are a few required key/values you need to include under `with:`: `anka-template` and `commands` (see the Inputs section for more information)
Expand All @@ -22,6 +22,7 @@ jobs:
with:
anka-template: "10.15.4"
anka-tag: "base:port-forward-22:xcode11-v1"
anka-run-options: "--env"
commands: |
echo "Starting build process"
./build.sh && \
Expand All @@ -31,61 +32,57 @@ jobs:
build/binaryfile-v1
```
The above example will clone your project repo to the github action runner's working directory, pull the Template `10.15.4` and Tag `base:port-forward-22:xcode11-v1` from the Registry, prepare an Anka VM using that Template and Tag, execute the commands inside of the VM, and then upload artifacts `./log.txt` and `./build/binaryfile-v1` from the current directory (which is mounted by default into the VM).
The above example will clone your project repo to the github action runner's working directory, pull the Template `10.15.4` and Tag `base:port-forward-22:xcode11-v1` from the Registry, prepare an Anka VM using that Template and Tag, execute the commands inside of the VM ensuring Environment Variables are passed in with `anka-run-options: "--env"`, and then upload artifacts `./log.txt` and `./build/binaryfile-v1` from the current directory (which is mounted by default into the VM).

> **Build and Test time can be significantly impacted by the default host -> guest mount. It's suggested that you use `anka-run-options: "--wait-network --wait-time --no-volume"` and then git clone your repo inside of `commands:`.**
**Build and test time can be significantly impacted by the default host -> guest mount.** It's suggested that you use `anka-run-options: "--wait-network --wait-time --no-volume"` and then git clone your repo inside of `commands:`. Or, if you need to upload artifacts (requires they exist on the host), just cd out of the mounted directory (`/private/var/tmp/ankafs.0`) inside of the VM and then do the git clone so you can execute your builds and tests. This allows you to then move the files you want to upload as an artifact back into the mounted directory so they are seen on the host.**

### Inputs

These are defined under the `with:` mapping key inside of your workflow yaml.

#### `anka-template`

#### `anka-template` (string) (required)
- **Name or UUID of your Anka Template**
- **[Required]**

#### `commands`

#### `commands` (multi-line string or regular string) (required)
- **Commands you wish to run inside of the Anka VM**
- **[Required]**
- You can use `commands: |` for multi-line input or a simple string
#### `anka-tag`

- **Name of Anka Tag (optional)**
- defaults to latest tag

#### `anka-custom-vm-label`
- You need to escape double quotes `\"`
- 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.
#### `anka-tag` (string) (optional)
- **Name of Anka Tag**
- Defaults to latest tag
#### `anka-custom-vm-label` (string) (optional)
- **Label for the cloned VM that will execute your code**
- Defaults to `github-actions-${GITHUB_REPOSITORY}-${GITHUB_RUN_NUMBER}-${GITHUB_JOB}-${GITHUB_ACTION}`
- 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

#### `host-pre-commands`
#### `host-pre-commands` (string) (optional)
- **Commands you wish to run outside on the node (host) BEFORE preparation of and execution inside the VM**
#### `host-post-commands`
- You need to escape double quotes `\"`
#### `host-post-commands` (string) (optional)
- **Commands you wish to run outside on the node (host) AFTER preparation of and execution inside the VM**
#### `anka-start-options`
- You need to escape double quotes `\"`
#### `anka-start-options` (string) (optional)
- **Options set for the anka start execution**
#### `anka-run-options`
#### `anka-run-options` (string) (optional)
- **Options set for anka run execution**
#### `anka-registry-pull-options`
#### `anka-registry-pull-options` (string) (optional)
- **Options set for anka registry pull execution**
#### `host-command-options`
#### `host-command-options` (string; js object or JSON) (optional)
- **Options to use for github actions exec command**
- Must be a js object (do not use single quotes to wrap values `{ cwd: 'This Wont Work' }`) or JSON (`{ "cwd": "./pathOnHostToRunAnkaCommands" }`) inside of a string
- Do not use single quotes to wrap values `{ cwd: 'This Wont Work' }`
- Supported options: https://github.com/actions/toolkit/blob/master/packages/exec/src/interfaces.ts
#### `lock-file-location`
#### `lock-file-location` (string) (optional)
- **Location where the pull/clone lock file exists**
- Defaults to /tmp
#### `artifact-files`
- Defaults to "/tmp"
#### `artifact-files` (multi-line string) (optional)
- **Each file you wish to upload and include in the final artifact, newline separated**
#### `artifact-archive-file-name`
- Requires the default host <-> 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.
#### `artifact-archive-file-name` (string) (optional)
- **Name of the artifact (archive) that contains all of the files specified in the `artifact-files` input**
- Defaults to "artifact"
#### `artifacts-root-directory`
#### `artifacts-root-directory` (string) (optional)
- **An absolute or relative file path that denotes the root parent directory of the files being uploaded**
- Defaults to "./"
#### `skip-registry-pull`
#### `skip-registry-pull` (boolean) (optional)
- **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**

### Outputs
Expand All @@ -98,7 +95,8 @@ These are returned to your workflow.yaml so that subsequent steps can use them.

Usage:

```
```yaml
jobs:
functional-tests-second-agent:
runs-on: [self-hosted, macOS]
needs: prep
Expand All @@ -108,7 +106,7 @@ Usage:
run: "sleep 20"
- name: pull test 2
id: pull-test-2
uses: veertuinc/anka-vm-github-action@v1.0.0-beta
uses: veertuinc/anka-vm-github-action@v1.1.0-beta
with:
anka-template: "10.15.4"
anka-tag: "base:port-forward-22"
Expand Down Expand Up @@ -153,5 +151,4 @@ There are two types of tests we perform:
- Support multiple artifacts and files for those artifacts
- Better tests with mocks so we can avoid so much functional testing
- Execution of anka run should happen with `anka run template sh` and then passing into STDIN
- Passing host ENV into VM
- Clone within VM (with skip-clone inputs)
- Clone within VM (with skip-clone inputs)

0 comments on commit 0188a76

Please sign in to comment.