Skip to content

updates - #155

Merged
mr-git merged 11 commits into
masterfrom
updates
Aug 12, 2026
Merged

updates#155
mr-git merged 11 commits into
masterfrom
updates

Conversation

@mr-git

@mr-git mr-git commented Aug 12, 2026

Copy link
Copy Markdown
Contributor
  • expose types where they are due
  • improve scalacOptions
  • introduce and apply scalafmt
  • update Scala to 2.13.18 and 3.3.8, drop Scala 2.12 support
  • update future-helper to 1.0.7
  • update scalatest to 3.2.20
  • update akka to 2.6.21
  • introduce sbt-version-policy plugin
  • update SBT to 2.0.6, also update related plugins
  • update CI and Release workflows

Summary by CodeRabbit

  • Build & Tooling

    • Upgraded Scala and SBT versions.
    • Added standardized formatting and binary compatibility checks.
    • Updated build commands for formatting, validation, compilation, and testing.
  • CI/CD

    • Simplified continuous integration with reusable workflows.
    • Releases now run when version tags are pushed.
  • Maintenance

    • Improved consistency across supported Scala versions.
    • Modernized project configuration and type handling.
    • No runtime behavior changes to concurrency features.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The project updates Scala and SBT versions, compiler and formatting settings, dependencies, build aliases, source typing, tests, and GitHub Actions workflows. Serial execution behavior remains unchanged according to the summaries.

Changes

Scala build modernization

