Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "monthly"
101 changes: 21 additions & 80 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,94 +3,35 @@ name: Build
on:
workflow_dispatch:
push:
paths-ignore:
- 'README.md'

jobs:
build:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci skip]')"
if: github.event_name != 'push' || startsWith(github.ref, 'refs/tags/') == false
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3

- name: Skip duplicates and docs
id: skip
uses: fkirc/skip-duplicate-actions@v4
with:
fetch-depth: 0
- name: Validate Gradle Wrapper
paths_ignore: '["**/README.md", "LICENSE", ".gitignore", ".editorconfig", ".idea/**"]'

- name: Validate gradle wrapper
if: steps.skip.outputs.should_skip != 'true'
uses: gradle/wrapper-validation-action@v1
- name: Parse Changelog Entry
id: changelog
uses: coditory/changelog-parser@v1
- name: Get last version
id: lasttag
shell: bash
run: echo ::set-output name=version::$(git describe --abbrev=0 --tags --match 'v[0-9]*' | cut -c2-)
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Gradle
uses: actions/cache@v2

- name: Setup JDK
if: steps.skip.outputs.should_skip != 'true'
uses: actions/setup-java@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: ${{ runner.os }}-gradle
- name: Build with Gradle
java-version: 17
cache: gradle
distribution: temurin

