Skip to content

Test Linux Binaries after they're built in CI (Cont'd) #503

Test Linux Binaries after they're built in CI (Cont'd)

Test Linux Binaries after they're built in CI (Cont'd) #503

Workflow file for this run

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 }}