Layer / File(s) Summary
Build and tooling configuration
.scalafmt.conf, build.sbt, project/build.properties, project/plugins.sbt
The build targets Scala 2.13.18 and 3.3.8, upgrades SBT and plugins, adds version-policy and Scalafmt checks, refreshes dependencies, and updates build aliases.
Serial execution source updates
src/main/scala/com/evolutiongaming/concurrent/serially/*
The source adopts Scala 3 import syntax, explicit types, reformatted declarations, and private actor message definitions.
Typed serial execution tests
src/test/scala/com/evolutiongaming/concurrent/serially/*
Tests add explicit Future and fixture types. Assertions and execution flows remain unchanged.
Reusable CI and release workflows
.github/workflows/ci.yml, .github/workflows/release.yml
CI delegates testing to a reusable workflow. Releases run on v* tag pushes and use reusable release workflow v5.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title "updates" is too generic and does not identify the Scala, build, formatting, dependency, or workflow changes. Replace "updates" with a concise title that identifies the main change, such as the Scala and build-tool modernization.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch updates

Comment @coderabbitai help to get the list of available commands.

@coveralls

coveralls commented Aug 12, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 31589794388

Warning

No base build found for commit 9ccb40e on master.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 92.742%

Details

  • Patch coverage: No coverable lines changed in this PR.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 98
Covered Lines: 93
Line Coverage: 94.9%
Relevant Branches: 26
Covered Branches: 22
Branch Coverage: 84.62%
Branches in Coverage %: Yes
Coverage Strength: 1.31 hits per line

💛 - Coveralls

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Around line 10-11: Update the release workflow reference to the verified
commit b4557d9a82c03596dc2425e19b3cb9a6280a473 instead of the mutable v5 tag. In
the release workflow’s workflow_call.secrets declaration, expose
JFROG_ACCESS_TOKEN and map only that secret to the called workflow; remove any
explicit GITHUB_TOKEN mapping because it is provided automatically.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 47d87c50-af18-4b57-ba58-f8022d063705

📥 Commits

Reviewing files that changed from the base of the PR and between 9ccb40e and 4d78b5c.

📒 Files selected for processing (15)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .scalafmt.conf
  • build.sbt
  • project/build.properties
  • project/plugins.sbt
  • src/main/scala/com/evolutiongaming/concurrent/serially/AsyncVar.scala
  • src/main/scala/com/evolutiongaming/concurrent/serially/Serially.scala
  • src/main/scala/com/evolutiongaming/concurrent/serially/SeriallyAsync.scala
  • src/main/scala/com/evolutiongaming/concurrent/serially/StateVar.scala
  • src/test/scala/com/evolutiongaming/concurrent/serially/AsyncVarSpec.scala
  • src/test/scala/com/evolutiongaming/concurrent/serially/SeriallyAsyncSpec.scala
  • src/test/scala/com/evolutiongaming/concurrent/serially/SeriallySpec.scala
  • src/test/scala/com/evolutiongaming/concurrent/serially/StateVarSpec.scala
  • version.sbt
💤 Files with no reviewable changes (1)
  • version.sbt

Comment on lines +10 to 11
uses: evolution-gaming/scala-github-actions/.github/workflows/release.yml@v5
secrets: inherit

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="evolution-gaming/scala-github-actions"
sha="$(gh api "repos/${repo}/commits/v5" --jq '.sha')"
echo "Resolved v5 SHA: ${sha}"

gh api "repos/${repo}/contents/.github/workflows/release.yml?ref=${sha}" \
  --jq '.content' | tr -d '\n' | base64 --decode |
  grep -nE 'workflow_call|secrets:|secrets\.'

Repository: evolution-gaming/serially

Length of output: 386


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="evolution-gaming/scala-github-actions"
sha="b4557d9a82c03596dc2425e19b3cb9a6280a4739"

echo "Pinned commit:"
gh api "repos/${repo}/commits/${sha}" --jq '.sha'

echo
echo "Reusable workflow:"
gh api "repos/${repo}/contents/.github/workflows/release.yml?ref=${sha}" \
  --jq '.content' | tr -d '\n' | base64 --decode | nl -ba | sed -n '1,90p'

echo
echo "Declared tags and current tag target:"
gh api "repos/${repo}/git/ref/tags/v5" --jq '{type: .object.type, sha: .object.sha}'
gh api "repos/${repo}/commits/v5" --jq '.sha'

Repository: evolution-gaming/serially

Length of output: 280


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="evolution-gaming/scala-github-actions"
sha="b4557d9a82c03596dc2425e19b3cb9a6280a4739"

echo "Reusable workflow:"
gh api "repos/${repo}/contents/.github/workflows/release.yml?ref=${sha}" \
  --jq '.content' | tr -d '\n' | base64 --decode | sed -n '1,90p'

echo
echo "Tag ref:"
gh api "repos/${repo}/git/ref/tags/v5" --jq '{type: .object.type, sha: .object.sha}'

echo
echo "Tag commit resolution:"
gh api "repos/${repo}/commits/v5" --jq '.sha'

Repository: evolution-gaming/serially

Length of output: 2352


🌐 Web query:

GitHub Actions reusable workflow workflow_call secrets inherit explicit secret not declared called workflow secrets context GITHUB_TOKEN

💡 Result:

In GitHub Actions, reusable workflows require explicit configuration to access secrets [1][2]. They do not automatically inherit secrets from the calling workflow, including the GITHUB_TOKEN [1][2][3]. When using secrets: inherit in the calling workflow, the reusable workflow gains access to all secrets available to the caller (including organization, repository, and environment secrets) without requiring each to be individually declared in the caller [4][5][6]. Regarding the specific points raised: 1. Secrets Not Declared: If you do not use secrets: inherit, any secret passed explicitly must be declared in the reusable workflow's on.workflow_call.secrets block [7][2]. If a workflow attempts to reference a secret that has not been declared or inherited, it will be unavailable (resolving to an empty string) [1][2]. 2. Explicit Secret Not Declared: If a caller attempts to pass a secret that the reusable workflow has not declared in its on.workflow_call.secrets, it may cause a parsing or runtime error depending on the configuration [7]. A reusable workflow must explicitly define any secrets it expects to receive unless the inherit keyword is used to pass the entire set [7][1][2]. 3. GITHUB_TOKEN Behavior: The GITHUB_TOKEN is a special, automatically generated token provided by GitHub Actions for each job [3]. Unlike repository or environment secrets, it is not passed via the secrets: inherit or explicit secrets: mapping [3]. It is automatically available to every job in every workflow (including reusable workflows) by default, provided the job has sufficient permissions [3]. You do not need to (and should not) pass it as a secret to a reusable workflow; it is already present in the execution context of the called workflow's jobs [3]. In summary, secrets: inherit provides a blanket way to pass all available secrets to a reusable workflow, while named secrets must be declared in the on.workflow_call block of the called workflow to be accessible [7][1]. The GITHUB_TOKEN is handled independently by the runner and is available without manual secret passing [3].

Citations:


Pin the release workflow and pass only JFROG_ACCESS_TOKEN.

Replace @v5 with the verified commit @b4557d9a82c03596dc2425e19b3cb9a6280a4739. Declare JFROG_ACCESS_TOKEN in the called workflow's workflow_call.secrets, then map only that secret. GITHUB_TOKEN is provided automatically.

🧰 Tools
🪛 zizmor (1.29.0)

[warning] 10-10: secrets unconditionally inherited by called workflow (secrets-inherit): this reusable workflow

(secrets-inherit)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 10 - 11, Update the release
workflow reference to the verified commit
b4557d9a82c03596dc2425e19b3cb9a6280a473 instead of the mutable v5 tag. In the
release workflow’s workflow_call.secrets declaration, expose JFROG_ACCESS_TOKEN
and map only that secret to the called workflow; remove any explicit
GITHUB_TOKEN mapping because it is provided automatically.

Source: Linters/SAST tools

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
27.7% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

@mr-git
mr-git merged commit 44fa1b2 into master Aug 12, 2026
3 of 6 checks passed
@mr-git
mr-git deleted the updates branch August 12, 2026 11:01

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 11-13: Update the CI workflow’s version_policy_check configuration
to track Scala 3 support explicitly: add a linked tracking issue to the TODO and
document that re-enabling the check is a prerequisite for the first Scala
3-supported release, then set version_policy_check to true once that release
condition is met.
- Around line 9-13: Update the reusable CI job declaration under test to grant
the least-privilege GitHub token permission contents: read, with no broader
permissions enabled. Keep the existing uses and with configuration unchanged.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e72da30-36cd-4012-abff-d123baf3b98c

📥 Commits

Reviewing files that changed from the base of the PR and between fd2d86c and 250280f.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • build.sbt
🚧 Files skipped from review as they are similar to previous changes (1)
  • build.sbt

Comment thread .github/workflows/ci.yml
Comment on lines 9 to +13
test:

runs-on: ubuntu-latest

strategy:
matrix:
scala:
- 2.13.5
- 2.12.13

steps:
- uses: actions/checkout@v2

- uses: coursier/cache-action@v5

- name: scala
uses: olafurpg/setup-scala@v10
with:
java-version: openjdk@1.11

- name: build ${{ matrix.scala }}
run: sbt ++${{ matrix.scala }} clean coverage test

- name: test coverage
if: success()
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: sbt ++${{ matrix.scala }} coverageReport coverageAggregate coveralls

- name: slack
uses: homoluctus/slatify@master
if: failure() && github.ref == 'refs/heads/master'
with:
type: ${{ job.status }}
job_name: Build
url: ${{ secrets.SLACK_WEBHOOK }} No newline at end of file
uses: evolution-gaming/scala-github-actions/.github/workflows/ci.yml@dde27b9bd793d41d5aacf8fb74403c9de5da1146 # v6.3.0
# TODO remove after first release with Scala 3 support
with:
version_policy_check: false No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -eu
printf '%s\n' '--- workflow files ---'
git ls-files '.github/workflows/*' '.github/actions/*' | sort
printf '%s\n' '--- caller workflow ---'
cat -n .github/workflows/ci.yml
printf '%s\n' '--- permission and reusable-workflow references ---'
rg -n --hidden --glob '!.git/**' \
  'permissions:|contents:|packages:|id-token:|pull-requests:|actions:|version_policy_check|evolution-gaming/scala-github-actions' \
  .github README.md 2>/dev/null || true
printf '%s\n' '--- repository status ---'
git status --short

Repository: evolution-gaming/serially

Length of output: 1064


🌐 Web query:

evolution-gaming/scala-github-actions v6.3.0 reusable workflow permissions ci.yml

💡 Result:

The evolution-gaming/scala-github-actions repository provides reusable workflows (such as release.yml) to simplify CI/CD for Scala projects [1][2][3]. When integrating these reusable workflows into a local ci.yml or release.yml file, the permissions requirement is governed by standard GitHub Actions security principles [4][5][6]. Key points regarding permissions for these reusable workflows: 1. Inheritance and Security: Reusable workflows run with the permissions explicitly granted at the job level in the calling workflow [4][6]. If you do not define permissions in the calling job, it will inherit the default permissions of the GITHUB_TOKEN [4]. 2. Principle of Least Privilege: Because reusable workflows act like an extension of your own pipeline, you should assign only the minimum permissions necessary [6]. For a release workflow that involves publishing artifacts (often to Artifactory) or creating GitHub releases, the workflow typically requires permissions such as contents: write (for releases) and potentially others depending on the specific tasks performed by the reusable action [4][6]. 3. Permission Downgrading: If you define permissions in both the calling workflow and the reusable workflow, GitHub enforces a strict rule: the called workflow's permissions can only be equal to or more restrictive than the permissions granted by the caller [4][5]. They cannot be elevated [5]. 4. Configuration Example: In your calling workflow (e.g., ci.yml or release.yml), you define permissions at the job level [4][6]: jobs: release: permissions: contents: write # Required if the workflow creates GitHub Releases uses: evolution-gaming/scala-github-actions/.github/workflows/release.yml@v4 secrets: inherit Always check the specific requirements of the version you are using (e.g., v4) [1], as updates to the underlying reusable workflow may change the operations it performs and the associated permission needs [6]. If the reusable workflow fails with a permission error, review the logs to identify which specific scope (e.g., packages, contents) is being denied [6].

Citations:


🏁 Script executed:

#!/bin/bash
set -eu
repo='evolution-gaming/scala-github-actions'
sha='dde27b9bd793d41d5aacf8fb74403c9de5da1146'
tag='v6.3.0'

printf '%s\n' '--- pinned workflow ---'
curl -fsSL "https://raw.githubusercontent.com/$repo/$sha/.github/workflows/ci.yml" | nl -ba

printf '%s\n' '--- permission-related declarations in pinned workflow ---'
curl -fsSL "https://raw.githubusercontent.com/$repo/$sha/.github/workflows/ci.yml" |
  rg -n -C 3 'permissions:|contents:|packages:|id-token:|pull-requests:|actions:|github-token|GITHUB_TOKEN' || true

printf '%s\n' '--- tag ref ---'
ref_json="$(curl -fsSL "https://api.github.com/repos/$repo/git/ref/tags/$tag")"
printf '%s\n' "$ref_json" | jq '{ref, object}'

type="$(printf '%s\n' "$ref_json" | jq -r '.object.type')"
tag_object="$(printf '%s\n' "$ref_json" | jq -r '.object.sha')"
if [ "$type" = tag ]; then
  commit="$(curl -fsSL "https://api.github.com/repos/$repo/git/tags/$tag_object" | jq -r '.object.sha')
else
  commit="$tag_object"
fi
printf 'dereferenced_tag_commit=%s\n' "$commit"

printf '%s\n' '--- commit existence checks ---'
curl -fsSL "https://api.github.com/repos/$repo/commits/$sha" | jq -r '.sha'
curl -fsSL "https://api.github.com/repos/$repo/commits/$commit" | jq -r '.sha'

Repository: evolution-gaming/serially

Length of output: 300


🏁 Script executed:

#!/bin/bash
set -eu
repo='evolution-gaming/scala-github-actions'
sha='dde27b9bd793d41d5aacf8fb74403c9de5da1146'
tag='v6.3.0'

workflow="$(curl -fsSL "https://raw.githubusercontent.com/$repo/$sha/.github/workflows/ci.yml")"
printf '%s\n' '--- pinned workflow ---'
awk '{printf "%5d\t%s\n", NR, $0}' <<<"$workflow"

printf '%s\n' '--- permission-related declarations in pinned workflow ---'
grep -n -C 3 -E 'permissions:|contents:|packages:|id-token:|pull-requests:|actions:|github-token|GITHUB_TOKEN' <<<"$workflow" || true

printf '%s\n' '--- tag ref ---'
ref_json="$(curl -fsSL "https://api.github.com/repos/$repo/git/ref/tags/$tag")"
printf '%s\n' "$ref_json" | jq '{ref, object}'

type="$(printf '%s\n' "$ref_json" | jq -r '.object.type')"
tag_object="$(printf '%s\n' "$ref_json" | jq -r '.object.sha')"
if [ "$type" = tag ]; then
  commit="$(curl -fsSL "https://api.github.com/repos/$repo/git/tags/$tag_object" | jq -r '.object.sha')"
else
  commit="$tag_object"
fi
printf 'dereferenced_tag_commit=%s\n' "$commit"

printf '%s\n' '--- commit existence checks ---'
curl -fsSL "https://api.github.com/repos/$repo/commits/$sha" | jq -r '.sha'
curl -fsSL "https://api.github.com/repos/$repo/commits/$commit" | jq -r '.sha'

Repository: evolution-gaming/serially

Length of output: 9431


Declare least-privilege permissions for the reusable CI job.

The called workflow checks out repository contents. Add contents: read and grant no broader token permissions.

🧰 Tools
🪛 GitHub Check: SonarCloud Code Analysis

[warning] 11-11: Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=evolution-gaming_serially&issues=AZ_1oBAjMsvR0MTPBA0l&open=AZ_1oBAjMsvR0MTPBA0l&pullRequest=155

🪛 zizmor (1.29.0)

[warning] 9-13: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 9 - 13, Update the reusable CI job
declaration under test to grant the least-privilege GitHub token permission
contents: read, with no broader permissions enabled. Keep the existing uses and
with configuration unchanged.

Source: Linters/SAST tools

Comment thread .github/workflows/ci.yml
Comment on lines +11 to +13
# TODO remove after first release with Scala 3 support
with:
version_policy_check: false No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Track and re-enable the version-policy check.

version_policy_check: false disables the version-policy gate introduced by this PR. The TODO has no linked issue or automated release condition.

After Scala 3 support is available, set this value to true. Until then, link a tracking issue and make re-enablement a release prerequisite.

🧰 Tools
🪛 GitHub Check: SonarCloud Code Analysis

[warning] 11-11: Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=evolution-gaming_serially&issues=AZ_1oBAjMsvR0MTPBA0l&open=AZ_1oBAjMsvR0MTPBA0l&pullRequest=155

🪛 zizmor (1.29.0)

[warning] 9-13: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 11 - 13, Update the CI workflow’s
version_policy_check configuration to track Scala 3 support explicitly: add a
linked tracking issue to the TODO and document that re-enabling the check is a
prerequisite for the first Scala 3-supported release, then set
version_policy_check to true once that release condition is met.

Source: Linters/SAST tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants