Compare commits

...

5 commits
0.1.1 ... main

Author SHA1 Message Date
f244969b1f (patch) Update to Scala version 3.5.1 (#6)
All checks were successful
/ Build and Release Library (push) Successful in 1m53s
Reviewed-on: #6
2024-10-12 02:44:09 +00:00
40436693ef (patch) Fixed coverageOff ordering. (#5)
All checks were successful
/ Build and Release Library (push) Successful in 1m25s
Reviewed-on: #5
2024-04-27 02:04:12 +00:00
b9ca2b5b11 (patch) Minor cleanup and documentation. (#4)
All checks were successful
/ Build and Release Library (push) Successful in 1m24s
Reviewed-on: #4
2024-04-27 01:46:51 +00:00
bea436cfb3 Fixing builds by explicitly disabling coverage. (#3)
All checks were successful
/ Build and Release Library (push) Successful in 1m1s
Reviewed-on: #3
2024-04-26 03:25:02 +00:00
bbe1c4ad36 (norelease) Documentation updates and allowing for no-publish workflows. (#2)
All checks were successful
/ Build and Release Library (push) Successful in 52s
Reviewed-on: #2
2024-04-14 15:20:48 +00:00
9 changed files with 126 additions and 32 deletions

View file

@ -34,12 +34,21 @@ jobs:
export GS_RELEASE_TYPE="minor"
elif [[ "$latest_commit_message" == *"(patch)"* ]]; then
export GS_RELEASE_TYPE="patch"
elif [[ "$latest_commit_message" == *"(docs)"* ]]; then
export GS_RELEASE_TYPE="norelease"
elif [[ "$latest_commit_message" == *"(norelease)"* ]]; then
export GS_RELEASE_TYPE="norelease"
else
export GS_RELEASE_TYPE="patch"
export GS_RELEASE_TYPE="norelease"
fi
echo "GS_RELEASE_TYPE=$GS_RELEASE_TYPE" >> $GITHUB_ENV
echo "Previous Git Tag: $latest_git_tag"
echo "Latest Commit: $latest_commit_message ($GS_RELEASE_TYPE) (SNAPSHOT)"
sbtn -Dsnapshot=true -Drelease="$GS_RELEASE_TYPE" semVerInfo
if [ "$GS_RELEASE_TYPE" = "norelease" ]; then
sbtn -Dsnapshot=true -Drelease="patch" semVerInfo
else
sbtn -Dsnapshot=true -Drelease="$GS_RELEASE_TYPE" semVerInfo
fi
- name: 'Unit Tests and Code Coverage'
run: |
sbtn clean
@ -48,5 +57,12 @@ jobs:
sbtn coverageReport
- name: 'Publish Snapshot'
run: |
sbtn clean
sbtn publish
echo "Testing env var propagation = ${{ env.GS_RELEASE_TYPE }}"
if [ "${{ env.GS_RELEASE_TYPE }}" = "norelease" ]; then
echo "Skipping publish due to GS_RELEASE_TYPE=norelease"
else
sbtn coverageOff
sbtn clean
sbtn compile
sbtn publish
fi

View file

@ -35,26 +35,50 @@ jobs:
export GS_RELEASE_TYPE="minor"
elif [[ "$latest_commit_message" == *"(patch)"* ]]; then
export GS_RELEASE_TYPE="patch"
elif [[ "$latest_commit_message" == *"(docs)"* ]]; then
export GS_RELEASE_TYPE="norelease"
elif [[ "$latest_commit_message" == *"(norelease)"* ]]; then
export GS_RELEASE_TYPE="norelease"
else
export GS_RELEASE_TYPE="patch"
export GS_RELEASE_TYPE="norelease"
fi
echo "GS_RELEASE_TYPE=$GS_RELEASE_TYPE" >> $GITHUB_ENV
echo "Previous Git Tag: $latest_git_tag"
echo "Latest Commit: $latest_commit_message"
echo "Selected Release Type: '$GS_RELEASE_TYPE'"
sbtn -Drelease="$GS_RELEASE_TYPE" semVerInfo
if [ "$GS_RELEASE_TYPE" = "norelease" ]; then
echo "Skipping all versioning for 'norelease' commit."
else
sbtn -Drelease="$GS_RELEASE_TYPE" semVerInfo
fi
- name: 'Unit Tests and Code Coverage'
run: |
sbtn clean
sbtn coverage
sbtn test
sbtn coverageReport
if [ "${{ env.GS_RELEASE_TYPE }}" = "norelease" ]; then
echo "Skipping build/test for 'norelease' commit."
else
sbtn clean
sbtn coverage
sbtn test
sbtn coverageReport
fi
- name: 'Publish Release'
run: |
sbtn clean
sbtn semVerWriteVersionToFile
sbtn publish
if [ "${{ env.GS_RELEASE_TYPE }}" = "norelease" ]; then
echo "Skipping publish for 'norelease' commit."
else
sbtn coverageOff
sbtn clean
sbtn semVerWriteVersionToFile
sbtn publish
fi
- name: 'Create Git Tag'
run: |
selected_version="$(cat .version)"
git tag "$selected_version"
git push origin "$selected_version"
if [ "${{ env.GS_RELEASE_TYPE }}" = "norelease" ]; then
echo "Skipping Git tag for 'norelease' commit."
else
selected_version="$(cat .version)"
git tag "$selected_version"
git push origin "$selected_version"
fi

View file

@ -1,19 +1,72 @@
# gs-hex
[License (Apache 2.0)](./LICENSE)
[GS Open Source](https://garrity.co/oss.html) |
[License (MIT)](./LICENSE)
Hexadecimal conversions for Scala 3. Provides support for standard types.
- [Usage](#usage)
- [Dependency](#dependency)
- [Byte Array Conversion](#byte-array-conversion)
- [Type Classes](#type-classes)
- [Donate](#donate)
## Usage
### Dependency
This artifact is available in the Garrity Software Maven repository.
```scala
externalResolvers +=
"Garrity Software Releases" at "https://maven.garrity.co/releases"
"Garrity Software Releases" at "https://maven.garrity.co/gs"
val GsHex: ModuleID =
"gs" %% "gs-hex-v0" % "0.1.0"
"gs" %% "gs-hex-v0" % "$VERSION"
```
### Byte Array Conversion
This library is based on two functions: `Hex.toHexString(Array[Byte])` and
`Hex.fromHexString(String)`.
```scala
import gs.hex.v0.Hex
val data: Array[Byte] = ???
val encoded: String = Hex.toHexString(data)
val decoded: Option[Array[Byte]] = Hex.fromHexString(encoded)
```
### Type Classes
This library provides `HexEncode[A]` and `HexDecode[A]` for encoding and
decoding arbitrary types as Hexadecimal strings. The types `Array[Byte]`,
`String`, `Boolean`, `Int` and `Long` are supported by default.
#### Example Type Class Implementations
```scala
given HexEncode[Array[Byte]] = new HexEncode[Array[Byte]] {
def toHexString(data: Array[Byte]): String = Hex.toHexString(data)
}
given HexDecode[Array[Byte]] = new HexDecode[Array[Byte]] {
def fromHexString(data: String): Option[Array[Byte]] = Hex.fromHexString(data)
}
```
#### Example Type Class Usage
```scala
def encode[A](data: A)(using HexEncode[A]): String =
Hex.toHexString(dataToBytes(data))
def decode[A](data: String)(using HexDecode[A]): Option[A] =
Hex.fromHexString(data).map(dataFromBytes)
```
## Donate
Enjoy this project or want to help me achieve my [goals](https://garrity.co)?
Consider [Donating to Pat on Ko-fi](https://ko-fi.com/gspfm).

View file

@ -1,4 +1,9 @@
val scala3: String = "3.4.1"
val scala3: String = "3.5.1"
externalResolvers := Seq(
"Garrity Software Mirror" at "https://maven.garrity.co/releases",
"Garrity Software Releases" at "https://maven.garrity.co/gs"
)
ThisBuild / scalaVersion := scala3
ThisBuild / versionScheme := Some("semver-spec")
@ -14,7 +19,7 @@ val sharedSettings = Seq(
lazy val testSettings = Seq(
libraryDependencies ++= Seq(
"org.scalameta" %% "munit" % "1.0.0-M10" % Test
"org.scalameta" %% "munit" % "1.0.1" % Test
)
)

View file

@ -1 +1 @@
sbt.version=1.9.9
sbt.version=1.10.2

View file

@ -28,6 +28,6 @@ externalResolvers := Seq(
"Garrity Software Releases" at "https://maven.garrity.co/gs"
)
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.0.11")
addSbtPlugin("gs" % "sbt-garrity-software" % "0.3.0")
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "2.1.0")
addSbtPlugin("gs" % "sbt-garrity-software" % "0.4.0")
addSbtPlugin("gs" % "sbt-gs-semver" % "0.3.0")

View file

@ -13,8 +13,6 @@ trait HexDecode[A]:
*/
def fromHexString(data: String): Option[A]
extension (data: String) def fromHex(): Option[A] = fromHexString(data)
object HexDecode:
/** Retrieve the [[HexDecode]] instance for the given type.

View file

@ -12,8 +12,6 @@ trait HexEncode[A]:
*/
def toHexString(data: A): String
extension (data: A) def toHex(): String = toHexString(data)
object HexEncode:
/** Retrieve the [[HexEncode]] instance for the given type.

View file

@ -89,15 +89,15 @@ class EncodeDecodeTests extends munit.FunSuite:
data: A
)(
using
HexEncode[A]
): String = data.toHex()
H: HexEncode[A]
): String = H.toHexString(data)
private def decode[A](
data: String
)(
using
HexDecode[A]
): Option[A] = data.fromHex()
H: HexDecode[A]
): Option[A] = H.fromHexString(data)
private def randomByteArray(): Array[Byte] =
val length = Rng.nextInt(MaxLength) + MinLength