first functionality
This commit is contained in:
parent
8c175a3d89
commit
ca6a34bbc3
8 changed files with 45 additions and 212 deletions
101
.github/config/clj-kondo-ci-config.edn
vendored
101
.github/config/clj-kondo-ci-config.edn
vendored
|
@ -1,101 +0,0 @@
|
||||||
;; ---------------------------------------------------------
|
|
||||||
;; Clojure Linter - clj-kondo configuration for Continuous Integration
|
|
||||||
;;
|
|
||||||
;; Essential linter checks during CI workflows
|
|
||||||
;; disabling non-essential checks to optimise workflow feedback
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
{;; Ignore code in comment blocks
|
|
||||||
:skip-comments true
|
|
||||||
|
|
||||||
:linters {:invalid-arity {:level :error
|
|
||||||
:skip-args [#_riemann.test/test-stream]}
|
|
||||||
:not-a-function {:level :error
|
|
||||||
:skip-args [#_user/foo]}
|
|
||||||
:private-call {:level :error}
|
|
||||||
:inline-def {:level :error}
|
|
||||||
:redundant-do {:level :off}
|
|
||||||
:redundant-let {:level :warning}
|
|
||||||
:cond-else {:level :off}
|
|
||||||
:syntax {:level :warning}
|
|
||||||
:file {:level :error}
|
|
||||||
:missing-test-assertion {:level :warning}
|
|
||||||
:conflicting-alias {:level :error}
|
|
||||||
:duplicate-map-key {:level :error}
|
|
||||||
:duplicate-set-key {:level :error}
|
|
||||||
:missing-map-value {:level :error}
|
|
||||||
:redefined-var {:level :off}
|
|
||||||
:unreachable-code {:level :warning}
|
|
||||||
:datalog-syntax {:level :off}
|
|
||||||
:unbound-destructuring-default {:level :warning}
|
|
||||||
:unused-binding {:level :off
|
|
||||||
;; :exclude-destructured-keys-in-fn-args false
|
|
||||||
;; :exclude-destructured-as false
|
|
||||||
;; :exclude-unused-as true
|
|
||||||
}
|
|
||||||
|
|
||||||
:unsorted-required-namespaces {:level :off}
|
|
||||||
:unused-namespace {:level :off
|
|
||||||
;; don't warn about these namespaces:
|
|
||||||
:exclude [#_clj-kondo.impl.var-info-gen]}
|
|
||||||
;; :simple-libspec true
|
|
||||||
|
|
||||||
:unresolved-symbol {:level :error
|
|
||||||
:exclude [;; ignore globally:
|
|
||||||
#_js*
|
|
||||||
;; ignore occurrences of service and event in call to riemann.streams/where:
|
|
||||||
#_(riemann.streams/where [service event])
|
|
||||||
;; ignore all unresolved symbols in one-of:
|
|
||||||
#_(clj-kondo.impl.utils/one-of)
|
|
||||||
#_(user/defproject) ; ignore project.clj's defproject
|
|
||||||
#_(clojure.test/are [thrown? thrown-with-msg?])
|
|
||||||
#_(cljs.test/are [thrown? thrown-with-msg?])
|
|
||||||
#_(clojure.test/is [thrown? thrown-with-msg?])
|
|
||||||
#_(cljs.test/is [thrown? thrown-with-msg?])]}
|
|
||||||
:unresolved-var {:level :warning}
|
|
||||||
:unresolved-namespace {:level :warning
|
|
||||||
:exclude [#_foo.bar]}
|
|
||||||
;; for example: foo.bar is always loaded in a user profile
|
|
||||||
|
|
||||||
:misplaced-docstring {:level :warning}
|
|
||||||
:not-empty? {:level :off}
|
|
||||||
:deprecated-var {:level :off
|
|
||||||
#_:exclude
|
|
||||||
#_{foo.foo/deprecated-fn
|
|
||||||
;; suppress warnings in the following namespaces
|
|
||||||
{:namespaces [foo.bar "bar\\.*"]
|
|
||||||
;; or in these definitions:
|
|
||||||
:defs [foo.baz/allowed "foo.baz/ign\\.*"]}}}
|
|
||||||
:unused-referred-var {:level :off
|
|
||||||
:exclude {#_#_taoensso.timbre [debug]}}
|
|
||||||
:unused-private-var {:level :off}
|
|
||||||
:duplicate-require {:level :warning}
|
|
||||||
:refer {:level :off}
|
|
||||||
:refer-all {:level :warning
|
|
||||||
:exclude #{}}
|
|
||||||
:use {:level :error}
|
|
||||||
:missing-else-branch {:level :warning}
|
|
||||||
:type-mismatch {:level :error}
|
|
||||||
:missing-docstring {:level :warning}
|
|
||||||
:consistent-alias {:level :off
|
|
||||||
;; warn when alias for clojure.string is
|
|
||||||
;; different from str
|
|
||||||
:aliases {#_clojure.string #_str}}
|
|
||||||
:unused-import {:level :off}
|
|
||||||
:single-operand-comparison {:level :off}
|
|
||||||
:single-logical-operand {:level :off}
|
|
||||||
:single-key-in {:level :off}
|
|
||||||
:missing-clause-in-try {:level :off}
|
|
||||||
:missing-body-in-when {:level :off}
|
|
||||||
:hook {:level :error}
|
|
||||||
:format {:level :error}
|
|
||||||
:shadowed-var {:level :off
|
|
||||||
#_#_:suggestions {clojure.core/type tajpu
|
|
||||||
clojure.core/name nomspaco}
|
|
||||||
#_#_:exclude [frequencies]
|
|
||||||
#_#_:include [name]}
|
|
||||||
:deps.edn {:level :warning}}
|
|
||||||
|
|
||||||
;; Format the output of clj-kondo for GitHub actions
|
|
||||||
:output {:pattern "::{{level}} file={{filename}},line={{row}},col={{col}}::{{message}}"}}
|
|
37
.github/workflows/lint-review.yaml
vendored
37
.github/workflows/lint-review.yaml
vendored
|
@ -1,37 +0,0 @@
|
||||||
---
|
|
||||||
# Clojure Lint with clj-kondo and reviewdog
|
|
||||||
#
|
|
||||||
# Lint errors raised as comments on pull request conversation
|
|
||||||
|
|
||||||
name: Lint Review
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
clj-kondo:
|
|
||||||
name: runner / clj-kondo
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- run: echo "🚀 Job automatically triggered by ${{ github.event_name }}"
|
|
||||||
- run: echo "🐧 Job running on ${{ runner.os }} server"
|
|
||||||
- run: echo "🐙 Using ${{ github.ref }} branch from ${{ github.repository }} repository"
|
|
||||||
|
|
||||||
# Git Checkout
|
|
||||||
- name: Checkout Code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
token: "${{ secrets.PAT || secrets.GITHUB_TOKEN }}"
|
|
||||||
- run: echo "🐙 ${{ github.repository }} repository was cloned to the runner."
|
|
||||||
|
|
||||||
- name: clj-kondo
|
|
||||||
uses: nnichols/clojure-lint-action@v2
|
|
||||||
with:
|
|
||||||
pattern: "*.clj"
|
|
||||||
clj_kondo_config: ".github/config/clj-kondo-ci-config.edn"
|
|
||||||
level: "error"
|
|
||||||
exclude: ".cljstyle"
|
|
||||||
github_token: ${{ secrets.github_token }}
|
|
||||||
reporter: github-pr-review
|
|
||||||
|
|
||||||
# Summary and status
|
|
||||||
- run: echo "🎨 Lint Review checks completed"
|
|
||||||
- run: echo "🍏 Job status is ${{ job.status }}."
|
|
|
@ -1,4 +1,4 @@
|
||||||
# practicalli/playground Changelog
|
# dda-backup Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||||
|
|
6
src/dda/backup/management.clj
Normal file
6
src/dda/backup/management.clj
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
(ns dda.backup.management
|
||||||
|
(:require
|
||||||
|
[orchestra.core :refer [defn-spec]]
|
||||||
|
[clojure.spec.alpha :as s]
|
||||||
|
[dda.build.devops.domain :as domain]
|
||||||
|
[dda.build.infrastructure :as i]))
|
21
src/dda/backup/management/domain.clj
Normal file
21
src/dda/backup/management/domain.clj
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
(ns dda.backup.management.domain
|
||||||
|
(:require
|
||||||
|
[orchestra.core :refer [defn-spec]]
|
||||||
|
[clojure.spec.alpha :as s]))
|
||||||
|
|
||||||
|
(s/def ::certificate-file string?)
|
||||||
|
(s/def ::restic-repository string?)
|
||||||
|
(s/def ::backup-file-path string?)
|
||||||
|
|
||||||
|
(s/def ::config
|
||||||
|
(s/keys :req-un [::restic-repository ::backup-file-path]
|
||||||
|
:opt-un [::certificate-file]))
|
||||||
|
|
||||||
|
; TODO: specify output better
|
||||||
|
(defn-spec init-repo-command seq?
|
||||||
|
[config ::config]
|
||||||
|
(let [{:keys [certificate-file restic-repository backup-file-path]} config]
|
||||||
|
(if (some? certificate-file)
|
||||||
|
["restic" "-r" (str restic-repository "/" backup-file-path) "-v" "init" "--cacert" certificate-file]
|
||||||
|
["restic" "-r" (str restic-repository "/" backup-file-path) "-v" "init"]
|
||||||
|
)))
|
|
@ -1,46 +0,0 @@
|
||||||
;; ---------------------------------------------------------
|
|
||||||
;; practicalli.playground
|
|
||||||
;;
|
|
||||||
;; TODO: Provide a meaningful description of the project
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
|
|
||||||
(ns practicalli.playground
|
|
||||||
(:gen-class)
|
|
||||||
(:require
|
|
||||||
[com.brunobonacci.mulog :as mulog]))
|
|
||||||
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
;; Application
|
|
||||||
|
|
||||||
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
|
|
||||||
(defn greet
|
|
||||||
"Greeting message via Clojure CLI clojure.exec"
|
|
||||||
([] (greet {:team-name "secret engineering"}))
|
|
||||||
([{:keys [team-name]}]
|
|
||||||
(str "practicalli playground service developed by the " team-name " team")))
|
|
||||||
|
|
||||||
|
|
||||||
(defn -main
|
|
||||||
"Entry point into the application via clojure.main -M"
|
|
||||||
[& args]
|
|
||||||
(let [team (first args)]
|
|
||||||
(mulog/set-global-context!
|
|
||||||
{:app-name "practicalli playground" :version "0.1.0-SNAPSHOT"})
|
|
||||||
(mulog/log ::application-starup :arguments args)
|
|
||||||
(if team
|
|
||||||
(println (greet team))
|
|
||||||
(println (greet)))))
|
|
||||||
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
;; Rick Comment
|
|
||||||
#_{:clj-kondo/ignore [:redefined-var]}
|
|
||||||
(comment
|
|
||||||
|
|
||||||
(-main)
|
|
||||||
(-main {:team-name "Clojure Engineering"})
|
|
||||||
|
|
||||||
#_()) ; End of rich comment block
|
|
||||||
;; ---------------------------------------------------------
|
|
17
test/dda/backup/management/domain_test.clj
Normal file
17
test/dda/backup/management/domain_test.clj
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
(ns dda.backup.management.domain-test
|
||||||
|
(:require
|
||||||
|
[clojure.test :refer [deftest is are testing run-tests]]
|
||||||
|
[clojure.spec.test.alpha :as st]
|
||||||
|
[dda.backup.management.domain :as cut]))
|
||||||
|
|
||||||
|
(st/instrument `cut/init-repo-command)
|
||||||
|
|
||||||
|
(deftest should-calculate-init-repo-command
|
||||||
|
(is (= ["restic" "-r" "repo/dir" "-v" "init" "--cacert" "ca"]
|
||||||
|
(cut/init-repo-command {:certificate-file "ca"
|
||||||
|
:restic-repository "repo"
|
||||||
|
:backup-file-path "dir"})))
|
||||||
|
(is (= ["restic" "-r" "repo/dir" "-v" "init"]
|
||||||
|
(cut/init-repo-command {:restic-repository "repo"
|
||||||
|
:backup-file-path "dir"})))
|
||||||
|
)
|
|
@ -1,27 +0,0 @@
|
||||||
;; ---------------------------------------------------------
|
|
||||||
;; practicalli.playground.-test
|
|
||||||
;;
|
|
||||||
;; Example unit tests for practicalli.playground
|
|
||||||
;;
|
|
||||||
;; - `deftest` - test a specific function
|
|
||||||
;; - `testing` logically group assertions within a function test
|
|
||||||
;; - `is` assertion: expected value then function call
|
|
||||||
;; ---------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
(ns practicalli.playground-test
|
|
||||||
(:require
|
|
||||||
[clojure.test :refer [deftest is testing]]
|
|
||||||
[practicalli.playground :as playground]))
|
|
||||||
|
|
||||||
|
|
||||||
(deftest application-test
|
|
||||||
(testing "TODO: Start with a failing test, make it pass, then refactor"
|
|
||||||
|
|
||||||
;; TODO: fix greet function to pass test
|
|
||||||
(is (= "practicalli application developed by the secret engineering team"
|
|
||||||
(playground/greet)))
|
|
||||||
|
|
||||||
;; TODO: fix test by calling greet with {:team-name "Practicalli Engineering"}
|
|
||||||
(is (= (playground/greet "Practicalli Engineering")
|
|
||||||
"practicalli service developed by the Practicalli Engineering team"))))
|
|
Loading…
Reference in a new issue