Skip to content

Commit

Permalink
Dev experience improvements (#2525)
Browse files Browse the repository at this point in the history
* Update CONTRIBUTING.md

* Update CONTRIBUTING.md

* Update CONTRIBUTING

* Improve the dev experience

* Update README

* Update README

* Update README

* Update the PR template

* Update GitHub Actions workflow

* Update the PR template

* Add "Unit tests" workflow
  • Loading branch information
ILIYANGERMANOV committed Sep 1, 2023
1 parent 62d791b commit 2c64d99
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 55 deletions.
Binary file added .DS_Store
Binary file not shown.
35 changes: 24 additions & 11 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,30 @@
Please check if your pull request fulfills the following requirements:
- [ ] The PR is submitted to the `main` branch.
- [ ] I've read the **[Contribution Guidelines](https://github.com/Ivy-Apps/ivy-wallet/blob/main/CONTRIBUTING.md)**.
- [ ] The code builds and is tested on an actual Android device.
- [ ] The code builds and is tested on an actual a real device.
- [ ] I confirm that I've run the code locally and everything works as expected.
- [ ] Request a review from **@ILIYANGERMANOV**.

_Put an `x` in the boxes that apply._
- [x] Demo: Checking checkbox using `[x]`

> Upload a screen recording + screenshots to prove that your changes work.
## Pull Request Type
Please check the type of change your PR introduces:
Please check the type of the changes that your PR introduce:

- [ ] Bugfix
- [ ] Feature
- [ ] Code style update (formatting, new lines, etc.)
- [ ] Refactoring (no functional changes, renaming)
- [ ] Small improvement (fix typo, UI fine-tune, change color or something small)
- [ ] Small improvement (fix typo, UI fine-tune or something small)
- [ ] Gradle Build related changes
- [ ] Dependencies update (updating libraries)
- [ ] Documentation (clarifying comments, KDoc)
- [ ] Tests (Unit, Integration, UI tests)
- [ ] Other (please describe):

_Put an `x` in all the boxes that apply._


## Does this PR closes any GitHub Issues?

Check **[Ivy Wallet Issues](https://github.com/Ivy-Apps/ivy-wallet/issues)**.
- Closes #N/A (type issue number here)
Put an `x` in all the boxes that apply.


## What's changed?
Expand All @@ -39,4 +35,21 @@ Describe with a few bullets **what's new:**
- c
- d

_💡Tip: Attach screenshots and screen recordings. It helps a lot!_
_💡 Tip: Attach screenshots and screen recordings. It helps a lot!_

## Does this PR closes any GitHub Issues?

Check **[Ivy Wallet Issues](https://github.com/Ivy-Apps/ivy-wallet/issues)**.
- Closes #{ISSUE_NUMBER}

_Replace `{ISSUE_NUMBER}` with the id/number of the issue that you've fixed._

## Final Steps

Test your build again with the **app-demo.apk** generated by the `APK workflow`. This is an important step because it applies code obfuscation and R8 that often produces runtime exceptions which make the app crash.

> We don't have QA, you are the QA! That's why we require so much testing.
If everything still works fines, comment and tag **@ILIYANGERMANOV**. He'll try to merge your PR whenever possible.

**Thank you for your contribution! 🎉**
4 changes: 2 additions & 2 deletions .github/workflows/apk.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
name: APK

on:
# Triggers the workflow on push or pull request events
push:
branches:
- main

jobs:
assemble_demo_apk:
Expand Down Expand Up @@ -38,6 +37,7 @@ jobs:
path: app/build/outputs/apk/demo/app-demo.apk

- name: Upload APK in Telegram Group
if: github.ref == 'refs/heads/main'
run: |
COMMIT_LINK="https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}"
COMMIT_MESSAGE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}" | jq -r .commit.message)
Expand Down
6 changes: 0 additions & 6 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@ on:
# Triggers the workflow on push or pull request events
push:

#Triggers when a pull request event occurs (opened, synchronize, reopened)
pull_request:

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
lint:
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Unit tests

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events
push:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
lint:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Checkout GIT
uses: actions/checkout@v3

- name: Setup Java SDK
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '18'
#----------------------------------------------------

#Optimization
- name: Enable Gradle Wrapper caching (optmization)
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
#---------------------------------------------------

#Test
- name: Run unit tests
run: ./gradlew testDebug
#------------------------------------------------------------------
33 changes: 16 additions & 17 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## 1. Fork the repo

**[How To Fork Guide by GitHub](https://docs.github.com/en/get-started/quickstart/fork-a-repo)**
You can do that by cliking this badge: 👉 [![Fork Ivy Wallet](https://img.shields.io/github/forks/Ivy-Apps/ivy-wallet?logo=github&style=social)](https://github.com/Ivy-Apps/ivy-wallet/fork) 👈

`gh repo fork https://github.com/Ivy-Apps/ivy-wallet`
**[How To Fork Guide by GitHub](https://docs.github.com/en/get-started/quickstart/fork-a-repo)**

## 2. Pick an issue

Expand All @@ -16,26 +16,20 @@ What do you want to work on? How do you want to contribute?
2. Choose a ticket that you understand and intrigues you.
3. Comment `"I'm on it"` on the ticket to let other contributors know that you're working on it.

### Tips:
### Rules:

- Issues with the
label [good first issue](https://github.com/Ivy-Apps/ivy-wallet/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
are easier.
- You can also help us clean up the [issue section](https://github.com/Ivy-Apps/ivy-wallet/issues)
by identifying duplicate issues.
- You can always make code improvements w/o having an opened issue.
- You create an issue yourself!
- Ask questions or suggest ideas in the comments section of any issue.
- Issues with a green `"approved"` label are ready for development.
- If the issue that you like doesn't have `"approved"` label, just **tag @ILIYANGERMANOV**.
- If someone else has already commented **"I'm on it"**, do **not** start working on it! Instead tag the person and ask if you can take it.
- If what you want to do isn't in issues, just **create it** and **tag @ILIYANGERMANOV**.

## 3. Create a feature branch in your fork

Once you've decided on what you want to contribute it's time to create a feature branch in your
forked ivy-wallet
repository.
Once you've decided on what you want to work, it's time to create a feature branch in your forked ivy-wallet repository.

### Console:

`cd forked-ivy-wallet-repo-dir`
`cd ivy-wallet-fork`

`git checkout -b fix-issue-N`

Expand All @@ -52,8 +46,8 @@ repository.

## 4. Submit a PR to `main` branch

So far you should have pushed your work to your feature branch and have tested
that it works on an actual Android device.
So far, you should have pushed your work to your feature branch and have tested
that it works on a real Android device.
Then final step is to open a pull request to the `main` branch of the
official [Ivy Wallet repo.](https://github.com/Ivy-Apps/ivy-wallet/pulls)

Expand All @@ -63,3 +57,8 @@ official [Ivy Wallet repo.](https://github.com/Ivy-Apps/ivy-wallet/pulls)

- Make sure that on the base repository's base the `main` branch is chosen as "base".
- Pull requests to other branches will be rejected.
- Ivy Wallet doesn't have QA so **you are the QA!** Please test your implementation carefully.

### Questions?

Ask them in **[the Ivy Wallet Telegram community](https://t.me/+ETavgioAvWg4NThk)**.
40 changes: 21 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
[![Latest Release](https://img.shields.io/github/v/release/Ivy-Apps/ivy-wallet)](https://github.com/Ivy-Apps/ivy-wallet/releases)
[![APK](https://github.com/Ivy-Apps/ivy-wallet/actions/workflows/apk.yml/badge.svg)](https://github.com/Ivy-Apps/ivy-wallet/actions/workflows/apk.yml)
[![Lint](https://github.com/Ivy-Apps/ivy-wallet/actions/workflows/lint.yml/badge.svg)](https://github.com/Ivy-Apps/ivy-wallet/actions/workflows/lint.yml)
[![Telegram Group](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/+ETavgioAvWg4NThk)

[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Ivy-Apps/ivy-wallet/blob/main/CONTRIBUTING.md)
[![Telegram Group](https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white)](https://t.me/+ETavgioAvWg4NThk)
[![GitHub Repo stars](https://img.shields.io/github/stars/Ivy-Apps/ivy-wallet?style=social)](https://github.com/Ivy-Apps/ivy-wallet/stargazers)
[![Fork Ivy Wallet](https://img.shields.io/github/forks/Ivy-Apps/ivy-wallet?logo=github&style=social)](https://github.com/Ivy-Apps/ivy-wallet/fork)

# [Ivy Wallet: money manager](https://play.google.com/store/apps/details?id=com.ivy.wallet)

Expand All @@ -14,29 +14,28 @@
| ![1](https://user-images.githubusercontent.com/5564499/189540998-4d6cdcd3-ab4d-40f7-85d4-c82fe8a017d1.png) | ![2](https://user-images.githubusercontent.com/5564499/189541011-1ebbd8b6-50fe-432a-91e2-59206efe99ce.png) | ![3](https://user-images.githubusercontent.com/5564499/189541023-35e7f163-d639-4466-9a91-c56890d5a28e.png) | ![4](https://user-images.githubusercontent.com/5564499/189541027-d352314c-fd5c-43eb-82ad-4aba14c7b0fa.png)
| ![5](https://user-images.githubusercontent.com/5564499/189541030-1a0d7948-33af-420b-b126-936d0211c93f.png) | ![6](https://user-images.githubusercontent.com/5564499/189541035-621c4511-5ec7-4d3f-b08e-925d8da95472.png) |![7](https://user-images.githubusercontent.com/5564499/189541127-7adf5bfa-0652-461c-80f1-076b7179eb6c.png) | ![8](https://user-images.githubusercontent.com/5564499/189541040-7cab633e-be4c-40b2-a2c6-890a15edf805.png)

Ivy Wallet is a **free money manager android app** written using 100% Jetpack Compose and Kotlin. It's designed to help you track your personal finance with ease.
Ivy Wallet is a free and open-source **money manager android app** written using **100% Kotlin and Jetpack Compose**. It's designed to help you track your personal finance with ease.

Imagine Ivy Wallet as a manual expense tracker that will replace the good old spreadsheet for managing your personal finance.

Track your expenses, fast and on-the-go! ⚡ Discover powerful insights about your spending.

**Do you know? Ask yourself.**

1) How much money do I have right now in all accounts combined?
1) How much money in total do I have?

2) How much did I spend this month and where?

3) How much money can I spend and still reach my financial goals?

A money manager app can help you answer these questions.

Ivy Wallet's biggest advantage is its UI/UX, simplicity, and customization which was recognized in the ["Top/Best Android App in 2021/2022 charts"](https://youtube.com/playlist?list=PLguJN0waG1-eSzKMuFMIULrR3MlqJ3cAE) 10+ times by the YouTube tech community.
Ivy Wallet's biggest advantage is its UI/UX, simplicity, and customization that was recognized in the ["Top/Best Android App in 2021/2022 charts"](https://youtube.com/playlist?list=PLguJN0waG1-eSzKMuFMIULrR3MlqJ3cAE) by the YouTube tech community.

<a href='https://play.google.com/store/apps/details?id=com.ivy.wallet&utm_source=github&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' width="323" height="125"/></a>

> To support our free, open-source project please ⭐ star our repo - that means a lot for us! Thank
> you! [![GitHub Repo stars](https://img.shields.io/github/stars/Ivy-Apps/ivy-wallet?style=social)](https://github.com/Ivy-Apps/ivy-wallet/stargazers)
> 🙏
> To support our free open-source project please give it a star. ⭐
> That means a lot for us. Thank you! [![GitHub Repo stars](https://img.shields.io/github/stars/Ivy-Apps/ivy-wallet?style=social)](https://github.com/Ivy-Apps/ivy-wallet/stargazers)
> Join our **[private Telegram Community](https://t.me/+ETavgioAvWg4NThk)**.
Expand All @@ -48,35 +47,38 @@ Ivy Wallet's biggest advantage is its UI/UX, simplicity, and customization which

## Learning Materials

We're also linking great learning materials (books, articles, videos)
that helped us level-up in our software engineering journey,
check them in **[docs/resources 📚](docs/resources/)**.
Ivy Wallet is a great place to code and learn. That's why we're also linking great learning materials (books, articles, videos), check them in **[docs/resources 📚](docs/resources/)**.

## Tech Stack

### Core

- 100% [Kotlin](https://kotlinlang.org/)
- 100% [Jetpack Compose](https://developer.android.com/jetpack/compose)
- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html)
- [Kotlin Flow](https://kotlinlang.org/docs/flow.html)
- [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) (structured concurrency)
- [Kotlin Flow](https://kotlinlang.org/docs/flow.html) (reactivity)
- [Hilt](https://dagger.dev/hilt/) (DI)
- [ArrowKt](https://arrow-kt.io/) (Functional Programming)
- [ArrowKt](https://arrow-kt.io/) (functional programming)

### Local Persistence
- [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) (key-value storage, Shared Preferences replacement)
- [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) (key-value storage, `SharedPreferences` replacement)
- [Room DB](https://developer.android.com/training/data-storage/room) (SQLite ORM)

### Networking
- [Ktor Client](https://ktor.io/docs/getting-started-ktor-client.html) (REST client)
- [KotlinX Serialization](https://github.com/Kotlin/kotlinx.serialization) (JSON serialization)

### CI/CD & Build
- [Gradle KTS](https://docs.gradle.org/current/userguide/kotlin_dsl.html)
- [Fastlane](https://fastlane.tools/) (upload to Google PlayStore)
### Build & CI
- [Gradle KTS](https://docs.gradle.org/current/userguide/kotlin_dsl.html) (Kotlin DSL)
- [Fastlane](https://fastlane.tools/) (uploads the app to the Google PlayStore)
- [Github Actions](https://github.com/Ivy-Apps/ivy-wallet/actions) (CI/CD)

## Contributors Wall:
## Contribute

**Want to contribute?** See **[CONTRIBUTING.md](/CONTRIBUTING.md)** [![Fork Ivy Wallet](https://img.shields.io/github/forks/Ivy-Apps/ivy-wallet?logo=github&style=social)](https://github.com/Ivy-Apps/ivy-wallet/fork)

### Contributors Wall:

<a href="https://github.com/ILIYANGERMANOV/ivy-wallet/graphs/contributors">
<img src="https://contrib.rocks/image?repo=ILIYANGERMANOV/ivy-wallet" />
</a>
Expand Down

0 comments on commit 2c64d99

Please sign in to comment.