Template configuration for KMM project #107
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: 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 | |