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@v3 if: ${{ github.event_name == 'repository_dispatch' }} with: ref: ${{ github.event.client_payload.ref }} - uses: actions/checkout@v3 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@v6 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@567d4149d67f15f52b09796bea6573fc32952783 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 - name: Setup Go 1.x uses: actions/setup-go@v3 with: go-version: ^1.19 id: go - name: Setup Python 3.x uses: actions/setup-python@v4 with: python-version: "3.10" - uses: actions/checkout@v3 if: ${{ github.event_name == 'repository_dispatch' }} with: ref: ${{ github.event.client_payload.ref }} - uses: actions/checkout@v3 if: ${{ github.event_name == 'workflow_dispatch' }} - uses: actions/setup-node@v3 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 'actions@dolthub.com' - 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@v3 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@567d4149d67f15f52b09796bea6573fc32952783 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 }}", "tim@dolthub.com"]' workflowURL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}