How much effort does it take to run automated tests on the Azure Examples GitHub repository? Or to ask the question differently, "How do you test the Azure Examples GitHub repository?"
Since the repository is a collection of canned examples that make it possible for you to get up and running with Azure quickly I needed a way to validate that the content written is still working. In comes the `GitHub Workflow Generator` (currently part of this repository).
So what is this generator?
Well, lets take one of the simplest Azure Examples in the repository. The example where we create an Azure Resource Group. The markdown file prior to automation looks like the snippet below:
## Create the Resource Group
To setup the environment variables needed to create the Resource Group execute
the command lines below:
```shell
export RESOURCE_GROUP=azure-examples
export REGION=westus2
```
To create the Resource Group use the following command line:
```shell
az group create --name $RESOURCE_GROUP --location $REGION
```
So how do we automate this? The snippet below puts the automation in the SAME markdown file and voila you can now use the generator to generate the automated testing to validate the 'Create an Azure Resource Group' example automatically.
## Create the Resource Group
To setup the environment variables needed to create the Resource Group execute
the command lines below:
<!-- workflow.cron(0 1 * * 0) -->
<!-- workflow.skip() -->
```shell
export RESOURCE_GROUP=azure-examples
export REGION=westus2
```
<!-- workflow.run()
if [[ -z $RESOURCE_GROUP ]]; then
export RESOURCE_GROUP=azure-examples-$RANDOM
fi
export REGION=westus2
-->
To create the Resource Group use the following command line:
```shell
az group create --name $RESOURCE_GROUP --location $REGION
```
<!-- workflow.run()
export DELETE_AFTER=$(( `date +%s` + 7200))
az group update --name $RESOURCE_GROUP --set tags.'DeleteAfter'="$DELETE_AFTER"
-->
<!-- workflow.directOnly()
export RESULT=$(az group show --name $RESOURCE_GROUP --output tsv --query properties.provisioningState)
az group delete --name $RESOURCE_GROUP --yes || true
if [[ "$RESULT" != Succeeded ]]; then
exit 1
fi
-->
The workflow.cron makes the workflow run on a cron
schedule, the workflow.skip block omits the following
markdown snippets from the workflow, the workflow.run
block is always included and the workflow.directOnly is
used to denote a snippet that should only be included in the
workflow when used directly.
The generator is setup to regenerate the automated tests automatically. For reference the command line that invokes the generator is:
java -jar gwg.jar --baseDirectory ../../.. --outputDirectory ../../../.github/workflows
There is a lot more to the generator, but this is a quick overview. If you are interested drop me a note at mriem (at) manorrock.com.
Enjoy!
Posted December 24th, 2020