Skip to content

bats-windows

bats-windows #5382

name: Test Bats Windows
on:
workflow_dispatch:
inputs:
email:
description: 'Email address to receive bats failure notification'
required: true
default: ''
repository_dispatch:
types: [ bats-windows ]
jobs:
get-files:
name: Get file list
runs-on: ubuntu-22.04
outputs:
files: ${{ steps.get_file_list.outputs.files }}
steps:
- uses: actions/checkout@v4
if: ${{ github.event_name == 'repository_dispatch' }}
with:
ref: ${{ github.event.client_payload.ref }}
- uses: actions/checkout@v4
if: ${{ github.event_name == 'workflow_dispatch' }}
- name: Get file list
id: get_file_list
run: |
files=$(ls *.bats)
SAVEIFS=$IFS
IFS=$'\n'
file_arr=($files)
echo "files=${file_arr[@]}" >> $GITHUB_OUTPUT
IFS=$SAVEIFS
working-directory: ./integration-tests/bats
format-files-output:
name: Format files output
runs-on: ubuntu-22.04
needs: get-files
outputs:
files: ${{ steps.format_files.outputs.files }}
steps:
- name: Format
id: format_files
uses: actions/github-script@v7
env:
FILES: ${{ needs.get-files.outputs.files }}
with:
debug: true
github-token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
script: |
try {
const { FILES } = process.env;
const fileList = FILES.split(" ");
core.setOutput("files", JSON.stringify(fileList));
process.exit(0);
} catch(err) {
console.log("Error:", err);
process.exit(1);
}
test-per-file:
name: Test file
needs: format-files-output
defaults:
run:
shell: bash
runs-on: windows-2019
env:
use_credentials: ${{ secrets.AWS_SECRET_ACCESS_KEY != '' && secrets.AWS_ACCESS_KEY_ID != '' }}
strategy:
matrix:
file: ${{ fromJson(needs.format-files-output.outputs.files) }}
steps:
- name: Conditionally Set ENV VARS for AWS tests
run: |
if [[ $use_credentials == true ]]; then
echo "AWS_SDK_LOAD_CONFIG=1" >> $GITHUB_ENV
echo "AWS_REGION=us-west-2" >> $GITHUB_ENV
echo "DOLT_BATS_AWS_TABLE=dolt-ci-bats-manifests-us-west-2" >> $GITHUB_ENV
echo "DOLT_BATS_AWS_BUCKET=dolt-ci-bats-chunks-us-west-2" >> $GITHUB_ENV
echo "DOLT_BATS_AWS_EXISTING_REPO=aws_remote_bats_tests" >> $GITHUB_ENV
fi
- name: Configure AWS Credentials
if: ${{ env.use_credentials == 'true' }}
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
role-duration-seconds: 3600
- uses: actions/checkout@v4
if: ${{ github.event_name == 'repository_dispatch' }}
with:
ref: ${{ github.event.client_payload.ref }}
- name: Setup Go 1.x
uses: actions/setup-go@v5
with:
go-version-file: go/go.mod
id: go
- name: Setup Python 3.x
uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: actions/checkout@v4
if: ${{ github.event_name == 'workflow_dispatch' }}
- uses: actions/setup-node@v4
with:
node-version: ^16
- name: Create CI Bin
run: |
mkdir -p ./.ci_bin
echo "$(pwd)/.ci_bin" >> $GITHUB_PATH
- name: Install Bats Windows
run: |
git clone https://github.com/bats-core/bats-core.git
cd bats-core
./install.sh $HOME
working-directory: ./.ci_bin
- name: Install wslpath
run: |
choco install wget
wget 'https://raw.githubusercontent.com/laurent22/wslpath/master/wslpath'
chmod 755 wslpath
mv wslpath /usr/bin/
cp /c/tools/php/php /usr/bin/
- name: Install Python Deps
run: |
pip install mysql-connector-python
pip install pandas
pip install pyarrow
- name: Install Dolt
working-directory: ./go
run: |
go build -mod=readonly -o ../.ci_bin/dolt ./cmd/dolt/.
go build -mod=readonly -o ../.ci_bin/remotesrv ./utils/remotesrv/.
go build -mod=readonly -o ../.ci_bin/noms ./store/cmd/noms/.
- name: Setup Dolt Config
run: |
dolt config --global --add user.name 'Dolthub Actions'
dolt config --global --add user.email '[email protected]'
- name: Test file
run: bats --tap ${{ matrix.file }}
working-directory: ./integration-tests/bats
env:
IS_WINDOWS: true
WINDOWS_BASE_DIR: "/d/a"
BATS_TEST_RETRIES: "3"
report-bats-failure:
name: Report Bats Windows Failure via Email
needs: test-per-file
runs-on: ubuntu-22.04
if: always() && (needs.test-per-file.result == 'failure')
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Send Email
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: ./.github/actions/ses-email-action
with:
region: us-west-2
version: ${{ github.ref }}
template: 'BatsWindowsFailureTemplate'
toAddresses: '["${{ github.event.inputs.email }}"]'
workflowURL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Send Email
if: ${{ github.event_name == 'repository_dispatch' }}
uses: ./.github/actions/ses-email-action
with:
region: us-west-2
version: ${{ github.event.client_payload.ref }}
template: 'BatsWindowsFailureTemplate'
toAddresses: '["${{ github.event.client_payload.actor_email }}", "[email protected]"]'
workflowURL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}