Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Update .github/workflows/code-coverage.yaml in `artichoke/in… #179

Merged

Conversation

lopopolo
Copy link
Member

…taglio`

Managed by Terraform.

Contents

---
name: Code Coverage
"on":
  push:
    branches:
      - trunk
  pull_request:
    branches:
      - trunk
jobs:
  generate:
    name: Generate
    permissions:
      id-token: write
      contents: read
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: 1
      CARGO_NET_GIT_FETCH_WITH_CLI: true
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          override: true
          components: llvm-tools-preview

      - name: Setup grcov
        run: |
          release_url="$(curl \
            -H "Accept: application/vnd.github.v3+json" \
            https://api.github.com/repos/mozilla/grcov/releases | \
            jq -r '.[0].assets | map(select(.browser_download_url | test(".*x86_64-unknown-linux-musl.tar.bz2$"))) | .[0].browser_download_url')"

          curl -sL "$release_url" | sudo tar xvj -C /usr/local/bin/

      - name: Generate coverage
        env:
          LLVM_PROFILE_FILE: "intaglio-%m-%p.profraw"
          RUSTFLAGS: "-C instrument-coverage"
          # Unstable feature: https://github.com/rust-lang/rust/issues/56925
          RUSTDOCFLAGS: "-C instrument-coverage -Z unstable-options --persist-doctests target/debug/doctests"
        run: |
          cargo +nightly test --lib
          cargo +nightly test --doc

      - name: Generate HTML report
        run: grcov intaglio*.profraw --source-dir . --binary-path target/debug -t html --filter covered -o target/coverage

      - name: Generate detailed JSON report
        run: grcov intaglio*.profraw --source-dir . --binary-path target/debug -t covdir --filter covered -o target/coverage/coverage.json

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@master
        if: github.ref == 'refs/heads/trunk'
        with:
          aws-region: us-west-2
          role-to-assume: arn:aws:iam::447522982029:role/gha-intaglio-s3-backup-20220820215201567700000006
          role-session-name: GitHubActionsRustCodeCoverage@intaglio

      - name: Show AWS caller identity
        if: github.ref == 'refs/heads/trunk'
        run: aws sts get-caller-identity

      - name: Upload archives to S3
        if: github.ref == 'refs/heads/trunk'
        run: |
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.svg' --content-type 'image/svg+xml'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.html' --content-type 'text/html'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.json' --content-type 'application/json'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --include '*' --exclude '*.svg' --exclude '*.html' --exclude '*.json'

      - name: Check missed lines
        run: |
          curl -s https://codecov.artichokeruby.org/intaglio/coverage.json | python -c '\
          import sys, json; \
          \
          trunk_coverage = json.loads(sys.stdin.read()); \
          print("On trunk: "); \
          print("coveragePercent =", trunk_coverage["coveragePercent"]); \
          print("linesCovered =", trunk_coverage["linesCovered"]); \
          print("linesMissed =", trunk_coverage["linesMissed"]); \
          print("linesTotal =", trunk_coverage["linesTotal"]); \
          print(""); \
          \
          branch_coverage = json.load(open("target/coverage/coverage.json"))
          print("On PR branch: "); \
          print("coveragePercent =", branch_coverage["coveragePercent"]); \
          print("linesCovered =", branch_coverage["linesCovered"]); \
          print("linesMissed =", branch_coverage["linesMissed"]); \
          print("linesTotal =", branch_coverage["linesTotal"]); \
          print(""); \
          \
          is_ok = branch_coverage["linesMissed"] <= trunk_coverage["linesMissed"]; \
          exit(0) if is_ok else exit(1) \
          '

…taglio`

Managed by Terraform.

## Contents

```
---
name: Code Coverage
"on":
  push:
    branches:
      - trunk
  pull_request:
    branches:
      - trunk
