mirror of
https://github.com/placeholder-soft/asdf-foundry-zksync.git
synced 2026-01-12 15:14:13 +08:00
Generate asdf-foundry-zksync 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: forge --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-foundry-zksync [](https://github.com/caoer/asdf-foundry-zksync/actions/workflows/build.yml) [](https://github.com/caoer/asdf-foundry-zksync/actions/workflows/lint.yml)
|
||||||
|
|
||||||
|
[foundry-zksync](https://github.com/placeholder-soft/foundry-zksync) 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 foundry-zksync
|
||||||
|
# or
|
||||||
|
asdf plugin add foundry-zksync https://github.com/caoer/asdf-foundry-zksync.git
|
||||||
|
```
|
||||||
|
|
||||||
|
foundry-zksync:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Show all installable versions
|
||||||
|
asdf list-all foundry-zksync
|
||||||
|
|
||||||
|
# Install specific version
|
||||||
|
asdf install foundry-zksync latest
|
||||||
|
|
||||||
|
# Set a version globally (on your ~/.tool-versions file)
|
||||||
|
asdf global foundry-zksync latest
|
||||||
|
|
||||||
|
# Now foundry-zksync commands are available
|
||||||
|
forge --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-foundry-zksync/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 foundry-zksync https://github.com/caoer/asdf-foundry-zksync.git "forge --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 foundry-zksync.
|
||||||
|
GH_REPO="https://github.com/placeholder-soft/foundry-zksync"
|
||||||
|
TOOL_NAME="foundry-zksync"
|
||||||
|
TOOL_TEST="forge --version"
|
||||||
|
|
||||||
|
fail() {
|
||||||
|
echo -e "asdf-$TOOL_NAME: $*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_opts=(-fsSL)
|
||||||
|
|
||||||
|
# NOTE: You might want to remove this if foundry-zksync 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 foundry-zksync 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 foundry-zksync
|
||||||
|
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 foundry-zksync 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