From 14742e97651b49a3473a58030113c7752eb538ff Mon Sep 17 00:00:00 2001
From: Markus Pesch <markus.pesch@cryptic.systems>
Date: Sat, 22 Feb 2025 21:06:29 +0100
Subject: [PATCH] Initial Commit

---
 .SRCINFO           |  15 +++++
 .drone.yml         |  97 ++++++++++++++++++++++++++++++
 .editorconfig      |  12 ++++
 .gitignore         |   6 ++
 .markdownlint.yaml | 145 +++++++++++++++++++++++++++++++++++++++++++++
 PKGBUILD           |  44 ++++++++++++++
 README.md          |  62 +++++++++++++++++++
 renovate.json      |  25 ++++++++
 8 files changed, 406 insertions(+)
 create mode 100644 .SRCINFO
 create mode 100644 .drone.yml
 create mode 100644 .editorconfig
 create mode 100644 .gitignore
 create mode 100644 .markdownlint.yaml
 create mode 100644 PKGBUILD
 create mode 100644 README.md
 create mode 100644 renovate.json

diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 0000000..a32fdcb
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,15 @@
+pkgbase = shellyctl
+	pkgdesc = shellyctl is an unofficial command line client for the Shelly Gen2/3 API.
+	pkgver = 0.4.0
+	pkgrel = 1
+	url = https://github.com/jcodybaker/shellyctl
+	arch = armv7h
+	arch = aarch64
+	arch = x86_64
+	license = MIT
+	makedepends = go
+	source = https://github.com/jcodybaker/shellyctl/archive/refs/tags/v0.4.0.zip
+	sha512sums = fd997360d5a1804c642422833c602966acd196dc6668d596b5a1d6eefbd619a54154e5a355b705383900374d284e9eef0066c16d9c997c893bddcd4a30ebd647
+	b2sums = 394f831886dd0cf11c8b66feaa0f8a4511a322bdd44eb3cb06794d18b7f215694be00795e96225fe340d945421ec584d6af2afb9fdf1ad1b131d1bd01fc22a55
+
+pkgname = shellyctl
diff --git a/.drone.yml b/.drone.yml
new file mode 100644
index 0000000..adbba38
--- /dev/null
+++ b/.drone.yml
@@ -0,0 +1,97 @@
+---
+kind: pipeline
+type: kubernetes
+name: linter
+
+clone:
+  disable: true
+
+steps:
+- name: clone
+  image: git.cryptic.systems/volker.raschek/git:1.4.0
+
+- name: markdown lint
+  commands:
+  - markdownlint *.md
+  image: git.cryptic.systems/volker.raschek/markdownlint:0.43.0
+  resources:
+    limits:
+      cpu: 150
+      memory: 150M
+
+- name: email-notification
+  environment:
+    SMTP_FROM_ADDRESS:
+      from_secret: smtp_from_address
+    SMTP_FROM_NAME:
+      from_secret: smtp_from_name
+    SMTP_HOST:
+      from_secret: smtp_host
+    SMTP_USERNAME:
+      from_secret: smtp_username
+    SMTP_PASSWORD:
+      from_secret: smtp_password
+  image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
+  resources:
+    limits:
+      cpu: 150
+      memory: 150M
+  when:
+    status:
+    - changed
+    - failure
+
+trigger:
+  event:
+    exclude:
+    - tag
+
+---
+kind: pipeline
+type: kubernetes
+name: sync-to-aur.archlinux.org
+
+clone:
+  disable: true
+
+steps:
+- name: clone
+  image: git.cryptic.systems/volker.raschek/git:1.4.0
+
+- name: git-push
+  image: docker.io/appleboy/drone-git-push:1.1.1
+  settings:
+    branch: master
+    remote: ssh://aur@aur.archlinux.org/prometheus-x509-certificate-exporter.git
+    force: false
+    commit: false
+    ssh_key:
+      from_secret: aur_ssh_key
+
+- name: email-notification
+  environment:
+    SMTP_FROM_ADDRESS:
+      from_secret: smtp_from_address
+    SMTP_FROM_NAME:
+      from_secret: smtp_from_name
+    SMTP_HOST:
+      from_secret: smtp_host
+    SMTP_USERNAME:
+      from_secret: smtp_username
+    SMTP_PASSWORD:
+      from_secret: smtp_password
+  image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
+  resources:
+    limits:
+      cpu: 150
+      memory: 150M
+  when:
+    status:
+    - changed
+    - failure
+
+trigger:
+  event:
+  - tag
+  repo:
+  - volker.raschek/prometheus-x509-certificate-exporter-pkg
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..1166a4a
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: https://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = false
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9c60cd8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+pkg
+src
+*tar.gz
+*tar.zst
+*tar.zst.sig
+*zip
\ No newline at end of file
diff --git a/.markdownlint.yaml b/.markdownlint.yaml
new file mode 100644
index 0000000..54c8c83
--- /dev/null
+++ b/.markdownlint.yaml
@@ -0,0 +1,145 @@
+# markdownlint YAML configuration
+# https://github.com/DavidAnson/markdownlint/blob/main/schema/.markdownlint.yaml
+
+# Default state for all rules
+default: true
+
+# Path to configuration file to extend
+extends: null
+
+# MD003/heading-style/header-style - Heading style
+MD003:
+  # Heading style
+  style: "atx"
+
+# MD004/ul-style - Unordered list style
+MD004:
+  style: "dash"
+
+# MD007/ul-indent - Unordered list indentation
+MD007:
+  # Spaces for indent
+  indent: 2
+  # Whether to indent the first level of the list
+  start_indented: false
+
+# MD009/no-trailing-spaces - Trailing spaces
+MD009:
+  # Spaces for line break
+  br_spaces: 2
+  # Allow spaces for empty lines in list items
+  list_item_empty_lines: false
+  # Include unnecessary breaks
+  strict: false
+
+# MD010/no-hard-tabs - Hard tabs
+MD010:
+  # Include code blocks
+  code_blocks: true
+
+# MD012/no-multiple-blanks - Multiple consecutive blank lines
+MD012:
+  # Consecutive blank lines
+  maximum: 1
+
+# MD013/line-length - Line length
+MD013:
+  # Number of characters
+  line_length: 120
+  # Number of characters for headings
+  heading_line_length: 120
+  # Number of characters for code blocks
+  code_block_line_length: 120
+  # Include code blocks
+  code_blocks: false
+  # Include tables
+  tables: false
+  # Include headings
+  headings: true
+  # Include headings
+  headers: true
+  # Strict length checking
+  strict: false
+  # Stern length checking
+  stern: false
+
+# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines
+MD022:
+  # Blank lines above heading
+  lines_above: 1
+  # Blank lines below heading
+  lines_below: 1
+
+# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
+MD024:
+  # Only check sibling headings
+  allow_different_nesting: true
+
+# MD025/single-title/single-h1 - Multiple top-level headings in the same document
+MD025:
+  # Heading level
+  level: 1
+  # RegExp for matching title in front matter
+  front_matter_title: "^\\s*title\\s*[:=]"
+
+# MD026/no-trailing-punctuation - Trailing punctuation in heading
+MD026:
+  # Punctuation characters
+  punctuation: ".,;:!。,;:!"
+
+# MD029/ol-prefix - Ordered list item prefix
+MD029:
+  # List style
+  style: "one_or_ordered"
+
+# MD030/list-marker-space - Spaces after list markers
+MD030:
+  # Spaces for single-line unordered list items
+  ul_single: 1
+  # Spaces for single-line ordered list items
+  ol_single: 1
+  # Spaces for multi-line unordered list items
+  ul_multi: 1
+  # Spaces for multi-line ordered list items
+  ol_multi: 1
+
+# MD033/no-inline-html - Inline HTML
+MD033:
+  # Allowed elements
+  allowed_elements: []
+
+# MD035/hr-style - Horizontal rule style
+MD035:
+  # Horizontal rule style
+  style: "---"
+
+# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading
+MD036:
+  # Punctuation characters
+  punctuation: ".,;:!?。,;:!?"
+
+# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading
+MD041:
+  # Heading level
+  level: 1
+  # RegExp for matching title in front matter
+  front_matter_title: "^\\s*title\\s*[:=]"
+
+# MD044/proper-names - Proper names should have the correct capitalization
+MD044:
+  # List of proper names
+  names:
+  - Arch Linux
+  - Linux Mint
+  # Include code blocks
+  code_blocks: false
+
+# MD046/code-block-style - Code block style
+MD046:
+  # Block style
+  style: "fenced"
+
+# MD048/code-fence-style - Code fence style
+MD048:
+  # Code fence syle
+  style: "backtick"
\ No newline at end of file
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 0000000..20f11b8
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,44 @@
+# Maintainer: Markus Pesch <markus.pesch plus apps at cryptic.systems>
+
+pkgname=shellyctl
+pkgver=0.4.0 # renovate: datasource=github-releases depName=jcodybaker/shellyctl
+pkgrel=1
+pkgdesc="shellyctl is an unofficial command line client for the Shelly Gen2/3 API. "
+arch=('armv7h' 'aarch64' 'x86_64')
+url="https://github.com/jcodybaker/$pkgname"
+license=('MIT')
+makedepends=('go')
+
+source=(
+  "$url/archive/refs/tags/v$pkgver.zip"
+)
+sha512sums=('fd997360d5a1804c642422833c602966acd196dc6668d596b5a1d6eefbd619a54154e5a355b705383900374d284e9eef0066c16d9c997c893bddcd4a30ebd647')
+b2sums=('394f831886dd0cf11c8b66feaa0f8a4511a322bdd44eb3cb06794d18b7f215694be00795e96225fe340d945421ec584d6af2afb9fdf1ad1b131d1bd01fc22a55')
+
+build() {
+  cd "$pkgname-$pkgver"
+
+  # https://wiki.archlinux.org/title/Go_package_guidelines
+  export CGO_CPPFLAGS="${CPPFLAGS}"
+  export CGO_CFLAGS="${CFLAGS}"
+  export CGO_CXXFLAGS="${CXXFLAGS}"
+  export CGO_LDFLAGS="${LDFLAGS}"
+  export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw"
+
+  go build -v \
+    -trimpath \
+    -buildmode=pie \
+    -mod=readonly \
+    -modcacherw \
+    -ldflags "-linkmode external -extldflags \"${LDFLAGS}\"" \
+    -o $pkgname \
+    .
+}
+
+package() {
+  # binary
+  install -D --mode 0755 --target-directory "$pkgdir/usr/bin" "$pkgname-$pkgver/$pkgname"
+
+  # license
+  install -D --mode 0755 --target-directory "$pkgdir/usr/share/licenses/$pkgname" "$pkgname-$pkgver/LICENSE.md"
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7828732
--- /dev/null
+++ b/README.md
@@ -0,0 +1,62 @@
+# shellyctl
+
+![AUR version](https://img.shields.io/aur/version/shellyctl?label=AUR)
+[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/shellyctl-pkg/status.svg)](https://drone.cryptic.systems/volker.raschek/shellyctl-pkg)
+![AUR votes](https://img.shields.io/aur/votes/shellyctl)
+
+This repository contains build files to build the Arch Linux package `shellyctl`. Instead of
+building the package yourself, it can also be obtained from the following private repository. More detailed are
+described [here](#obtaining-pre-built-packages-from-a-repository).
+
+## Build
+
+Clone this repository and use `makepkg` to build the package by yourself. For example:
+
+```bash
+git clone https://aur.archlinux.org/shellyctl.git
+cd shellyctl
+makepkg
+```
+
+## Yay
+
+The build files are also available via AUR and can be installed via an AUR helper like `yay`.
+
+```bash
+yay --sync --aur shellyctl
+```
+
+## Obtaining pre-built packages from a repository
+
+Instead of building the packages locally, it is also possible to configure an additional repository to install the
+package directly via `pacman`. The following commands are used to create the repository, configure the GPG key to verify
+the packages and install the package:
+
+```bash
+# Create drop-in directory
+sudo mkdir --parents /etc/pacman.d/repos
+
+# Create configuration of the repository 'volker.raschek'
+sudo tee /etc/pacman.d/repos/volker.raschek.conf > /dev/null <<'EOF'
+[volker.raschek]
+SigLevel = PackageRequired TrustedOnly
+Include = /etc/pacman.d/repos/volker.raschek.list
+EOF
+
+# Create mirror list of the repository 'volker.raschek'
+sudo tee /etc/pacman.d/repos/volker.raschek.list > /dev/null <<'EOF'
+Server = https://aur.cryptic.systems/$repo/$arch
+EOF
+
+# Import gpg key of the repository 'volker.raschek'
+sudo pacman-key --keyserver hkps://keys.openpgp.org --recv-keys 9B146D11A9ED6CA7E279EB1A852BCC170D81A982
+
+# Extend existing pacman configuration of the repository 'volker.raschek'
+sudo echo "Include = /etc/pacman.d/repos/*.conf" >> /etc/pacman.conf
+
+# Update pacman cache
+sudo pacman --sync --refresh
+
+# Install the package and receive updates directly via pacman :)
+sudo pacman --sync shellyctl
+```
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 0000000..865bbbf
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,25 @@
+{
+  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+  "assignees": [ "volker.raschek" ],
+  "labels": [ "renovate" ],
+  "packageRules": [
+    {
+      "addLabels": [ "renovate/droneci", "renovate/automerge" ],
+      "automerge": true,
+      "matchManagers": "droneci",
+      "matchUpdateTypes": [ "minor", "patch"]
+    }
+  ],
+  "rebaseLabel": "renovate/rebase",
+  "rebaseWhen": "behind-base-branch",
+  "regexManagers": [
+    {
+      "description": "Update PKGBUILD version",
+      "fileMatch": [ "(^|/)PKGBUILD$" ],
+      "matchStrings": [
+        "pkgver=(?<currentValue>.*) # renovate: datasource=(?<datasource>.*) depName=(?<depName>.*)( lookupName=(?<lookupName>.*))?( versioning=(?<versioning>.*))?"
+      ],
+      "extractVersionTemplate": "^v?(?<version>.*)$"
+    }
+  ]
+}