jobs:
  generate:
    name: Generate
    permissions:
      id-token: write
      contents: read
    runs-on: ubuntu-latest
    env:
      RUST_BACKTRACE: 1
      CARGO_NET_GIT_FETCH_WITH_CLI: true
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          override: true
          components: llvm-tools-preview

      - name: Setup grcov
        run: |
          release_url="$(curl \
            -H "Accept: application/vnd.github.v3+json" \
            https://api.github.com/repos/mozilla/grcov/releases | \
            jq -r '.[0].assets | map(select(.browser_download_url | test(".*x86_64-unknown-linux-musl.tar.bz2$"))) | .[0].browser_download_url')"

          curl -sL "$release_url" | sudo tar xvj -C /usr/local/bin/

      - name: Generate coverage
        env:
          LLVM_PROFILE_FILE: "intaglio-%m-%p.profraw"
          RUSTFLAGS: "-C instrument-coverage"
          # Unstable feature: rust-lang/rust#56925
          RUSTDOCFLAGS: "-C instrument-coverage -Z unstable-options --persist-doctests target/debug/doctests"
        run: |
          cargo +nightly test --lib
          cargo +nightly test --doc

      - name: Generate HTML report
        run: grcov intaglio*.profraw --source-dir . --binary-path target/debug -t html --filter covered -o target/coverage

      - name: Generate detailed JSON report
        run: grcov intaglio*.profraw --source-dir . --binary-path target/debug -t covdir --filter covered -o target/coverage/coverage.json

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@master
        if: github.ref == 'refs/heads/trunk'
        with:
          aws-region: us-west-2
          role-to-assume: arn:aws:iam::447522982029:role/gha-intaglio-s3-backup-20220820215201567700000006
          role-session-name: GitHubActionsRustCodeCoverage@intaglio

      - name: Show AWS caller identity
        if: github.ref == 'refs/heads/trunk'
        run: aws sts get-caller-identity

      - name: Upload archives to S3
        if: github.ref == 'refs/heads/trunk'
        run: |
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.svg' --content-type 'image/svg+xml'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.html' --content-type 'text/html'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --exclude '*' --include '*.json' --content-type 'application/json'
          aws s3 sync target/coverage/ s3://artichoke-forge-code-coverage-us-west-2/intaglio/ --delete --sse AES256 --include '*' --exclude '*.svg' --exclude '*.html' --exclude '*.json'

      - name: Check missed lines
        run: |
          curl -s https://codecov.artichokeruby.org/intaglio/coverage.json | python -c '\
          import sys, json; \
          \
          trunk_coverage = json.loads(sys.stdin.read()); \
          print("On trunk: "); \
          print("coveragePercent =", trunk_coverage["coveragePercent"]); \
          print("linesCovered =", trunk_coverage["linesCovered"]); \
          print("linesMissed =", trunk_coverage["linesMissed"]); \
          print("linesTotal =", trunk_coverage["linesTotal"]); \
          print(""); \
          \
          branch_coverage = json.load(open("target/coverage/coverage.json"))
          print("On PR branch: "); \
          print("coveragePercent =", branch_coverage["coveragePercent"]); \
          print("linesCovered =", branch_coverage["linesCovered"]); \
          print("linesMissed =", branch_coverage["linesMissed"]); \
          print("linesTotal =", branch_coverage["linesTotal"]); \
          print(""); \
          \
          is_ok = branch_coverage["linesMissed"] <= trunk_coverage["linesMissed"]; \
          exit(0) if is_ok else exit(1) \
          '
```
@lopopolo lopopolo added the A-build Area: CI build infrastructure. label Aug 21, 2022
@lopopolo lopopolo merged commit 74c7804 into trunk Aug 21, 2022
@lopopolo lopopolo deleted the terraform/update-file-.github-workflows-code-coverage.yaml branch August 21, 2022 16:59
@lopopolo lopopolo restored the terraform/update-file-.github-workflows-code-coverage.yaml branch August 21, 2022 16:59
@lopopolo lopopolo mentioned this pull request Jan 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-build Area: CI build infrastructure.
Development

Successfully merging this pull request may close these issues.

2 participants