fix: check git diff output directly #19
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Dev CI/CD | |
on: | |
push: | |
branches: | |
- develop | |
jobs: | |
# Don't run CI/CD if only README.md is updated | |
check_readme_changes: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v3 | |
- name: Check for README changes | |
id: check-readme-changes | |
run: | | |
# Get the list of changed files between the base and head branches | |
# CHANGED_FILES=$(git diff --name-only ${{ github.base_ref }}...${{ github.head_ref }}) | |
git diff --name-only | |
CHANGED_FILES=$(git diff --name-only) | |
echo ${CHANGED_FILES} | |
# Check if 'README.md' or '.yml' files are the only files changed | |
if [[ $CHANGED_FILES =~ ^(README\.md|.*\.yml)$ && ! $CHANGED_FILES =~ ^(?!.*(README\.md|.*\.yml)).*$ ]]; then | |
echo "Only README.md or .yml files have been updated. Skipping the CI/CD workflow." | |
exit 0 | |
fi | |
echo "Changes to files other than README.md or *.yml detected. Proceeding with the CI/CD workflow." | |
continue-on-error: true | |
test: | |
needs: check_readme_changes | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout branch | |
uses: actions/checkout@v3 | |
# Cache npm dependencies (from GitHub docs) | |
- name: Cache node modules | |
id: cache-npm | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
# npm cache files are stored in `~/.npm` on Linux/macOS | |
path: ~/.npm | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
# If there's a cache miss | |
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} | |
name: List the state of node modules | |
continue-on-error: true | |
run: npm list | |
# Caching process complete | |
- name: Install dependencies | |
run: npm install | |
- name: Lint check | |
run: npm run lint | |
- name: Run tests | |
run: npm run test | |
deploy: | |
needs: test | |
# default action is success() | |
# if: success() | |
runs-on: ubuntu-latest | |
env: | |
MYAPP_UPLOAD_KEY_ALIAS: ${{ secrets.ANDROID_SIGNING_ALIAS }} | |
MYAPP_UPLOAD_STORE_PASSWORD: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }} | |
MYAPP_UPLOAD_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }} | |
steps: | |
# We need to checkout the current branch and install node | |
# dependencies again because every GH Actions job runs on | |
# a seperate runner (VM) | |
- name: Checkout branch | |
uses: actions/checkout@v3 | |
# Cache npm dependencies (from GitHub docs) | |
- name: Cache node modules | |
id: cache-npm | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
# npm cache files are stored in `~/.npm` on Linux/macOS | |
path: ~/.npm | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
# If there's a cache miss | |
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} | |
name: List the state of node modules | |
continue-on-error: true | |
run: npm list | |
# Caching process complete | |
- name: Install dependencies | |
run: npm install | |
# - name: Read Version | |
# id: read-version | |
# run: | | |
# echo "::set-output name=versionCode::$(jq -r '.versionCode' version.json)" | |
# echo "::set-output name=versionName::$(jq -r '.versionName' version.json)" | |
# # echo "::set-output name=versionCode::$(jq -r '.versionCode' version.json)" | |
# # echo "::set-output name=versionName::$(node -p -e "require('./version.json').versionName")" | |
# - name: Increment Version | |
# id: increment-version | |
# run: | | |
# echo "::set-output name=versionCode::$(node -p \"parseInt('${{ steps.read-version.outputs.versionCode }}') + 1\")" | |
# echo "::set-output name=versionName::$(node -p \"'${{ steps.read-version.outputs.versionName }}'.replace(/(\\d+\\.\\d+\\.)(\\d+)/, (_, p1, p2) => p1 + (parseInt(p2) + 1))\")" | |
# # echo "::set-output name=versionCode::$(node -p -e 'parseInt(${ steps.read-version.outputs.versionCode }) + 1')" | |
# # echo "::set-output name=versionName::$(node -p -e "'${{ steps.read-version.outputs.versionName }}'.replace(/(\\d+\\.\\d+\\.)(\\d+)/, (_, p1, p2) => p1 + (parseInt(p2) + 1))")" | |
# - name: Update build.gradle | |
# run: | | |
# sed -i "s/versionCode .*/versionCode ${{ steps.increment-version.outputs.versionCode }}/" android/app/build.gradle | |
# sed -i "s/versionName .*/versionName '${{ steps.increment-version.outputs.versionName }}'/" android/app/build.gradle | |
# - name: Commit and Push Changes | |
# uses: stefanzweifel/git-auto-commit-action@v4 | |
# with: | |
# commit_message: devops - update versionCode and versionName [skip ci] | |
- name: Cache Gradle Wrapper | |
uses: actions/cache@v3 | |
with: | |
path: ~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} | |
- name: Cache Gradle Dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ~/.gradle/caches | |
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} | |
restore-keys: ${{ runner.os }}-gradle-caches- | |
# Start the build process | |
- name: Make Gradlew Executable | |
run: cd android && chmod +x ./gradlew | |
# - name: Generate App APK | |
# run: | | |
# cd android && ./gradlew assembleRelease --no-daemon | |
# - name: Sign generated APK | |
# id: sign_app | |
# uses: r0adkll/sign-android-release@v1 | |
# with: | |
# releaseDirectory: android/app/build/outputs/apk/release | |
# signingKeyBase64: ${{ secrets.ANDROID_SIGNING_KEY }} | |
# alias: ${{ secrets.ANDROID_SIGNING_ALIAS }} | |
# keyStorePassword: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }} | |
# keyPassword: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }} | |
# - name: Check app directory after signing (debug) | |
# run: | | |
# ls -a android/app/build/outputs/apk/release | |
- name: Build Android App Bundle | |
run: cd android && ./gradlew bundleRelease --no-daemon | |
- name: Sign App Bundle | |
id: sign_app | |
uses: r0adkll/sign-android-release@v1 | |
with: | |
releaseDirectory: android/app/build/outputs/bundle/release | |
signingKeyBase64: ${{ secrets.ANDROID_SIGNING_KEY }} | |
alias: ${{ secrets.ANDROID_SIGNING_ALIAS }} | |
keyStorePassword: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }} | |
keyPassword: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: Signed App Bundle | |
path: ${{steps.sign_app.outputs.signedReleaseFile}} | |
- name: Deploy to Play Store (Internal testing) | |
uses: r0adkll/upload-google-play@v1 | |
with: | |
serviceAccountJsonPlainText: ${{ secrets.ANDROID_SERVICE_ACCOUNT }} | |
# The packageName must already exist in the play console account, so make sure you upload a manual apk or aab first through the console | |
# https://github.com/r0adkll/upload-google-play/tree/v1/ | |
packageName: com.thebest.gamchha | |
releaseFiles: ${{steps.sign_app.outputs.signedReleaseFile}} | |
track: internal | |
inAppUpdatePriority: 3 | |
status: draft | |
# userFraction: 0.5 | |
whatsNewDirectory: android/release-notes/ | |
releaseName: v1.0.4 |