diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index 28a8758..378da4b 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -3,6 +3,8 @@ :unused-namespace {:level :error} :unused-referred-var {:level :error} :unused-private-var {:level :error} + :unused-value {:level :error} + :unused-import {:level :error} :unresolved-symbol {:level :error} :unresolved-namespace {:level :error} :unresolved-var {:level :error} @@ -10,14 +12,18 @@ :redundant-do {:level :error} :redundant-let {:level :error} :redundant-fn-wrapper {:level :error} + :redundant-call {:level :error} :missing-else-branch {:level :error} + :misplaced-docstring {:level :error} :used-underscored-binding {:level :error} :unsorted-required-namespaces {:level :error} + :aliased-namespace-symbol {:level :error} :consistent-alias {:level :error} :single-key-in {:level :error} :refer-all {:level :error} :duplicate-require {:level :error} :namespace-name-mismatch {:level :error} + :non-arg-vec-return-type-hint {:level :error} :unexpected-recur {:level :error} :condition-always-true {:level :error} - :shadowed-var {:level :error :exclude [name runner]}}} + :shadowed-var {:level :error :exclude [name]}}} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6585eb4..8573938 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,6 +1,9 @@ name: Lint -on: [push, pull_request] +on: + push: + branches: [main] + pull_request: permissions: contents: read diff --git a/src/vmlinux/gha/artifacts.clj b/src/vmlinux/gha/artifacts.clj index 46f654c..e1a256f 100644 --- a/src/vmlinux/gha/artifacts.clj +++ b/src/vmlinux/gha/artifacts.clj @@ -1,7 +1,8 @@ (ns vmlinux.gha.artifacts - (:require [babashka.fs :as fs] - [clojure.edn :as edn] - [vmlinux.krn.build :as build])) + (:require + [babashka.fs :as fs] + [clojure.edn :as edn] + [vmlinux.krn.build :as build])) (defrecord VmLinuxArtifact [artifact-name]) (defrecord ArtifactMeta [arch version binary sha256-sum]) diff --git a/src/vmlinux/gha/release.clj b/src/vmlinux/gha/release.clj index 96d7387..eeded7a 100644 --- a/src/vmlinux/gha/release.clj +++ b/src/vmlinux/gha/release.clj @@ -1,7 +1,8 @@ (ns vmlinux.gha.release - (:require [babashka.fs :as fs] - [babashka.process :refer [shell]] - [selmer.parser :as p])) + (:require + [babashka.fs :as fs] + [babashka.process :refer [shell]] + [selmer.parser :as p])) (defn- release-tag [sha] (str "release-" sha)) @@ -23,15 +24,23 @@ :exit zero?)) +(defn- upload! + [tag asset] + (loop [attempt 1] + (let [exit (:exit (shell {:continue true} "gh" "release" "upload" tag asset))] + (cond (zero? exit) :ok + (< attempt 6) (do (Thread/sleep (* attempt 2000)) (recur (inc attempt))) + :else (throw (ex-info (str "gh release upload failed for " asset) {:asset asset})))))) + (defn create - [sha vmlinux-builds] - (assert (not (exists? sha)) (str "release already exists: " (release-tag sha))) + [sha assets] (let [tag (release-tag sha)] - (shell "gh" "release" "create" tag "--title" (title sha) "--notes" (notes sha)) - (->> vmlinux-builds + (when-not (exists? sha) + (shell "gh" "release" "create" tag "--title" (title sha) "--notes" (notes sha))) + (->> assets (mapv (fn [build] (future (let [asset (str (fs/parent (:binary-path build)) "/" (asset-name build))] (fs/copy (:binary-path build) asset {:replace-existing true}) - (shell "gh" "release" "upload" tag asset))))) + (upload! tag asset))))) (run! deref)) tag)) diff --git a/src/vmlinux/krn/build.clj b/src/vmlinux/krn/build.clj index 8748a52..374fb47 100644 --- a/src/vmlinux/krn/build.clj +++ b/src/vmlinux/krn/build.clj @@ -1,8 +1,9 @@ (ns vmlinux.krn.build (:refer-clojure :exclude [compile]) - (:require [babashka.fs :as fs] - [babashka.process :refer [shell]] - [clojure.string :as str])) + (:require + [babashka.fs :as fs] + [babashka.process :refer [shell]] + [clojure.string :as str])) (defrecord VmLinuxBuild [arch version binary-path sha256-sum]) diff --git a/src/vmlinux/krn/src.clj b/src/vmlinux/krn/src.clj index e917a60..7552989 100644 --- a/src/vmlinux/krn/src.clj +++ b/src/vmlinux/krn/src.clj @@ -1,7 +1,8 @@ (ns vmlinux.krn.src - (:require [babashka.fs :as fs] - [babashka.process :refer [shell]] - [clojure.string :as str])) + (:require + [babashka.fs :as fs] + [babashka.process :refer [shell]] + [clojure.string :as str])) (defrecord KernelSrc [tarball-url checksums-url]) (defrecord KernelTree [path checksum]) diff --git a/src/vmlinux/tasks/compile.clj b/src/vmlinux/tasks/compile.clj index cb53936..26de057 100644 --- a/src/vmlinux/tasks/compile.clj +++ b/src/vmlinux/tasks/compile.clj @@ -1,8 +1,9 @@ (ns vmlinux.tasks.compile - (:require [manifest :as mf] - [vmlinux.gha.artifacts :as artifacts] - [vmlinux.krn.build :as kbuild] - [vmlinux.krn.src :as src])) + (:require + [manifest :as mf] + [vmlinux.gha.artifacts :as artifacts] + [vmlinux.krn.build :as kbuild] + [vmlinux.krn.src :as src])) (defn- by-name [name] (first (filter #(= name (:name %)) mf/builds))) diff --git a/src/vmlinux/tasks/fmt.clj b/src/vmlinux/tasks/fmt.clj index 650cd11..3b76ece 100644 --- a/src/vmlinux/tasks/fmt.clj +++ b/src/vmlinux/tasks/fmt.clj @@ -1,8 +1,9 @@ (ns vmlinux.tasks.fmt - (:require [babashka.deps :as deps] - [babashka.fs :as fs])) + (:require + [babashka.deps :as deps] + [babashka.fs :as fs])) -(def ^:private opts {:width 100, :style :community}) +(def ^:private opts {:width 100, :style [:community :how-to-ns]}) (defn- sources [] (map str (fs/glob "." "{src/**/*.clj,manifest.clj}"))) diff --git a/src/vmlinux/tasks/matrix.clj b/src/vmlinux/tasks/matrix.clj index cd09fff..33542e0 100644 --- a/src/vmlinux/tasks/matrix.clj +++ b/src/vmlinux/tasks/matrix.clj @@ -1,8 +1,9 @@ (ns vmlinux.tasks.matrix - (:require [cheshire.core :as json] - [manifest :as mf])) + (:require + [cheshire.core :as json] + [manifest :as mf])) -(def ^:private arch-runner {:x86_64 "ubuntu-24.04", :aarch64 "ubuntu-24.04-arm"}) +(def ^:private arch-runner {:x86_64 "ultralarge-24.04-x64", :aarch64 "ultralarge-24.04-aarch64"}) (defn matrix [] diff --git a/src/vmlinux/tasks/release.clj b/src/vmlinux/tasks/release.clj index 112351b..ffae946 100644 --- a/src/vmlinux/tasks/release.clj +++ b/src/vmlinux/tasks/release.clj @@ -1,7 +1,8 @@ (ns vmlinux.tasks.release - (:require [clojure.java.io :as io] - [vmlinux.gha.artifacts :as artifacts] - [vmlinux.gha.release :as release])) + (:require + [clojure.java.io :as io] + [vmlinux.gha.artifacts :as artifacts] + [vmlinux.gha.release :as release])) (defn- artifact-dirs [dir]