Skip to content

A safe MkdirAll implementation #86

A safe MkdirAll implementation

A safe MkdirAll implementation #86

Workflow file for this run

name: ci
on:
push:
tags:
- "v*"
branches:
- main
pull_request:
schedule:
- cron: "30 10 * * 0"
jobs:
test-windows:
strategy:
matrix:
go-version:
- "1.21"
- "1.22"
- "^1"
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: mkdir gocoverdir
run: |
# mktemp -pd gocoverdir.XXXXXXXX
function New-TemporaryDirectory {
$parent = [System.IO.Path]::GetTempPath()
do {
[string] $name = [System.Guid]::NewGuid()
$item = New-Item -Path $parent -Name $name -ItemType "directory" -ErrorAction SilentlyContinue
} while (-not $item)
return $item.FullName
}
$GOCOVERDIR = (New-TemporaryDirectory)
echo "GOCOVERDIR=$GOCOVERDIR" >>"$GITHUB_ENV"
- name: unit tests
run: |
$item = New-Item -Path $GOCOVERDIR -Name windows -ItemType "directory"
$GOCOVERDIR = $item.FullName
go test -v -cover -test.gocoverdir="$GOCOVERDIR" ./...
- name: upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ runner.os }}-${{ github.job }}-${{ strategy.job-index }}
path: ${{ env.GOCOVERDIR }}
test-unix:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
go-version:
- "1.21"
- "1.22"
- "^1"
exclude:
# It seems MacOS 1.14 is no longer cached by actions/setup-go.
- os: macos-latest
go-version: "1.14"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: mkdir gocoverdir
run: |
GOCOVERDIR="$(mktemp -pd gocoverdir.XXXXXXXX)"
echo "GOCOVERDIR=$GOCOVERDIR" >>"$GITHUB_ENV"
- name: unit tests
run: |
GOCOVERDIR="$GOCOVERDIR/nonroot"
mkdir -p "$GOCOVERDIR"
go test -v -cover -test.gocoverdir="$GOCOVERDIR" ./...
- name: unit tests (root)
if: ${{ ! startsWith(matrix.os, 'windows-') }}
run: |
GOCOVERDIR="$GOCOVERDIR/root"
mkdir -p "$GOCOVERDIR"
sudo go test -v -cover -test.gocoverdir="$GOCOVERDIR" ./...
- name: upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ runner.os }}-${{ github.job }}-${{ strategy.job-index }}
path: ${{ env.GOCOVERDIR }}
coverage:
runs-on: ubuntu-latest
needs:
- test-windows
- test-unix
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
go-version: "^1"
- name: download all coverage
uses: actions/download-artifact@v4
with:
path: coverage
- name: generate coverage list
run: |
find coverage/
GOCOVERDIRS="$(printf '%s,' coverage/*/* | sed 's|,$||')"
echo "GOCOVERDIRS=$GOCOVERDIRS" >>"$GITHUB_ENV"
FULLCOVERAGE_FILE="$(mktemp fullcoverage.XXXXXXXX)"
echo "FULLCOVERAGE_FILE=$FULLCOVERAGE_FILE" >>"$GITHUB_ENV"
- name: compute coverage
run: go tool covdata percent -i "$GOCOVERDIRS"
- name: compute func coverage
run: go tool covdata func -i "$GOCOVERDIRS"
- name: merge coverage
run: |
go tool covdata textfmt -i "$GOCOVERDIRS" -o "$FULLCOVERAGE_FILE"
go tool cover -html="$FULLCOVERAGE_FILE" -o "$FULLCOVERAGE_FILE.html"
- name: upload merged coverage
uses: actions/upload-artifact@v4
with:
name: fullcoverage-${{ github.job }}
path: ${{ env.FULLCOVERAGE_FILE }}
- name: upload coverage html
uses: actions/upload-artifact@v4
with:
name: fullcoverage-${{ github.job }}.html
path: ${{ env.FULLCOVERAGE_FILE }}.html