Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
b1ce608
Improve hashCode() implementation for Tuple2 (#2803)
pivovarit Aug 28, 2024
022baca
Update README.md - center Vavr's logo (#2807)
pivovarit Sep 5, 2024
37cc672
Upgrade to JUnit 5 (#2804)
reneleonhardt Sep 7, 2024
225f732
Build against jdk 23-ea (#2808)
pivovarit Sep 10, 2024
afb56e7
Build 0.x version with JDK 23-ea (#2809)
pivovarit Sep 10, 2024
707bd08
Configure Dependabot to include 'version/0.x' branch (#2812)
pivovarit Sep 11, 2024
1d93340
Not started Future is now cancellable (#2750) (#2763)
etsinko Sep 11, 2024
afff5c3
Build on JDK23 (#2834)
pivovarit Sep 19, 2024
32cbea7
Define Maven Central release pipeline GitHub Actions job (#2838)
pivovarit Sep 22, 2024
e56b64e
Replace synchronized method/block with reentrant lock (#2842)
KrnSaurabh Sep 25, 2024
762b335
Update README.md (#2844)
pivovarit Sep 25, 2024
5dfeb3d
Bump org.junit.jupiter:junit-jupiter from 5.11.0 to 5.11.1 (#2853)
dependabot[bot] Sep 26, 2024
5018a00
Upgrade Gradle version to 8.10.2 (#2847)
pivovarit Sep 26, 2024
7fe4a23
Update Scala to 3.5 (#2857)
achinaou Sep 29, 2024
5e959cf
Build on JDK23 GA (#2860)
pivovarit Sep 29, 2024
cb64768
Update README.md (#2861)
pivovarit Sep 29, 2024
0ade953
Reintroduce `Try.mapFailure(Function<Throwable, Throwable>)` (#2759)
PratikBhusal Sep 29, 2024
c5fff07
Annotate Try#mapFailure with @SafeVarargs (#2863)
pivovarit Sep 29, 2024
c721c5b
Don't reference ThreadDeath directly due to its future removal (#2879)
pivovarit Oct 3, 2024
e53842b
Fix remaining Java Serialization issues with JDK21 (#2881)
KrnSaurabh Oct 4, 2024
d2efd68
Bump org.junit.jupiter:junit-jupiter from 5.11.1 to 5.11.2 (#2883)
dependabot[bot] Oct 7, 2024
5f6bc09
Define validate JavaDoc build (#2890)
pivovarit Oct 10, 2024
8121e15
Extract doc-lint job to a separate workflow file (#2891)
pivovarit Oct 10, 2024
6a07461
Extract doc-lint job to a separate workflow file (#2891) (#2892)
pivovarit Oct 10, 2024
9175356
Add GitHub Pull Request template (#2899)
pivovarit Oct 11, 2024
b8a2a95
Use -Prelease-sign-artifacts when releasing (#2900)
pivovarit Oct 12, 2024
bdba2dd
Update README.md (#2911)
pivovarit Oct 16, 2024
3ab2077
Update README.md (#2913)
pivovarit Oct 18, 2024
4dc2f6f
Bump org.junit.jupiter:junit-jupiter from 5.11.2 to 5.11.3 (#2915)
dependabot[bot] Oct 22, 2024
47ff6e9
Use new 'vavrjava' ASCII art in README (#2921)
pivovarit Oct 27, 2024
36f6655
Bump codecov/codecov-action from 4 to 5 (#2935)
dependabot[bot] Nov 15, 2024
6ffa02a
Create CODE_OF_CONDUCT.md (#2939)
pivovarit Dec 14, 2024
9163138
Bump org.junit.jupiter:junit-jupiter from 5.11.3 to 5.11.4 (#2941)
dependabot[bot] Dec 17, 2024
5b3b9b6
Bump org.assertj:assertj-core from 3.26.3 to 3.27.0 (#2943)
dependabot[bot] Dec 20, 2024
a32f970
Bump net.researchgate.release from 3.0.2 to 3.1.0 (#2949)
dependabot[bot] Dec 24, 2024
f8bfe52
Enforce package depth with ArchUnit (#2952)
bvkatwijk Dec 30, 2024
23c56a0
Fix CheckedRunnableTest#shouldApplyAnUncheckedFunctionThatThrows (#2954)
bvkatwijk Jan 1, 2025
82bd4ed
Bump org.assertj:assertj-core from 3.27.0 to 3.27.1 (#2958)
dependabot[bot] Jan 2, 2025
7f908db
Add missing test coverage for Peek methods (#2961)
bvkatwijk Jan 4, 2025
5afc4cc
Speed up testing using parallelization (#2962)
bvkatwijk Jan 4, 2025
6761402
Update Copyright template (#2963)
pivovarit Jan 5, 2025
4948d21
Update Copyright to 2025 (#2965)
pivovarit Jan 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
version: 2
updates:
- package-ecosystem: "gradle"
target-branch: "master"
directory: "/"
schedule:
interval: "daily"
time: "02:00"
- package-ecosystem: "maven"
target-branch: "version/0.x"
directory: "/"
schedule:
interval: "daily"
time: "02:00"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "master"
schedule:
interval: "daily"
time: "02:00"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "version/0.x"
schedule:
interval: "daily"
time: "02:00"

10 changes: 10 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!--- remove this section after reading it

Currently, there are two significant branches:
- `master` (represents a stream of work leading to the release of a new major version)
- `version/0.x` (continues 0.10.5 with minor updates and bugfixes)

That means effectively two things:
- you can't do breaking changes in `version/0.x` branch
- it's a good idea to create another Pull Request for compatible changes to `version/0.x` branch
-->
3 changes: 2 additions & 1 deletion .github/workflows/build-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '8', '11', '17']
java: [ '8', '11', '17', '21', '22', '23' ]
architecture: [ 'x64' ]
fail-fast: false
name: Build with JDK ${{ matrix.java }} on ${{ matrix.architecture }}
steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '8', '11', '17' ]
java: [ '8', '11', '17', '21', '23' ]
architecture: [ 'x64' ]
name: Build with JDK ${{ matrix.java }} on ${{ matrix.architecture }}
steps:
Expand All @@ -25,4 +25,4 @@ jobs:
cache: 'gradle'
- uses: gradle/actions/setup-gradle@v4
- run: ./gradlew check --info --warning-mode all
- uses: codecov/codecov-action@v4
- uses: codecov/codecov-action@v5
25 changes: 25 additions & 0 deletions .github/workflows/doclint-version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: doclint
on:
push:
branches:
- version/**
pull_request:
branches:
- version/**

jobs:
doc-lint:
runs-on: ubuntu-latest
name: Validate JavaDocs
steps:
- uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
architecture: 'x64'
cache: 'maven'

- name: Validate JavaDocs
run: mvn javadoc:javadoc
43 changes: 43 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: release
on:
workflow_dispatch:
inputs:
release-tag:
description: 'Version to release'
required: true

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '21' ]
architecture: [ 'x64' ]

name: Release ${{ github.event.inputs.release-tag }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.release-tag }}

- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'oracle'
java-version: ${{ matrix.java }}
architecture: ${{ matrix.architecture }}
cache: 'maven'
server-id: oss.sonatype.org
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE


- name: Release with Maven
run: mvn -B --no-transfer-progress -Psonatype-oss-release -Prelease-sign-artifacts -DskipTests=true deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
MAVEN_OPTS: "--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED"
128 changes: 128 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ _Source: http://users.ece.utexas.edu/~adnan/pike.html_
*
* The MIT License (MIT)
*
* Copyright 2024 Vavr, https://vavr.io
* Copyright 2025 Vavr, https://vavr.io
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ____ ______________ ________________________ __________

The MIT License (MIT)

Copyright 2024 Vavr, https://vavr.io
Copyright 2025 Vavr, https://vavr.io

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
[![GitHub Release](https://img.shields.io/github/release/vavr-io/vavr.svg?style=flat-square)](https://github.com/vavr-io/vavr/releases)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.vavr/vavr/badge.svg?style=flat-square)](http://search.maven.org/#search|gav|1|g:"io.vavr"%20AND%20a:"vavr")
![Maven Central Version](https://img.shields.io/maven-central/v/io.vavr/vavr?versionPrefix=0)
[![Build Status](https://github.com/vavr-io/vavr/actions/workflows/build.yml/badge.svg)](https://github.com/vavr-io/vavr/actions/workflows/build.yml)
[![Code Coverage](https://codecov.io/gh/vavr-io/vavr/branch/master/graph/badge.svg)](https://codecov.io/gh/vavr-io/vavr)
[![Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/vavr-io/vavr)

[![vavr-logo](https://user-images.githubusercontent.com/743833/62367542-486f0500-b52a-11e9-815e-e9788d4c8c8d.png)](http://vavr.io/)
```text
____ ______________ ________________________ __________
\ \/ / \ \/ / __/ / \ \/ / \
\______/___/\___\______/___/_____/___/\___\______/___/\___\
```

Vavr is an object-functional language extension to Java 8 that aims to reduce the number of lines of code and increase code quality.
It provides persistent collections, functional abstractions for error handling, concurrent programming, pattern matching, and much more.

Vavr fuses the power of object-oriented programming with the elegance and robustness of functional programming.
The most interesting part is a feature-rich, persistent collection library that smoothly integrates with Java's standard collections.

Because Vavr does not depend on any libraries (other than the JVM), you can easily add it as a standalone .jar to your classpath.

To stay up to date please follow the [blog](http://blog.vavr.io).
Because Vavr does not depend on any libraries (other than the JVM), you can easily add it as a standalone _.jar_ to your classpath.

### Stargazers over time
[![Stargazers over time](https://starchart.cc/vavr-io/vavr.svg?variant=adaptive)](https://starchart.cc/vavr-io/vavr)
Expand All @@ -36,4 +37,10 @@ See [User Guide](http://docs.vavr.io) and/or [Javadoc](http://www.javadoc.io/doc

### Contributing

Currently, there are two significant branches:
- `master` (represents a stream of work leading to the release of a new major version)
- `version/0.x` (continues 0.10.5 with minor updates and bugfixes)

If you're unsure which one to start with, start with `version/0.x`.

A small number of users have reported problems building Vavr. Read our [contribution guide](./CONTRIBUTING.md) for details.
26 changes: 19 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,16 @@ plugins {
// publishing
id 'maven-publish'
id 'signing'
id 'net.researchgate.release' version '3.0.2'
id 'net.researchgate.release' version '3.1.0'
id 'io.github.gradle-nexus.publish-plugin' version '2.0.0'
}

ext.ammoniteScalaVersion = '2.13'
ext.ammoniteVersion = '2.5.11'
ext.assertjVersion = '3.26.3'
ext.junitVersion = '4.13.2'
ext.ammoniteScalaVersion = '3.5'
ext.ammoniteVersion = '3.0.0'
ext.ammoniteVersionQualifier = '2-6342755f'
ext.archUnitVersion = '1.3.0'
ext.assertjVersion = '3.27.1'
ext.junitVersion = '5.11.4'

// JAVA_VERSION used for CI build matrix, may be provided as env variable
def javaVersion = Integer.parseInt(System.getenv('JAVA_VERSION') ?: '8')
Expand All @@ -57,8 +59,15 @@ repositories {
// -- --

dependencies {
testImplementation "junit:junit:$junitVersion"
testImplementation "org.junit.jupiter:junit-jupiter:$junitVersion"
testImplementation "org.assertj:assertj-core:$assertjVersion"
testImplementation "com.tngtech.archunit:archunit-junit5:$archUnitVersion"
}

tasks.withType(Test).configureEach {
useJUnitPlatform()
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
maxHeapSize = '1G'
}

java {
Expand All @@ -81,7 +90,10 @@ tasks.register('generateSources') {
}
def ammoniteJar = new File(ammoniteDir, "amm-${ammoniteScalaVersion}-${ammoniteVersion}.jar")
if (!ammoniteJar.exists()) {
def ammoniteReleaseUrl = "https://github.com/lihaoyi/Ammonite/releases/download/${ammoniteVersion}/${ammoniteScalaVersion}-${ammoniteVersion}"
def ammoniteAssetName = [ammoniteScalaVersion, ammoniteVersion, ammoniteVersionQualifier]
.findAll { it != null && !it.isEmpty() }
.join('-')
def ammoniteReleaseUrl = "https://github.com/lihaoyi/Ammonite/releases/download/${ammoniteVersion}/${ammoniteAssetName}"
ant.get(src: ammoniteReleaseUrl, dest: ammoniteJar)
}
javaexec {
Expand Down
Loading