mirror of
https://github.com/placeholder-soft/asdf-sui.git
synced 2026-01-12 07:04:08 +08:00
Generate asdf-sui plugin from template.
This commit is contained in:
12
.editorconfig
Normal file
12
.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.{md,yml,yaml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
27
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
27
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ""
|
||||
labels: bug
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
**Steps to reproduce**
|
||||
|
||||
<!-- Steps to reproduce the behavior: -->
|
||||
|
||||
**Expected behavior**
|
||||
|
||||
<!-- A clear and concise description of what you expected to happen. -->
|
||||
|
||||
**Screenshots**
|
||||
|
||||
<!-- If applicable, add screenshots to help explain your problem. -->
|
||||
|
||||
**Additional context**
|
||||
|
||||
<!-- Add any other context about the problem here. -->
|
||||
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ""
|
||||
labels: enhancement
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
|
||||
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
<!-- A clear and concise description of what you want to happen. -->
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
|
||||
|
||||
**Additional context**
|
||||
|
||||
<!-- Add any other context or screenshots about the feature request here. -->
|
||||
34
.github/PULL_REQUEST/pull_request_template.md
vendored
Normal file
34
.github/PULL_REQUEST/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<!--- Provide a general summary of your changes in the Title above -->
|
||||
|
||||
## Description
|
||||
|
||||
<!--- Describe your changes in detail -->
|
||||
|
||||
## Motivation and Context
|
||||
|
||||
<!--- Why is this change required? What problem does it solve? -->
|
||||
<!--- If it fixes an open issue, please link to the issue here. -->
|
||||
|
||||
## Types of changes
|
||||
|
||||
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
||||
|
||||
## Usage examples
|
||||
|
||||
<!--- Provide examples of intended usage -->
|
||||
|
||||
## How Has This Been Tested?
|
||||
|
||||
<!--- Please describe in detail how you tested your changes. -->
|
||||
|
||||
## Checklist
|
||||
|
||||
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
||||
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||
|
||||
- [ ] I have updated the documentation accordingly.
|
||||
- [ ] I have added tests to cover my changes.
|
||||
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
22
.github/workflows/build.yml
vendored
Normal file
22
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
plugin_test:
|
||||
name: asdf plugin test
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- macos-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: asdf_plugin_test
|
||||
uses: asdf-vm/actions/plugin-test@v2
|
||||
with:
|
||||
command: sui --version
|
||||
24
.github/workflows/lint.yml
vendored
Normal file
24
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: asdf-vm/actions/install@v2
|
||||
- run: scripts/lint.bash
|
||||
|
||||
actionlint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Check workflow files
|
||||
uses: docker://rhysd/actionlint:1.6.23
|
||||
with:
|
||||
args: -color
|
||||
18
.github/workflows/release.yml
vendored
Normal file
18
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: GoogleCloudPlatform/release-please-action@v3
|
||||
with:
|
||||
release-type: simple
|
||||
18
.github/workflows/semantic-pr.yml
vendored
Normal file
18
.github/workflows/semantic-pr.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- edited
|
||||
- synchronize
|
||||
|
||||
jobs:
|
||||
semantic-pr:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: amannn/action-semantic-pull-request@v5.2.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
validateSingleCommit: true
|
||||
2
.tool-versions
Normal file
2
.tool-versions
Normal file
@@ -0,0 +1,2 @@
|
||||
shellcheck 0.9.0
|
||||
shfmt 3.6.0
|
||||
22
LICENSE
Normal file
22
LICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) [year] [fullname]
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
60
README.md
Normal file
60
README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
<div align="center">
|
||||
|
||||
# asdf-sui [](https://github.com/caoer/asdf-sui/actions/workflows/build.yml) [](https://github.com/caoer/asdf-sui/actions/workflows/lint.yml)
|
||||
|
||||
[sui](https://github.com/placeholder-soft/asdf-sui) plugin for the [asdf version manager](https://asdf-vm.com).
|
||||
|
||||
</div>
|
||||
|
||||
# Contents
|
||||
|
||||
- [Dependencies](#dependencies)
|
||||
- [Install](#install)
|
||||
- [Contributing](#contributing)
|
||||
- [License](#license)
|
||||
|
||||
# Dependencies
|
||||
|
||||
**TODO: adapt this section**
|
||||
|
||||
- `bash`, `curl`, `tar`, and [POSIX utilities](https://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html).
|
||||
- `SOME_ENV_VAR`: set this environment variable in your shell config to load the correct version of tool x.
|
||||
|
||||
# Install
|
||||
|
||||
Plugin:
|
||||
|
||||
```shell
|
||||
asdf plugin add sui
|
||||
# or
|
||||
asdf plugin add sui https://github.com/caoer/asdf-sui.git
|
||||
```
|
||||
|
||||
sui:
|
||||
|
||||
```shell
|
||||
# Show all installable versions
|
||||
asdf list-all sui
|
||||
|
||||
# Install specific version
|
||||
asdf install sui latest
|
||||
|
||||
# Set a version globally (on your ~/.tool-versions file)
|
||||
asdf global sui latest
|
||||
|
||||
# Now sui commands are available
|
||||
sui --version
|
||||
```
|
||||
|
||||
Check [asdf](https://github.com/asdf-vm/asdf) readme for more instructions on how to
|
||||
install & manage versions.
|
||||
|
||||
# Contributing
|
||||
|
||||
Contributions of any kind welcome! See the [contributing guide](contributing.md).
|
||||
|
||||
[Thanks goes to these contributors](https://github.com/caoer/asdf-sui/graphs/contributors)!
|
||||
|
||||
# License
|
||||
|
||||
See [LICENSE](LICENSE) © [Zitao Xiong](https://github.com/caoer/)
|
||||
23
bin/download
Executable file
23
bin/download
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
current_script_path=${BASH_SOURCE[0]}
|
||||
plugin_dir=$(dirname "$(dirname "$current_script_path")")
|
||||
|
||||
# shellcheck source=./lib/utils.bash
|
||||
source "${plugin_dir}/lib/utils.bash"
|
||||
|
||||
mkdir -p "$ASDF_DOWNLOAD_PATH"
|
||||
|
||||
# TODO: Adapt this to proper extension and adapt extracting strategy.
|
||||
release_file="$ASDF_DOWNLOAD_PATH/$TOOL_NAME-$ASDF_INSTALL_VERSION.tar.gz"
|
||||
|
||||
# Download tar.gz file to the download directory
|
||||
download_release "$ASDF_INSTALL_VERSION" "$release_file"
|
||||
|
||||
# Extract contents of tar.gz file into the download directory
|
||||
tar -xzf "$release_file" -C "$ASDF_DOWNLOAD_PATH" --strip-components=1 || fail "Could not extract $release_file"
|
||||
|
||||
# Remove the tar.gz file since we don't need to keep it
|
||||
rm "$release_file"
|
||||
11
bin/install
Executable file
11
bin/install
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
current_script_path=${BASH_SOURCE[0]}
|
||||
plugin_dir=$(dirname "$(dirname "$current_script_path")")
|
||||
|
||||
# shellcheck source=./lib/utils.bash
|
||||
source "${plugin_dir}/lib/utils.bash"
|
||||
|
||||
install_version "$ASDF_INSTALL_TYPE" "$ASDF_INSTALL_VERSION" "$ASDF_INSTALL_PATH"
|
||||
29
bin/latest-stable
Executable file
29
bin/latest-stable
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
current_script_path=${BASH_SOURCE[0]}
|
||||
plugin_dir=$(dirname "$(dirname "$current_script_path")")
|
||||
|
||||
# shellcheck source=./lib/utils.bash
|
||||
. "${plugin_dir}/lib/utils.bash"
|
||||
|
||||
curl_opts=(-sI)
|
||||
|
||||
if [ -n "${GITHUB_API_TOKEN:-}" ]; then
|
||||
curl_opts=("${curl_opts[@]}" -H "Authorization: token $GITHUB_API_TOKEN")
|
||||
fi
|
||||
|
||||
# curl of REPO/releases/latest is expected to be a 302 to another URL
|
||||
# when no releases redirect_url="REPO/releases"
|
||||
# when there are releases redirect_url="REPO/releases/tag/v<VERSION>"
|
||||
redirect_url=$(curl "${curl_opts[@]}" "$GH_REPO/releases/latest" | sed -n -e "s|^location: *||p" | sed -n -e "s|\r||p")
|
||||
version=
|
||||
printf "redirect url: %s\n" "$redirect_url" >&2
|
||||
if [[ "$redirect_url" == "$GH_REPO/releases" ]]; then
|
||||
version="$(list_all_versions | sort_versions | tail -n1 | xargs echo)"
|
||||
else
|
||||
version="$(printf "%s\n" "$redirect_url" | sed 's|.*/tag/v\{0,1\}||')"
|
||||
fi
|
||||
|
||||
printf "%s\n" "$version"
|
||||
11
bin/list-all
Executable file
11
bin/list-all
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
current_script_path=${BASH_SOURCE[0]}
|
||||
plugin_dir=$(dirname "$(dirname "$current_script_path")")
|
||||
|
||||
# shellcheck source=./lib/utils.bash
|
||||
source "${plugin_dir}/lib/utils.bash"
|
||||
|
||||
list_all_versions | sort_versions | xargs echo
|
||||
12
contributing.md
Normal file
12
contributing.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Contributing
|
||||
|
||||
Testing Locally:
|
||||
|
||||
```shell
|
||||
asdf plugin test <plugin-name> <plugin-url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git-ref>] [test-command*]
|
||||
|
||||
# TODO: adapt this
|
||||
asdf plugin test sui https://github.com/caoer/asdf-sui.git "sui --version"
|
||||
```
|
||||
|
||||
Tests are automatically run in GitHub Actions on push and PR.
|
||||
74
lib/utils.bash
Normal file
74
lib/utils.bash
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# TODO: Ensure this is the correct GitHub homepage where releases can be downloaded for sui.
|
||||
GH_REPO="https://github.com/placeholder-soft/asdf-sui"
|
||||
TOOL_NAME="sui"
|
||||
TOOL_TEST="sui --version"
|
||||
|
||||
fail() {
|
||||
echo -e "asdf-$TOOL_NAME: $*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
curl_opts=(-fsSL)
|
||||
|
||||
# NOTE: You might want to remove this if sui is not hosted on GitHub releases.
|
||||
if [ -n "${GITHUB_API_TOKEN:-}" ]; then
|
||||
curl_opts=("${curl_opts[@]}" -H "Authorization: token $GITHUB_API_TOKEN")
|
||||
fi
|
||||
|
||||
sort_versions() {
|
||||
sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z\1/; s/$/.z/; G; s/\n/ /' |
|
||||
LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}'
|
||||
}
|
||||
|
||||
list_github_tags() {
|
||||
git ls-remote --tags --refs "$GH_REPO" |
|
||||
grep -o 'refs/tags/.*' | cut -d/ -f3- |
|
||||
sed 's/^v//' # NOTE: You might want to adapt this sed to remove non-version strings from tags
|
||||
}
|
||||
|
||||
list_all_versions() {
|
||||
# TODO: Adapt this. By default we simply list the tag names from GitHub releases.
|
||||
# Change this function if sui has other means of determining installable versions.
|
||||
list_github_tags
|
||||
}
|
||||
|
||||
download_release() {
|
||||
local version filename url
|
||||
version="$1"
|
||||
filename="$2"
|
||||
|
||||
# TODO: Adapt the release URL convention for sui
|
||||
url="$GH_REPO/archive/v${version}.tar.gz"
|
||||
|
||||
echo "* Downloading $TOOL_NAME release $version..."
|
||||
curl "${curl_opts[@]}" -o "$filename" -C - "$url" || fail "Could not download $url"
|
||||
}
|
||||
|
||||
install_version() {
|
||||
local install_type="$1"
|
||||
local version="$2"
|
||||
local install_path="${3%/bin}/bin"
|
||||
|
||||
if [ "$install_type" != "version" ]; then
|
||||
fail "asdf-$TOOL_NAME supports release installs only"
|
||||
fi
|
||||
|
||||
(
|
||||
mkdir -p "$install_path"
|
||||
cp -r "$ASDF_DOWNLOAD_PATH"/* "$install_path"
|
||||
|
||||
# TODO: Assert sui executable exists.
|
||||
local tool_cmd
|
||||
tool_cmd="$(echo "$TOOL_TEST" | cut -d' ' -f1)"
|
||||
test -x "$install_path/$tool_cmd" || fail "Expected $install_path/$tool_cmd to be executable."
|
||||
|
||||
echo "$TOOL_NAME $version installation was successful!"
|
||||
) || (
|
||||
rm -rf "$install_path"
|
||||
fail "An error occurred while installing $TOOL_NAME $version."
|
||||
)
|
||||
}
|
||||
4
scripts/format.bash
Executable file
4
scripts/format.bash
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
shfmt --language-dialect bash --write \
|
||||
./**/*
|
||||
9
scripts/lint.bash
Executable file
9
scripts/lint.bash
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
shellcheck --shell=bash --external-sources \
|
||||
bin/* --source-path=template/lib/ \
|
||||
lib/* \
|
||||
scripts/*
|
||||
|
||||
shfmt --language-dialect bash --diff \
|
||||
./**/*
|
||||
0
version.txt
Normal file
0
version.txt
Normal file
Reference in New Issue
Block a user