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
35 changes: 35 additions & 0 deletions .github/workflows/publish-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Publish Native Android Library

on: workflow_dispatch

jobs:
publish-android:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Grant execute permission for publishing script
run: chmod +x ./scripts/publish-android.sh
- name: Make local props
run: |
cat << EOF > "local.properties"
ossrhUsername=${{ secrets.ANDROID_OSSRH_USERNAME }}
ossrhPassword=${{ secrets.ANDROID_OSSRH_PASSWORD }}
sonatypeStagingProfileId=${{ secrets.ANDROID_SONATYPE_STAGING_PROFILE_ID }}
signing.keyId=${{ secrets.ANDROID_SIGNING_KEY_ID }}
signing.password=${{ secrets.ANDROID_SIGNING_PASSWORD }}
signing.key=${{ secrets.ANDROID_SIGNING_KEY }}
EOF
echo "local.properties file has been created successfully."
- name: Run publish script
working-directory: ./scripts
run: ./publish-android.sh
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

The changes documented here do not include those from the original repository.

## [Unreleased]

### 28-01-2025
- Add `publish-android` workflow to publish library under `io.ionic.libs` in Maven (https://outsystemsrd.atlassian.net/browse/RMET-3983)

## [1.2.0]

### 02-12-2024
Expand Down
16 changes: 16 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ buildscript {
mavenCentral()
}
dependencies {
if (System.getenv("SHOULD_PUBLISH") == "true") {
classpath("io.github.gradle-nexus:publish-plugin:1.1.0")
}
classpath 'com.android.tools.build:gradle:8.7.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jacoco:org.jacoco.core:$jacocoVersion"
Expand All @@ -24,6 +27,11 @@ sonarqube {
}
}

if (System.getenv("SHOULD_PUBLISH") == "true") {
apply plugin: "io.github.gradle-nexus.publish-plugin"
apply from: file("./scripts/publish-root.gradle")
}

apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: "jacoco"
Expand Down Expand Up @@ -90,6 +98,10 @@ android {
testOptions {
unitTests.returnDefaultValues = true
}

publishing {
singleVariant("release")
}
}

repositories {
Expand Down Expand Up @@ -129,4 +141,8 @@ dependencies {
testImplementation 'org.mockito.kotlin:mockito-kotlin:4.0.0'
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.2"
}

if (System.getenv("SHOULD_PUBLISH") == "true") {
apply from: file("./scripts/publish-module.gradle")
}
9 changes: 0 additions & 9 deletions docs/CHANGELOG.md

This file was deleted.

4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.github.outsystems</groupId>
<artifactId>osbarcode-android</artifactId>
<groupId>io.ionic.libs</groupId>
<artifactId>ionbarcode-android</artifactId>
<version>1.2.0</version>
</project>
38 changes: 38 additions & 0 deletions scripts/publish-android.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash

ANDROID_PATH=../
LOG_OUTPUT=./tmp/publish-android.txt
THE_VERSION=`sed -n 's/.*<version>\(.*\)<\/version>.*/\1/p' ../pom.xml`

# Get latest io.ionic:portals XML version info
PUBLISHED_URL="https://repo1.maven.org/maven2/io/ionic/libs/ionbarcode-android/maven-metadata.xml"
PUBLISHED_DATA=$(curl -s $PUBLISHED_URL)
PUBLISHED_VERSION="$(perl -ne 'print and last if s/.*<latest>(.*)<\/latest>.*/\1/;' <<< $PUBLISHED_DATA)"

if [[ "$THE_VERSION" == "$PUBLISHED_VERSION" ]]; then
printf %"s\n\n" "Duplicate: a published version exists for $THE_VERSION, skipping..."
else
# Make log dir if doesnt exist
mkdir -p ./tmp

# Export ENV variable used by Gradle for Versioning
export THE_VERSION
export SHOULD_PUBLISH=true

printf %"s\n" "Attempting to build and publish version $THE_VERSION"
# Publish a release to the Maven repo
"$ANDROID_PATH"/gradlew clean build publishReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --no-daemon --max-workers 1 -b "$ANDROID_PATH"/build.gradle -Pandroid.useAndroidX=true > $LOG_OUTPUT 2>&1
# Stage a version
# "$ANDROID_PATH"/gradlew clean build publishReleasePublicationToSonatypeRepository --no-daemon --max-workers 1 -b "$ANDROID_PATH"/build.gradle -Pandroid.useAndroidX=true > $LOG_OUTPUT 2>&1

echo $RESULT

if grep --quiet "BUILD SUCCESSFUL" $LOG_OUTPUT; then
printf %"s\n" "Success: Published to MavenCentral."
else
printf %"s\n" "Error publishing, check $LOG_OUTPUT for more info! Manually review and release from the Sonatype Repository Manager may be necessary https://s01.oss.sonatype.org/"
cat $LOG_OUTPUT
exit 1
fi

fi
74 changes: 74 additions & 0 deletions scripts/publish-module.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
apply plugin: 'maven-publish'
apply plugin: 'signing'

def LIB_VERSION = System.getenv('THE_VERSION')

task androidSourcesJar(type: Jar) {
archiveClassifier.set('sources')
from android.sourceSets.main.java.srcDirs
from android.sourceSets.main.kotlin.srcDirs
}

artifacts {
archives androidSourcesJar
}

group = 'io.ionic.libs'
version = LIB_VERSION

afterEvaluate {
publishing {
publications {
release(MavenPublication) {
// Coordinates
groupId 'io.ionic.libs'
artifactId 'ionbarcode-android'
version LIB_VERSION

// Two artifacts, the `aar` (or `jar`) and the sources
if (project.plugins.findPlugin("com.android.library")) {
from components.release
} else {
artifact("$buildDir/libs/${project.getName()}-${version}.jar")
}

artifact androidSourcesJar

// POM Data
pom {
name = 'ionbarcode-android'
description = 'Barcode Android Lib'
url = 'https://github.com/OutSystems/OSBarcodeLib-Android'
licenses {
license {
name = 'License'
url = 'https://github.com/OutSystems/OSBarcodeLib-Android/blob/main/LICENSE'
}
}
developers {
developer {
name = 'Ionic'
email = 'hi@ionic.io'
}
}

// Version Control Info
scm {
connection = 'scm:git:github.com:OutSystems/OSBarcodeLib-Android.git'
developerConnection = 'scm:git:ssh://github.com:OutSystems/OSBarcodeLib-Android.git'
url = 'https://github.com/OutSystems/OSBarcodeLib-Android/tree/main'
}
}
}
}
}
}

signing {
useInMemoryPgpKeys(
rootProject.ext["signing.keyId"],
rootProject.ext["signing.key"],
rootProject.ext["signing.password"],
)
sign publishing.publications
}
37 changes: 37 additions & 0 deletions scripts/publish-root.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Create variables with empty default values
ext["signing.keyId"] = ''
ext["signing.key"] = ''
ext["signing.password"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
ext["sonatypeStagingProfileId"] = ''

File secretPropsFile = file('./local.properties')
if (secretPropsFile.exists()) {
// Read local.properties file first if it exists
Properties p = new Properties()
new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) }
p.each { name, value -> ext[name] = value }
} else {
// Use system environment variables
ext["ossrhUsername"] = System.getenv('ANDROID_OSSRH_USERNAME')
ext["ossrhPassword"] = System.getenv('ANDROID_OSSRH_PASSWORD')
ext["sonatypeStagingProfileId"] = System.getenv('ANDROID_SONATYPE_STAGING_PROFILE_ID')
ext["signing.keyId"] = System.getenv('ANDROID_SIGNING_KEY_ID')
ext["signing.key"] = System.getenv('ANDROID_SIGNING_KEY')
ext["signing.password"] = System.getenv('ANDROID_SIGNING_PASSWORD')
}

// Set up Sonatype repository
nexusPublishing {
repositories {
sonatype {
stagingProfileId = sonatypeStagingProfileId
username = ossrhUsername
password = ossrhPassword
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
repositoryDescription = 'OSBarcode Android Lib v' + System.getenv('THE_VERSION')
}