Skip to content

Commit

Permalink
Add release workflows (#252)
Browse files Browse the repository at this point in the history
Add workflows
  • Loading branch information
PoornimaApptentive authored Apr 24, 2024
1 parent d8e60a8 commit 755389c
Show file tree
Hide file tree
Showing 10 changed files with 264 additions and 3 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/complete-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Complete Release

on:
pull_request:
types:
- closed
branches:
- master

jobs:
tag-and-release:
# Run only after release PR branch is merged
if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'releases/')
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Get Tag Name
id: get_tag_name
run: echo "tag_name=v$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT

- name: Create Tag
id: create_tag
uses: rickstaa/action-create-tag@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.get_tag_name.outputs.tag_name }}

- name: Create Release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.get_tag_name.outputs.tag_name }}
name: ${{ steps.get_tag_name.outputs.tag_name }}
draft: false
prerelease: false
body_path: .scripts/changes.md
31 changes: 31 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Publish to npm

on: workflow_dispatch

# push:
# tags:
# - 'v[0-9]+.[0-9]+.[0-9]+*'

jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 20.x

- name: Run install
uses: borales/actions-yarn@v4
with:
cmd: install # will run `yarn install` command

- name: Publish
uses: borales/actions-yarn@v4
with:
cmd: publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # if needed

50 changes: 50 additions & 0 deletions .github/workflows/update-versions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Update Versions

on:
workflow_dispatch:
inputs:
distribution-version:
description: 'Distribution Version of the release'
required: true
type: string
ios-version:
description: 'Version of the iOS SDK to incorporate'
required: true
type: string
android-version:
description: 'Version of the Android SDK to incorporate'
required: true
type: string

jobs:
update-versions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: develop

- name: Update distribution version plus any incidental copies
run: .scripts/update_distribution_version.sh "${{ inputs.distribution-version }}"

- name: Update ApptentiveKit iOS dependency
run: .scripts/update_ios_version.sh apptentive-react-native.podspec "${{ inputs.ios-version }}"

- name: Update ApptentiveKit Android dependency
run: .scripts/update_android_version.sh android/build.gradle "${{ inputs.android-version }}"

- name: Update CHANGELOG.md
id: changelog
run: |
.scripts/add_changelog_entry.sh "${{ inputs.distribution-version }}" "${{ inputs.android-version }}" "${{ inputs.ios-version }}" \
> .scripts/changes.md
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
commit-message: "Update for ${{ inputs.distribution-version }}"
committer: "Alchemer Mobile Team <[email protected]>"
branch: "updates/${{ inputs.distribution-version }}"
base: develop
title: "Update for v${{ inputs.distribution-version }}"
body-path: .scripts/changes.md
46 changes: 46 additions & 0 deletions .scripts/add_changelog_entry.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/usr/bin/env bash

# Fail on first error.
set -e

# Check for correct number of arguments.
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <new.distribution.version> <new.ios.version> <new.android.version>"
exit 1 # Exit the script with an error status
fi

# Create and change to a temporary directory.
mkdir CHANGELOG-update
cd CHANGELOG-update

# Split the CHANGELOG.md file into multiple parts with a pattern matching
# the start of a new version entry.
# The filenames with be 'xaa', 'xab', 'xac', etc.
cat ../CHANGELOG.md | csplit -s - '/^# 20/' {1}

# Create the new version entry's heading and add it to a file whose name
# is alphabetically after the CHANGELOG's preamble.
echo "# $(date -Idate) - v$1" > xx00a
echo "" >> xx00a

# Add the new version entry's body a file whose name is alphabetically
# after the heading.
echo "- Apptentive Android SDK: $2" > xx00b
echo "- Apptentive iOS SDK: $3" >> xx00b
echo "" >> xx00b

# Copy the new entry to print out later.
NEW_ENTRY=$(cat xx00b)

# Reassebmble the parts of the changelog into a local copy.
cat $(ls -1 | sort) > foo.md

