Test Linux Binaries after they're built in CI (Cont'd) #503
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build | |
permissions: | |
contents: write | |
actions: read | |
on: | |
pull_request: | |
branches: | |
- master | |
push: | |
tags: | |
- 'v*' | |
jobs: | |
build-windows: | |
runs-on: windows-2022 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install Crystal | |
uses: crystal-lang/install-crystal@v1 | |
with: | |
crystal: 1.13.2 | |
- name: Build SQLite3 static library | |
run: "scripts/sqlite3-static.ps1" | |
- name: Install shards dependencies | |
run: shards install --production | |
- name: Build coverage reporter CLI | |
run: crystal build src\cli.cr -o dist\coveralls --release --static --no-debug --progress | |
- name: Prepare distribution archive | |
run: | | |
cd dist | |
$vsbase = vswhere.exe -products * -property installationPath -latest | |
if (-not $vsbase) { | |
Write-Error "Visual Studio installation not found" | |
exit 1 | |
} | |
$dumpbinPath = Join-Path $vsbase "VC\Tools\MSVC\*\bin\HostX64\x64\dumpbin.exe" | |
$resolvedDumpbin = Get-Item $dumpbinPath | Select-Object -First 1 | |
if (-not $resolvedDumpbin) { | |
Write-Error "dumpbin.exe not found" | |
exit 1 | |
} | |
& $resolvedDumpbin /dependents coveralls.exe | |
tar -acf coveralls-windows.zip coveralls.exe | |
- name: Upload exe | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coveralls-windows.exe | |
path: dist/coveralls.exe | |
if-no-files-found: error | |
- name: Upload zip | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coveralls-windows.zip | |
path: dist/coveralls-windows.zip | |
if-no-files-found: error | |
build-linux: | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install Crystal | |
uses: crystal-lang/install-crystal@v1 | |
with: | |
crystal: 1.13.2 | |
- name: Install shards dependencies | |
run: shards install --production | |
- name: Build cross-compilation container | |
run: make build-xbuild-container | |
- name: Build cross-compiled linux binaries | |
id: build | |
run: make compile-and-strip-all | |
- name: Package linux binaries | |
id: package | |
run: make package | |
- name: Upload linux binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coveralls-linux-binaries | |
path: dist/* | |
if-no-files-found: error | |
test-linux-x86_64: | |
runs-on: ubuntu-latest | |
needs: build-linux | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Download x86_64 binary | |
uses: actions/download-artifact@v4 | |
with: | |
name: coveralls-linux-binaries | |
path: test/ | |
- name: Smoke test x86_64 binary | |
run: | | |
binary=test/coveralls-linux-x86_64 | |
echo $binary | |
chmod +x $binary | |
$binary --version | |
- name: Get Workflow ID for ci.yml | |
id: get_workflow_id | |
run: | | |
curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/repos/${{ github.repository }}/actions/workflows" \ | |
| jq -r '.workflows[] | select(.path == ".github/workflows/ci.yml") | .id' | |
- name: Get latest successful run id for ci.yml | |
id: get_run_id | |
run: | | |
curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
"https://api.github.com/repos/${{ github.repository }}/actions/workflows/${{ steps.get_workflow_id.outputs.workflow-id }}/runs?status=success&branch=${{ github.head_ref }}" \ | |
| jq -r '.workflow_runs[0].id' | |
- name: Echo the run-id | |
run: | | |
echo "Run ID: ${{ steps.get_run_id.outputs.run-id }}" | |
- name: Download latest coverage summary | |
uses: dawidd6/action-download-artifact@v3 | |
with: | |
github_token: ${{secrets.GITHUB_TOKEN}} | |
workflow: ci.yml | |
name: coverage-summary | |
path: ./test/ | |
search_artifacts: true | |
check_artifacts: true | |
if_no_artifact_found: warn | |
- name: Display coverage summary | |
run: cat ./test/coverage_summary.txt | |
# # Download the coverage report generated from ci.yml | |
- name: Download latest coverage summary | |
uses: dawidd6/action-download-artifact@v3 | |
with: | |
github_token: ${{secrets.GITHUB_TOKEN}} | |
workflow: ci.yml | |
name: coverage-report | |
path: ./test/ | |
search_artifacts: true | |
check_artifacts: true | |
if_no_artifact_found: warn | |
- name: List files in ./test/ directory | |
run: ls -al ./test/ | |
# # Download the coverage report generated from ci.yml | |
# - name: Download coverage report | |
# uses: actions/download-artifact@v4 | |
# with: | |
# name: coverage-report | |
# path: ./test/ | |
# run-id: ${{ steps.get_run_id.outputs.run-id }} | |
# github-token: ${{ secrets.GITHUB_TOKEN }} | |
# Report coverage with x86_64 binary | |
- name: Test reporting coverage with x86_64 binary | |
env: | |
COVERALLS_REPO_TOKEN: ${{ github.token }} | |
run: | | |
binary=test/coveralls-linux-x86_64 | |
COVERALLS_SERVICE_NUMBER=rc-x86_64-${{ github.run_id }} $binary report --measure --base-path src/coverage_reporter/ | |
test-linux-aarch64: | |
runs-on: ubuntu-latest | |
needs: build-linux | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Download aarch64 binary | |
uses: actions/download-artifact@v4 | |
with: | |
name: coveralls-linux-binaries | |
path: test/ | |
- name: Smoke test aarch64 binary in QEMU | |
run: | | |
binary=test/coveralls-linux-aarch64 | |
echo $binary | |
chmod +x $binary | |
sudo apt-get update | |
sudo apt-get install -y qemu-user | |
qemu-aarch64 $binary --version | |
- name: Download latest coverage summary | |
uses: dawidd6/action-download-artifact@v3 | |
with: | |
github_token: ${{secrets.GITHUB_TOKEN}} | |
workflow: ci.yml | |
name: coverage-summary | |
path: ./test/ | |
search_artifacts: true | |
check_artifacts: true | |
if_no_artifact_found: warn | |
- name: Display coverage summary | |
run: cat ./test/coverage_summary.txt | |
- name: Report coverage with aarch64 binary | |
env: | |
COVERALLS_REPO_TOKEN: ${{ github.token }} | |
run: | | |
binary=test/coveralls-linux-aarch64 | |
COVERALLS_SERVICE_NUMBER=rc-aarch64-${{ github.run_id }} qemu-aarch64 $binary report --measure --base-path src/coverage_reporter/ | |
# # Report coverage with aarch64 binary | |
# - name: Report coverage with aarch64 binary | |
# env: | |
# COVERALLS_REPO_TOKEN: ${{ github.token }} | |
# run: | | |
# binary=test/coveralls-linux-aarch64 | |
# cd coverage | |
# qemu-aarch64 $binary report --measure --base-path src/coverage_reporter/ | |
release: | |
runs-on: ubuntu-latest | |
needs: [build-windows, build-linux] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
continue-on-error: true | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Fetch tags | |
run: git fetch --force --tags | |
- name: Download binaries | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- name: Prepare files for release | |
run: | | |
mkdir release/ | |
find artifacts/ -type f -exec cp \{} release/ \; | |
cd release/ | |
mv coveralls coveralls-linux | |
mv coveralls.exe coveralls-windows.exe | |
sha256sum * > coveralls-checksums.txt | |
- name: Create Github release | |
env: | |
TAG: ${{ github.ref }} | |
GH_TOKEN: ${{ github.token }} | |
run: > | |
cd release/; | |
gh release create ${TAG} | |
'coveralls-linux-x86_64#coveralls-linux' | |
'coveralls-linux-x86_64.tar.gz#coveralls-linux.tar.gz' | |
'coveralls-linux-x86_64#coveralls-linux-x86_64' \ | |
'coveralls-linux-x86_64.tar.gz#coveralls-linux-x86_64.tar.gz' \ | |
'coveralls-linux-aarch64#coveralls-linux-aarch64' \ | |
'coveralls-linux-aarch64.tar.gz#coveralls-linux-aarch64.tar.gz' \ | |
'coveralls-windows.exe#coveralls-windows.exe' | |
'coveralls-windows.zip#coveralls-windows.zip' | |
'coveralls-checksums.txt#coveralls-checksums.txt' | |
--generate-notes | |
homebrew: | |
runs-on: ubuntu-latest | |
needs: [release] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
continue-on-error: true | |
steps: | |
- name: Update Homebrew formula | |
uses: dawidd6/action-homebrew-bump-formula@v3 | |
with: | |
tap: coverallsapp/coveralls | |
formula: coveralls | |
token: ${{ secrets.HOMEBREW_TOKEN }} |