Skip to content

Commit 6749f26

Browse files
Merge pull request #6 from matejsemancik/feature/ci-cd
CI/CD
2 parents 10e679c + cf1d026 commit 6749f26

11 files changed

Lines changed: 117 additions & 6 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Pull Request Check
2+
3+
on:
4+
pull_request:
5+
types:
6+
- opened
7+
8+
jobs:
9+
check:
10+
strategy:
11+
matrix:
12+
os: [ ubuntu-latest ]
13+
runs-on: ${{ matrix.os }}
14+
timeout-minutes: 10
15+
steps:
16+
- name: 'Checkout'
17+
uses: actions/checkout@v4
18+
- name: 'Setup Java'
19+
uses: actions/setup-java@v4
20+
with:
21+
distribution: 'temurin'
22+
java-version: '21'
23+
- name: "Setup Gradle"
24+
uses: gradle/actions/setup-gradle@v4
25+
- name: 'Check'
26+
run: |
27+
./gradlew check

.github/workflows/on_release.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Build Release Artifacts
2+
3+
on:
4+
release:
5+
types:
6+
- published
7+
8+
jobs:
9+
build:
10+
timeout-minutes: 15 # Windows is such a special snowflake 🙂
11+
strategy:
12+
matrix:
13+
os: [ubuntu-latest, windows-latest, macos-latest]
14+
runs-on: ${{ matrix.os }}
15+
permissions:
16+
contents: write
17+
steps:
18+
- name: 'Checkout'
19+
uses: actions/checkout@v4
20+
- name: 'Setup Java'
21+
uses: actions/setup-java@v4
22+
with:
23+
distribution: 'temurin'
24+
java-version: '21'
25+
- name: "Setup Gradle"
26+
uses: gradle/actions/setup-gradle@v4
27+
- name: 'Build'
28+
env:
29+
DESKTOP_PACKAGE_VERSION: ${{ github.event.release.tag_name }}
30+
run: |
31+
./gradlew packageDistributionForCurrentOS
32+
- name: 'Upload assets'
33+
uses: softprops/action-gh-release@v2
34+
with:
35+
files: |
36+
**/build/compose/binaries/main/dmg/*
37+
**/build/compose/binaries/main/deb/*
38+
**/build/compose/binaries/main/msi/*

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,15 @@ The app is tested on macOS. It supports Jira Cloud only.
2020

2121
Interested in Kotlin Multiplatform? Learn more [here](https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html).
2222

23-
## Installation
23+
## Download
24+
[![GitHub Release](https://img.shields.io/github/v/release/matejsemancik/tempo-timer?include_prereleases&sort=semver&display_name=release&style=flat&link=https%3A%2F%2Fgithub.com%2Fmatejsemancik%2Ftempo-timer%2Freleases%2Flatest)](https://github.com/matejsemancik/tempo-timer/releases/latest)
2425

25-
Publishing WIP. For now, you can run using `./gradlew runDistributable`.
26+
Download latest release [here](https://github.com/matejsemancik/tempo-timer/releases/latest).
27+
28+
## Development
29+
30+
- To build package locally, run `./gradlew packageDistributionForCurrentOS`
31+
- Run with `./gradlew runDistributable`
2632

2733
## Getting started
2834

desktopApp/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ compose.desktop {
4646
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
4747

4848
packageName = "Tempo Timer"
49-
packageVersion = System.getenv("DESKTOP_PACKAGE_VERSION") ?: "1.0.0"
49+
packageVersion = System.getenv("DESKTOP_PACKAGE_VERSION")?.takeIf { it.isNotBlank() } ?: "1.0.0"
5050
description = "Desktop client for Tempo Timesheets"
5151
copyright = "Copyright (c) 2025 Matej Semančík"
5252
vendor = "matsem.dev"

desktopApp/src/desktopMain/kotlin/dev/matsem/bpm/main.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import dev.matsem.bpm.injection.AppInjection
1616
import org.jetbrains.compose.resources.painterResource
1717
import org.koin.compose.KoinContext
1818
import java.awt.Desktop
19-
import java.awt.PopupMenu
2019
import java.awt.Taskbar
2120
import java.awt.desktop.AppReopenedListener
2221

shared/src/commonMain/kotlin/dev/matsem/bpm/feature/app/ui/AppUi.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import dev.matsem.bpm.feature.search.ui.SearchScreenUi
2929
import dev.matsem.bpm.feature.settings.ui.SettingsScreenUi
3030
import dev.matsem.bpm.feature.tracker.presentation.TrackerScreen
3131
import dev.matsem.bpm.feature.tracker.ui.TrackerScreenUi
32+
import dev.matsem.bpm.tooling.Platform
3233
import kotlinx.coroutines.launch
3334
import org.jetbrains.compose.ui.tooling.preview.Preview
3435
import org.koin.compose.koinInject
@@ -46,6 +47,7 @@ fun AppUi() {
4647
var commitDialogTimer: Timer? by rememberSaveable { mutableStateOf(null) }
4748

4849
val trackerScreen: TrackerScreen = koinInject()
50+
val platform: Platform = koinInject()
4951

5052
BpmTheme(isDark = darkMode) {
5153
Scaffold(
@@ -100,8 +102,9 @@ fun AppUi() {
100102
)
101103
}
102104
Text(
103-
"tempo-timer 0.1.0",
105+
"tempo-timer (${platform.getVersionString()})",
104106
style = BpmTheme.typography.labelMedium,
107+
color = BpmTheme.colorScheme.outline,
105108
modifier = Modifier.fillMaxWidth().padding(horizontal = Grid.d3)
106109
)
107110
},

shared/src/commonMain/kotlin/dev/matsem/bpm/injection/AppInjection.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package dev.matsem.bpm.injection
22

3-
import dev.matsem.bpm.injection.module.*
3+
import dev.matsem.bpm.injection.module.databaseModule
4+
import dev.matsem.bpm.injection.module.featureModule
5+
import dev.matsem.bpm.injection.module.networkModule
6+
import dev.matsem.bpm.injection.module.persistenceModule
7+
import dev.matsem.bpm.injection.module.platformModule
8+
import dev.matsem.bpm.injection.module.repositoryModule
9+
import dev.matsem.bpm.injection.module.scopeModule
10+
import dev.matsem.bpm.injection.module.systemModule
411
import org.koin.core.context.startKoin
512
import org.koin.core.logger.Level
613
import org.koin.core.logger.PrintLogger
@@ -11,6 +18,7 @@ object AppInjection {
1118
logger(PrintLogger(Level.ERROR))
1219

1320
modules(
21+
platformModule(),
1422
systemModule(),
1523
scopeModule(),
1624
repositoryModule(),
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.matsem.bpm.injection.module
2+
3+
import org.koin.core.module.Module
4+
5+
expect fun platformModule(): Module
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.matsem.bpm.tooling
2+
3+
interface Platform {
4+
fun getVersionString(): String
5+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.matsem.bpm.injection.module
2+
3+
import dev.matsem.bpm.tool.DesktopPlatform
4+
import dev.matsem.bpm.tooling.Platform
5+
import org.koin.core.module.Module
6+
import org.koin.core.module.dsl.singleOf
7+
import org.koin.dsl.bind
8+
import org.koin.dsl.module
9+
10+
actual fun platformModule(): Module = module {
11+
singleOf(::DesktopPlatform) bind Platform::class
12+
}

0 commit comments

Comments
 (0)