CircleCI License: MIT

scala-iso

Scala library for ISO enums

libraryDependencies += "io.bartholomews" %% "scala-iso" % "0.2.0"

Scala 3

Maven Central

Scala 2.13

Maven Central

CountryCodeAlpha2 is a StringEnum (using enumeratum on the two-digits ISO string)

import io.bartholomews.iso.CountryCodeAlpha2
import io.circe._
import io.circe.syntax._

val italy: CountryCodeAlpha2 = CountryCodeAlpha2.ITALY

implicit val encoder: Encoder[CountryCodeAlpha2] = c => Json.fromString(c.value)
implicit val decoder: Decoder[CountryCodeAlpha2] = Decoder.decodeString.emap(str =>
  CountryCodeAlpha2.values.find(_.value == str).toRight(s"Invalid ISO_3166-1 code: [$str]")
)

assert(italy.asJson == Json.fromString("IT"))
assert("IT".asJson.as[CountryCodeAlpha2].map(_.name) == Right("Italy"))

LanguageCode is a StringEnum (using enumeratum on the two-digits ISO string)

import io.bartholomews.iso.LanguageCode
import io.circe._
import io.circe.syntax._

val italy: LanguageCode = LanguageCode.ITALIAN

implicit val encoder: Encoder[LanguageCode] = c => Json.fromString(c.value)
implicit val decoder: Decoder[LanguageCode] = Decoder.decodeString.emap(str =>
  LanguageCode.values
    .find(_.value == str)
    .toRight(s"Invalid ISO_639 code: [$str]")
)

assert(italy.asJson == Json.fromString("it"))
assert("it".asJson.as[LanguageCode].map(_.name) == Right("Italian"))

CircleCI deployment

Verify local configuration

https://circleci.com/docs/2.0/local-cli/

circleci config validate

CI/CD Pipeline

This project is using sbt-ci-release plugin:

  • Every push to master will trigger a snapshot release.

  • In order to trigger a regular release you need to push a tag:

    ./scripts/release.sh v?.?.?
  • If for some reason you need to replace an older version (e.g. the release stage failed):

    TAG=v?.?.?
    git push --delete origin ${TAG} && git tag --delete ${TAG} \
    && ./scripts/release.sh ${TAG}