Compare commits

...

3 Commits

Author SHA1 Message Date
c802c76ace Test CI
Some checks failed
Test Workflow / Lint and test library (pull_request) Successful in 8m47s
Publish Workflow / Publish library (pull_request) Failing after 8m54s
2023-12-29 21:11:14 +06:00
9f6fad8466 Add usage in README
All checks were successful
Test Workflow / Lint and test library (pull_request) Successful in 8m11s
2023-12-29 21:10:47 +06:00
571e952897 Initial CI 2023-12-29 21:03:24 +06:00
5 changed files with 86 additions and 2 deletions

47
.github/workflows/publish.yaml vendored Normal file
View File

@@ -0,0 +1,47 @@
name: Publish Workflow
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
publish:
name: Publish library
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: adopt
java-version: 17
- name: Verify Gradle wrapper
uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Run checks
run: ./gradlew check
- name: Parse parameters
id: parse
run: |
export VERSION="$(echo ${{ github.ref_name }} | cut -c2-)"
echo "Parsed version: '$VERSION'"
echo "backup_version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Build
env:
BACKUP_VERSION: ${{ steps.parse.outputs.backup_version }}
run: ./gradlew shadowJar
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ShadowJAR
path: build/libs/*-all.jar

29
.github/workflows/test.yaml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Test Workflow
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
lint-and-test:
name: Lint and test library
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: adopt
java-version: 17
- name: Verify Gradle wrapper
uses: gradle/wrapper-validation-action@v1
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Run checks
run: ./gradlew check

View File

@@ -2,6 +2,10 @@
This is a small backup utility for uploading/restoring a local directory to/from This is a small backup utility for uploading/restoring a local directory to/from
an AWS S3 bucket. an AWS S3 bucket.
## Usage
This tool is released as a JAR in the [release page](https://git.koval.net/cyclane/teamcity-executors-test-task/releases).
Use `java -jar <backup-jar-name>.jar --help` for more detailed usage instructions.
## Assumptions ## Assumptions
1. This test task is not interested in re-implementations of common libraries (AWS SDK, Clikt, Gradle Shadow, ...) 1. This test task is not interested in re-implementations of common libraries (AWS SDK, Clikt, Gradle Shadow, ...)
2. The last part (restoration of a single file) should be optimised so that only the part of the blob required for this 2. The last part (restoration of a single file) should be optimised so that only the part of the blob required for this

View File

@@ -1,10 +1,12 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins { plugins {
kotlin("jvm") version "1.9.21" kotlin("jvm") version "1.9.21"
id("com.github.johnrengelman.shadow") version "8.1.1" id("com.github.johnrengelman.shadow") version "8.1.1"
} }
group = "net.koval" group = "net.koval.teamcity-executors-test-task"
version = "1.0-SNAPSHOT" version = System.getenv("BACKUP_VERSION")
repositories { repositories {
mavenCentral() mavenCentral()
@@ -12,6 +14,7 @@ repositories {
dependencies { dependencies {
implementation("aws.sdk.kotlin:s3:1.0.25") implementation("aws.sdk.kotlin:s3:1.0.25")
implementation("org.slf4j:slf4j-simple:2.0.9")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
} }

View File

@@ -1,6 +1,7 @@
package backup package backup
import aws.sdk.kotlin.services.s3.S3Client import aws.sdk.kotlin.services.s3.S3Client
import aws.sdk.kotlin.services.s3.model.ListBucketsRequest
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import java.io.File import java.io.File