# Move the local copy of the changelog to the original location.
mv foo.md ../CHANGELOG.md

# Clean up the temporary directory.
rm x*
cd ..
rmdir CHANGELOG-update

echo "$NEW_ENTRY"
2 changes: 2 additions & 0 deletions .scripts/changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Apptentive Android SDK: 6.1.0
- Apptentive iOS SDK: 6.2.2
25 changes: 25 additions & 0 deletions .scripts/update_android_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env bash

# Fail on first error.
set -e

# Check for correct number of arguments.
if [ $# -ne 2 ]; then
echo "Usage: $0 <build.gradle_filename> <new.apptentive-kit-android.version>"
exit 1
fi

dependency_name="com.apptentive:apptentive-kit-android"
new_version="$2"
build_gradle_file="$1"

# Check if the build.gradle file exists
if [ ! -f "$build_gradle_file" ]; then
echo "Error: $build_gradle_file does not exist."
exit 1
fi

# Use sed to update the version in the podspec file
sed -i "s/implementation '$dependency_name:[^']*'/implementation '$dependency_name:$new_version'/" "$build_gradle_file"

echo "Updated $dependency_name to version $new_version in $build_gradle_file."
43 changes: 43 additions & 0 deletions .scripts/update_distribution_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env bash

# This script should update any incidental copies of the
# "single source of truth" version, e.g. in package.json.
# It will be different for each project.

# Fail on first error.
set -e

# Check for correct number of arguments.
if [ $# -ne 1 ]; then
echo "Usage: $0 <new.distribution.version>"
exit 1
fi

new_version="$1"
package_json="package.json"

# Check if the podspec file exists
if [ ! -f "$package_json" ]; then
echo "Error: $package_json does not exist."
exit 1
fi

version_script=".version=\"$new_version\""
yq -iP $version_script "$package_json" -o json

echo "Updated version to $new_version in $package_json."

podspec_file="apptentive-react-native.podspec"

# Check if the podspec file exists
if [ ! -f "$podspec_file" ]; then
echo "Error: $podspec_file does not exist."
exit 1
fi

# Use sed to update the version in the podspec file
sed -i "s/s.version\( *\)= *\"[^\"]*\"/s.version\1= \"$new_version\"/" "$podspec_file"

echo "Updated version to $new_version in $podspec_file."

# React native code reads version from package.json at runtime
25 changes: 25 additions & 0 deletions .scripts/update_ios_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env bash

# Fail on first error.
set -e

# Check for correct number of arguments.
if [ $# -ne 2 ]; then
echo "Usage: $0 <podspec_filename> <new.ApptentiveKit.version>"
exit 1
fi

dependency_name="ApptentiveKit"
new_version="$2"
podspec_file="$1"

# Check if the podspec file exists
if [ ! -f "$podspec_file" ]; then
echo "Error: $podspec_file does not exist."
exit 1
fi

# Use sed to update the version in the podspec file
sed -i "s/s.dependency '$dependency_name', '[^']*'/s.dependency '$dependency_name', '~> $new_version'/" "$podspec_file"

echo "Updated $dependency_name to version $new_version in $podspec_file."
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

// Apptentive
implementation 'com.apptentive:apptentive-kit-android:6.1.0'
implementation 'com.apptentive:apptentive-kit-android:6.7.0'
}

if (isNewArchitectureEnabled()) {
Expand Down
4 changes: 2 additions & 2 deletions apptentive-react-native.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ Pod::Spec.new do |s|
s.license = package["license"]
s.authors = package["author"]

s.platforms = { :ios => "11.0" }
s.platforms = { :ios => "13.0" }
s.source = { :git => "https://github.com/apptentive/apptentive-react-native.git", :tag => "v#{s.version}" }

s.source_files = "ios/**/*.{h,m,mm,swift}"

s.dependency 'ApptentiveKit', '~> 6.2.0'
s.dependency 'ApptentiveKit', '~> 6.7.0'
s.dependency "React-Core"
end

0 comments on commit 755389c

Please sign in to comment.