Skip to content

Template configuration for KMM project #109

Template configuration for KMM project

Template configuration for KMM project #109

name: Template configuration for KMM project
on:
workflow_dispatch:
inputs:
package_name:
description: 'Input package name for project'
required: true
type: string
default: 'none'
ui:
description: 'Select UI configuration'
required: true
default: 'compose'
type: choice
options:
- compose
- compose_swift_ui
di:
description: 'Select Di framework'
required: false
type: choice
default: 'none'
options:
- none
- koin
networking:
description: 'Select Networking framework'
required: false
type: choice
default: 'none'
options:
- none
- ktor
- graphql
navigation:
description: 'Select Navigation framework'
required: false
type: choice
default: 'none'
options:
- none
- compose_navigation
- voyager_navigation
view_model:
description: 'Select ViewModel implementation'
required: false
type: choice
default: 'none'
options:
- none
- decompose
- view_model
- voyager_screen_model
local_storage:
description: 'Select framework for local storage'
required: false
type: choice
default: 'none'
options:
- none
- sql_delight
- realm
local_preferences:
description: 'Select framework for local preferences'
required: false
type: choice
default: 'none'
options:
- none
- multiplatform_settings
linter:
description: 'Select static analysis tool'
required: false
type: choice
default: 'none'
options:
- none
- detekt
jobs:
template_generation:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- name: Install latest Git
run: sudo apt-get update && sudo apt-get install -y git
- name: Making scripts runnable
run: chmod +x scripts/*.sh
- name: Package name validation
run: |
scripts/package_name_validation.sh ${{ github.event.inputs.package_name }}
- name: Fetch all branches
run: git fetch --all
- name: Git configuration
run: |
git config user.name "GitHub Action"
git config user.email "[email protected]"
- name: Creating kmm_template branch
run: |
git checkout ${{ github.event.inputs.ui }}
git checkout -b kmm_template
- name: Merge UI branch
run: |
git merge -m "Merge message" master --allow-unrelated-histories || {
git add .
git commit -m "Fixed merge conflicts"
}
- name: Merge DI branch
if: github.event.inputs.di != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.di }}_swift_ui"
else
BRANCH="${{ github.event.inputs.local_storage }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge Networking branch
if: github.event.inputs.networking != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.networking }}_swift_ui"
else
BRANCH="${{ github.event.inputs.networking }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge Navigation branch
if: github.event.inputs.navigation != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.navigation }}_swift_ui"
else
BRANCH="${{ github.event.inputs.navigation }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge View Model branch
if: github.event.inputs.view_model != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.view_model }}_swift_ui"
else
BRANCH="${{ github.event.inputs.view_model }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge Local Storage Branch
id: merge-branch-local-storage
if: github.event.inputs.local_storage != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.local_storage }}_swift_ui"
else
BRANCH="${{ github.event.inputs.local_storage }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge Local Preferences Branch
id: merge-branch
if: github.event.inputs.local_preferences != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.local_preferences }}_swift_ui"
else
BRANCH="${{ github.event.inputs.local_preferences }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Merge Linter Branch
if: github.event.inputs.linter != 'none'
run: |
if [[ "${{ github.event.inputs.ui }}" == "compose_swift_ui" ]]; then
BRANCH="${{ github.event.inputs.linter }}_swift_ui"
else
BRANCH="${{ github.event.inputs.linter }}"
fi
git merge origin/$BRANCH || {
scripts/fix_conflicts.sh
git add .
git commit -m "Fixed merge conflicts"
}
continue-on-error: true
- name: Rename project package
if: github.event.inputs.package_name != 'none'
run: |
echo "${{ github.event.inputs.package_name }}"
echo 's/co.daresay.kmmtemplate/${{ github.event.inputs.package_name }}/g'
echo 's/co.daresay.kmmtemplate/"${{ github.event.inputs.package_name }}/g"'
ls
pwd
./scripts/rename_package.sh ${{ github.event.inputs.package_name }}
- name: Removing unnecessary files and folders
run: |
rm -rf ./git
rm -rf ./github
rm -rf scripts
- name: Specify name of repository
id: repository_name
run: |
UI="${{ github.event.inputs.ui }}"
DI="${{ github.event.inputs.di }}"
NETWORKING="${{ github.event.inputs.networking }}"
NAVIGATION="${{ github.event.inputs.navigation }}"
VIEW_MODEL="${{ github.event.inputs.view_model }}"
LOCAL_STORAGE="${{ github.event.inputs.local_storage }}"
LOCAL_PREFERENCES="${{ github.event.inputs.local_preferences }}"
LINTER="${{ github.event.inputs.linter }}"
NAME=""
for item in "$UI" "$DI" "$NETWORKING" "$NAVIGATION" "$VIEW_MODEL" "$LOCAL_STORAGE" "$LOCAL_PREFERENCES" "$LINTER"; do
if [ "$item" != "none" ]; then
[ -n "$NAME" ] && NAME="${NAME}_"
NAME="${NAME}${item}"
fi
done
echo "::set-output name=repository_name::$NAME"
- name: Upload project artifact
uses: actions/upload-artifact@v4
with:
name: "template_with_${{ steps.repository_name.outputs.repository_name }}"
path: .
retention-days: 1