Skip to content

[issue-1056] Setup CI/CD #23

[issue-1056] Setup CI/CD

[issue-1056] Setup CI/CD #23

Workflow file for this run

name: Internal builds
on:
pull_request:
branches: [ "koni-dev", "upgrade-ui" ]
jobs:
build-ios:
name: iOS builds
runs-on: macos-latest
env:
GH_PAT: ${{ secrets.GH_PAT }}
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
KS_PASSWORD: ${{ secrets.KS_PASSWORD }}
NEXTCLOUD_CONFIG: ${{ secrets.NEXTCLOUD_CONFIG }}
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
COMMIT_MESSAGE: ${{ github.event.pull_request.title }}
REF_NAME: ${{ github.ref_name }}
TRANSAK_API_KEY: ${{ secrets.TRANSAK_API_KEY }}
COINBASE_PAY_ID: ${{ secrets.COINBASE_PAY_ID }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- name: Add APP ENV
run: |
cp .env.development.example .env.production
if [ -f .env.production ]; then
sed -i '' "s/^TRANSAK_API_KEY=.*/TRANSAK_API_KEY=$TRANSAK_API_KEY/" .env.production
sed -i '' "s/^COINBASE_PAY_ID=.*/COINBASE_PAY_ID=$COINBASE_PAY_ID/" .env.production
else
echo "TRANSAK_API_KEY=$TRANSAK_API_KEY" >> .env.production
echo "COINBASE_PAY_ID=$COINBASE_PAY_ID" >> .env.production
fi
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Restore node_modules from cache
uses: actions/[email protected]
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn install --frozen-lockfile --network-timeout 300000
- name: Autocheck
run: node ./scripts/autocheck.mjs
- name: Setup Ruby (bundle) Environment
uses: ruby/[email protected]
with:
ruby-version: 2.6
bundler-cache: true
- name: Restore Pods Cache
uses: actions/[email protected]
with:
path: |
ios/Pods
~/Library/Caches/CocoaPods
~/.cocoapods
key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Install Pods
run: cd ios && pod install --repo-update && cd ..
- name: iOS Build Action
uses: yukiarrr/[email protected]
with:
project-path: ios/SubWalletMobile.xcodeproj
export-method: 'ad-hoc'
p12-base64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
certificate-password: ${{ secrets.P12_PASSWORD }}
mobileprovision-base64: ${{ secrets.BUILD_ADHOC_PROVISION_PROFILE_BASE64 }}
code-signing-identity: 'Apple Distribution: CDM SOFTWARE DEVELOPMENT COMPANY LIMITED (ZUZ7T3GQMT)'
team-id: ${{ secrets.APPLE_TEAM_ID }}
workspace-path: ios/SubWalletMobile.xcworkspace
scheme: SubWalletMobile-Production
- name: Prepare Release Notes
id: release-notes
run: |
PR_ID="${{ github.event.number }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_LINK="${{ github.event.pull_request._links.html.href }}"
if [ -z "$PR_ID" ]; then PR_ID="Default branch"; fi
if [ -z "$PR_TITLE" ]; then PR_TITLE="Default commit"; fi
if [ -z "$PR_LINK" ]; then PR_LINK="Default"; fi
RELEASE_NOTES="PR #${PR_ID} - $PR_TITLE - $PR_LINK"
echo "::set-output name=releaseNotes::${RELEASE_NOTES}"
- name: Upload build file
uses: nickwph/firebase-app-distribution-action@v1
with:
app: ${{ secrets.FB_IOS_APP_ID }}
credentials: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
groups: subwallet-team
file: output.ipa
release-notes: ${{ steps.release-notes.outputs.releaseNotes }}
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: 'iOS: Pull request #${{ github.event.number }} - ${{ github.event.pull_request.title }} has been deployed successfully!'
# - name: 'Upload app to TestFlight'
# uses: apple-actions/upload-testflight-build@v1
# with:
# app-path: 'output.ipa'
# issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
# api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }}
# api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
build-android:
name: Android builds
runs-on: macos-latest
env:
GH_PAT: ${{ secrets.GH_PAT }}
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
KS_PASSWORD: ${{ secrets.KS_PASSWORD }}
NEXTCLOUD_CONFIG: ${{ secrets.NEXTCLOUD_CONFIG }}
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
COMMIT_MESSAGE: ${{ github.event.pull_request.title }}
REF_NAME: ${{ github.ref_name }}
TRANSAK_API_KEY: ${{ secrets.TRANSAK_API_KEY }}
COINBASE_PAY_ID: ${{ secrets.COINBASE_PAY_ID }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- name: Add APP ENV
run: |
cp .env.development.example .env.production
if [ -f .env.production ]; then
sed -i '' "s/^TRANSAK_API_KEY=.*/TRANSAK_API_KEY=$TRANSAK_API_KEY/" .env.production
sed -i '' "s/^COINBASE_PAY_ID=.*/COINBASE_PAY_ID=$COINBASE_PAY_ID/" .env.production
else
echo "TRANSAK_API_KEY=$TRANSAK_API_KEY" >> .env.production
echo "COINBASE_PAY_ID=$COINBASE_PAY_ID" >> .env.production
fi
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Restore node_modules from cache
uses: actions/[email protected]
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn install --frozen-lockfile --network-timeout 300000
- name: Autocheck
run: node ./scripts/autocheck.mjs
- uses: actions/setup-java@v1
with:
java-version: '11'
- name: Cache Gradle Wrapper
uses: actions/cache@v2
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
- name: Cache Gradle Dependencies
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-caches-
- name: Make Gradlew Executable
run: cd android && chmod +x ./gradlew
- name: Prepare sign datarun
run: |
echo "${{ secrets.ANDROID_KEY_STORE_BASE64 }}" | base64 --decode > android/app/${{ secrets.MYAPP_UPLOAD_STORE_FILE }}
- name: Generate App APK
run: |
cd android && export ENVFILE=.env.production && ./gradlew assembleRelease -PMYAPP_UPLOAD_STORE_FILE=${{ secrets.MYAPP_UPLOAD_STORE_FILE }} -PMYAPP_UPLOAD_STORE_PASSWORD=${{ secrets.ANDROID_KEY_STORE_PASSWORD }} -PMYAPP_UPLOAD_KEY_PASSWORD=${{ secrets.ANDROID_KEY_PASSWORD }} -PMYAPP_UPLOAD_KEY_ALIAS=${{ secrets.ANDROID_ALIAS }}
- name: Prepare Release Notes
id: release-notes
run: |
PR_ID="${{ github.event.number }}"
PR_TITLE="${{ github.event.pull_request.title }}"
PR_LINK="${{ github.event.pull_request._links.html.href }}"
if [ -z "$PR_ID" ]; then PR_ID="Default branch"; fi
if [ -z "$PR_TITLE" ]; then PR_TITLE="Default commit"; fi
if [ -z "$PR_LINK" ]; then PR_LINK="Default"; fi
RELEASE_NOTES="PR #${PR_ID} - $PR_TITLE - $PR_LINK"
echo "::set-output name=releaseNotes::${RELEASE_NOTES}"
- name: Upload build file
uses: nickwph/firebase-app-distribution-action@v1
with:
app: ${{ secrets.FB_ANDROID_APP_ID }}
credentials: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
groups: subwallet-team
file: android/app/build/outputs/apk/release/app-release.apk
release-notes: ${{ steps.release-notes.outputs.releaseNotes }}
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: 'Android: Pull request #${{ github.event.number }} - ${{ github.event.pull_request.title }} has been deployed successfully!'