- name: Build with gradle
if: steps.skip.outputs.should_skip != 'true'
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: ./gradlew build jacocoTestReport coveralls --scan
- name: Publish Reports Artifact
uses: actions/upload-artifact@v2
if: always()
with:
name: Reports
path: build/reports
- name: Release
if: "github.ref == 'refs/heads/master' && steps.changelog.outputs.version != steps.lasttag.outputs.version"
env:
PREV_VERSION: ${{ steps.lasttag.outputs.version }}
NEXT_VERSION: ${{ steps.changelog.outputs.version }}
shell: bash
run: |
git config user.name "Coditory CI"
git config user.email "Coditory CI <admin@coditory.com>"
if [ -n "$PREV_VERSION" ]; then
declare -r ESC_PREV_VERSION="${PREV_VERSION//./\\.}"
sed -i "s|^ *version *= *${ESC_PREV_VERSION} *$|version=${NEXT_VERSION}|" gradle.properties
sed -i "s|${ESC_PREV_VERSION}|${NEXT_VERSION}|" README.md
if [ -n "$(git status --porcelain)" ]; then
git add -A
git commit -a -m "Release v${NEXT_VERSION}" -m "[ci-skip]"
git push origin master
fi
fi
git tag -f "v${NEXT_VERSION}"
git push origin --tags
- name: Publish Snapshot
if: "github.ref != 'refs/heads/master'"
env:
PREV_VERSION: ${{ steps.lasttag.outputs.version }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: ./gradlew publishToSonatype -Pversion="${PREV_VERSION}-${GITHUB_REF#refs/heads/}-SNAPSHOT" -Ppublish
- name: Publish Release
if: "github.ref == 'refs/heads/master' && steps.changelog.outputs.version != steps.lasttag.outputs.version"
env:
NEXT_VERSION: ${{ steps.changelog.outputs.version }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -Pversion=$NEXT_VERSION -Ppublish
- name: Publish GitHub Release
if: "github.ref == 'refs/heads/master' && steps.changelog.outputs.version != steps.lasttag.outputs.version"
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body: ${{ steps.changelog.outputs.description }}
tag_name: v${{ steps.changelog.outputs.version }}
release_name: Release v${{ steps.changelog.outputs.version }}
run: ./gradlew build
174 changes: 174 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
name: Release

on:
workflow_dispatch:
inputs:
version:
type: string
description: |
Release version in semantic format (like: 1.2.3).
Default: a version with incremented patch number.
required: false
publish:
type: choice
description: Artifact publication.
options:
- AUTO
- SKIP
- RELEASE
- SNAPSHOT
required: true
default: AUTO
release:
types: [ published ]
workflow_run:
workflows: [ Build ]
types: [ completed ]
branches: [ master ]

jobs:
release:
runs-on: ubuntu-latest
if: |
github.event_name != 'workflow_run'
|| (github.event.workflow_run.conclusion == 'success' && contains(github.event.workflow_run.head_commit.message, '[ci release]'))
steps:
- name: Validate build succeeded
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
declare -r BUILD_SUCCESS="$(gh api \
-H "Accept: application/vnd.github+json" \
/repos/${{ github.repository }}/actions/runs?status=success\&head_sha=${{ github.sha }} \
| jq 'limit(1; .workflow_runs[] | select(.name == "Build" and .conclusion == "success"))')"
if [ -z "$BUILD_SUCCESS" ]; then
echo "Commit did not pass Build!"
exit 1
fi

- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Get versions
id: versions
env:
NEXT_INPUT_VERSION: ${{ inputs.version }}
TAG_NAME: ${{ github.event.release.tag_name }}
run: |
declare -r GIT_VERSION="$(git tag -l 'v[0-9]*.[0-9]*.[0-9]*' | tail -n 1 | cut -c2-)"
declare -r VERSION=${GIT_VERSION:-0.0.0}
declare -r MAJOR="$(echo "$VERSION" | cut -d. -f1)"
declare -r MINOR="$(echo "$VERSION" | cut -d. -f2)"
declare -r PATCH="$(echo "$VERSION" | cut -d. -f3)"
declare -r NEXT_TAG_VERSION="$([[ "$TAG_NAME" =~ v.* ]] \
&& (echo "$TAG_NAME" | cut -c2-) \
|| echo "$TAG_NAME")"
declare -r NEXT_MANUAL_VERSION="${NEXT_INPUT_VERSION:-$NEXT_TAG_VERSION}"
declare -r NEXT_PATCH_VERSION="$MAJOR.$MINOR.$(( $PATCH + 1 ))"
declare -r NEXT_VERSION="${NEXT_MANUAL_VERSION:-$NEXT_PATCH_VERSION}"
echo ::set-output name=version::$VERSION
echo ::set-output name=next_version::$NEXT_VERSION
echo -e "VERSION: $VERSION\nNEXT_VERSION: $NEXT_VERSION"

- name: Update version in README (master only)
if: |
github.event_name != 'release'
&& github.ref == 'refs/heads/master'
&& inputs.publish != 'SNAPSHOT'
env:
PREV_VERSION: ${{ steps.versions.outputs.version }}
NEXT_VERSION: ${{ steps.versions.outputs.next_version }}
run: |
git config user.name "Coditory CI"
git config user.email "Coditory CI <admin@coditory.com>"
declare -r ESC_PREV_VERSION="${PREV_VERSION//./\\.}"
echo "Changing: $PREV_VERSION -> $NEXT_VERSION"
sed -i "s|${ESC_PREV_VERSION}|${NEXT_VERSION}|" README.md
if [ -n "$(git status --porcelain)" ]; then
git add -A
git commit -a -m "Update version in README.md"
git push origin master
else
echo "Nothing changed. Skipping commit."
fi

- name: Setup JDK
if: inputs.publish != 'SKIP'
uses: actions/setup-java@v3
with:
java-version: 17
cache: gradle
distribution: temurin

- name: Publish release
if: |
github.event_name == 'release'
|| github.event_name == 'workflow_run'
|| inputs.publish == 'RELEASE'
|| (inputs.publish == 'AUTO' && github.ref == 'refs/heads/master')
env:
NEXT_VERSION: ${{ steps.versions.outputs.next_version }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: |
./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository -Pversion=$NEXT_VERSION -Ppublish --info
echo "Published release: $NEXT_VERSION"

- name: Generate release notes
id: notes
if: |
github.event_name != 'release'
&& github.ref == 'refs/heads/master'
&& inputs.publish != 'SNAPSHOT'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PREV_VERSION: ${{ steps.versions.outputs.version }}
NEXT_VERSION: ${{ steps.versions.outputs.next_version }}
run: |
declare -r NOTES="$(gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
/repos/${{ github.repository }}/releases/generate-notes \
-f tag_name="v$NEXT_VERSION" \
-f target_commitish='master' \
-f previous_tag_name="v$PREV_VERSION" \
| jq -r '.body')"
declare -r ESCAPED="${NOTES//$'\n'/'%0A'}"
echo ::set-output name=notes::$ESCAPED

- name: Create github release (master only)
if: |
github.event_name != 'release'
&& github.ref == 'refs/heads/master'
&& inputs.publish != 'SNAPSHOT'
uses: ncipollo/release-action@v1
with:
allowUpdates: true
body: ${{ steps.notes.outputs.notes }}
draft: ${{ inputs.publish == 'SKIP' }}
tag: v${{ steps.versions.outputs.next_version }}
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "build/libs/*.jar"

- name: Publish snapshot
if: |
github.event_name == 'workflow_dispatch'
&& (
inputs.publish == 'SNAPSHOT'
|| inputs.publish == 'AUTO' && github.ref != 'refs/heads/master'
)
env:
NEXT_VERSION: ${{ steps.versions.outputs.next_version }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
run: |
declare -r MIDDLE="$([ "$GITHUB_REF" == "refs/heads/master" ] && echo "" || echo "-${GITHUB_REF#refs/heads/}")"
./gradlew publishToSonatype -Pversion="${NEXT_VERSION}${MIDDLE}-SNAPSHOT" -Ppublish
echo "Published snapshot: ${NEXT_VERSION}${MIDDLE}-SNAPSHOT"

5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Quark Context

[![Build Status](https://github.com/coditory/quark-context/workflows/Build/badge.svg?branch=master)](https://github.com/coditory/quark-context/actions?query=workflow%3ABuild+branch%3Amaster)
[![Coverage Status](https://coveralls.io/repos/github/coditory/quark-context/badge.svg?branch=master)](https://coveralls.io/github/coditory/quark-context?branch=master)
[![Build](https://github.com/coditory/quark-context/actions/workflows/build.yml/badge.svg)](https://github.com/coditory/quark-context/actions/workflows/build.yml)
[![Coverage Status](https://coveralls.io/repos/github/coditory/quark-context/badge.svg)](https://coveralls.io/github/coditory/quark-context)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.coditory.quark/quark-context/badge.svg)](https://mvnrepository.com/artifact/com.coditory.quark/quark-context)

> Quark Context is a lightweight and single purpose java library for loading and manipulating configurations
Expand Down
18 changes: 7 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,20 @@ plugins {
id 'jacoco'
id 'signing'
id 'com.github.kt3k.coveralls' version '2.12.0'
id 'com.coditory.build' version '0.1.12'
id 'com.coditory.build' version '0.1.18'
id 'io.github.gradle-nexus.publish-plugin' version '1.1.0' apply false
}

group = 'com.coditory.quark'
description = 'Coditory Quark Configuration Library'

dependencies {
api 'org.slf4j:slf4j-api:1.7.30'
api 'org.jetbrains:annotations:16.0.2'
testImplementation 'com.coditory.quark:quark-config:0.1.2'
testImplementation 'ch.qos.logback:logback-classic:1.2.3'
testImplementation 'org.spockframework:spock-core:2.0-M5-groovy-3.0'
testImplementation 'org.skyscreamer:jsonassert:1.5.0'
}

java {
sourceCompatibility = JavaVersion.VERSION_11
api 'org.slf4j:slf4j-api:2.0.0'
api 'org.jetbrains:annotations:23.0.0'
testImplementation 'com.coditory.quark:quark-config:0.1.3'
testImplementation 'ch.qos.logback:logback-classic:1.4.0'
testImplementation 'org.spockframework:spock-core:2.2-groovy-4.0'
testImplementation 'org.skyscreamer:jsonassert:1.5.1'
}

if (project.hasProperty('publish')) {
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading