prepare release of version 0.1.0

This commit is contained in:
Moritz Hölting 2024-10-01 12:29:50 +02:00
parent 84c348782a
commit 0dae705a20
9 changed files with 374 additions and 8 deletions

20
.github/workflows/publish.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: Publish
on:
release:
types: [created]
jobs:
publish:
name: Publish to crates.io
runs-on: ubuntu-latest
permissions:
contents: read
env:
CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
with:
key: publish
- run: cargo publish --token ${CRATES_TOKEN}

83
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,83 @@
name: Release
on:
release:
types: [created]
permissions:
contents: write
jobs:
release:
name: Building ${{ matrix.platform.os_name }}
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
platform:
- os_name: Linux-x86_64
os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os_name: Linux-aarch64
os: ubuntu-latest
target: aarch64-unknown-linux-musl
- os_name: Linux-arm
os: ubuntu-latest
target: arm-unknown-linux-musleabi
- os_name: Linux-i686
os: ubuntu-latest
target: i686-unknown-linux-musl
- os_name: Windows-aarch64
os: windows-latest
target: aarch64-pc-windows-msvc
- os_name: Windows-i686
os: windows-latest
target: i686-pc-windows-msvc
- os_name: Windows-x86_64
os: windows-latest
target: x86_64-pc-windows-msvc
- os_name: macOS-x86_64
os: macOS-latest
target: x86_64-apple-darwin
- os_name: macOS-aarch64
os: macOS-latest
target: aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- name: Cache cargo & target directories
uses: Swatinem/rust-cache@v2
with:
key: "release"
- name: Build binary
uses: houseabsolute/actions-rust-cross@v0
with:
command: "build"
target: ${{ matrix.platform.target }}
toolchain: stable
args:
"--locked --release"
strip: true
- name: Package as .tar.gz (Linux)
if: ${{ contains(matrix.platform.os, 'ubuntu') }}
run: |
mv target/${{ matrix.platform.target }}/release/shulkerscript ./shulkerscript
tar -czvf shulkerscript-${{ matrix.platform.target }}.tar.gz shulkerscript
echo UPLOAD_FILE=shulkerscript-${{ matrix.platform.target }}.tar.gz >> $GITHUB_ENV
- name: Package as .zip (Windows)
if: ${{ contains(matrix.platform.os, 'windows') }}
shell: bash
run: |
mv target/${{ matrix.platform.target }}/release/shulkerscript.exe ./shulkerscript.exe
pwsh -command ". 'Compress-Archive' shulkerscript.exe shulkerscript-${{ matrix.platform.target }}.zip"
echo UPLOAD_FILE=shulkerscript-${{ matrix.platform.target }}.zip >> $GITHUB_ENV
- name: Package as .zip (macOS)
if: ${{ contains(matrix.platform.os, 'macOS') }}
run: |
mv target/${{ matrix.platform.target }}/release/shulkerscript ./shulkerscript
zip shulkerscript-${{ matrix.platform.target }}.zip shulkerscript
echo UPLOAD_FILE=shulkerscript-${{ matrix.platform.target }}.zip >> $GITHUB_ENV
- name: Upload artifact to release
shell: bash
run: gh release upload ${{ github.event.release.tag_name }} $UPLOAD_FILE
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

19
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: Cargo test
on:
push:
branches:
- main
- development
- 'releases/**'
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
test:
name: Cargo test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: cargo test --verbose

View File

@ -9,6 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
### Changed
### Removed
## [0.1.0] - 2024-10-01
### Added
- Subcommand `init` to initialize a new project - Subcommand `init` to initialize a new project
- Creates a new project directory with default files - Creates a new project directory with default files
- Subcommand `build` to build a project - Subcommand `build` to build a project
@ -16,9 +24,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Allows changing the output directory and setting a assets directory - Allows changing the output directory and setting a assets directory
- Subcommand `clean` to clean the output directory - Subcommand `clean` to clean the output directory
- Subcommand `watch` to watch for changes and run a command - Subcommand `watch` to watch for changes and run a command
- Subcommand `migrate` to migrate a datapack to a shulkerscript project
- Subcommand `lang-debug` to debug the language parser - Subcommand `lang-debug` to debug the language parser
- Allows to print the parsed tokens, AST and shulkerbox datapack representation - Allows to print the parsed tokens, AST and shulkerbox datapack representation
### Changed [unreleased]: https://github.com/moritz-hoelting/shulkerscript-cli/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/moritz-hoelting/shulkerscript-cli/releases/tag/v0.1.0
### Removed

6
Cargo.lock generated
View File

@ -1171,7 +1171,8 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "shulkerbox" name = "shulkerbox"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/moritz-hoelting/shulkerbox?rev=6e956fbe7438158c6a29c1a92d057f0f3093405a#6e956fbe7438158c6a29c1a92d057f0f3093405a" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18704338e25effa7d02ab8d83c453814a54163b66464693bb4aac0012f05db8b"
dependencies = [ dependencies = [
"chksum-md5", "chksum-md5",
"getset", "getset",
@ -1183,7 +1184,8 @@ dependencies = [
[[package]] [[package]]
name = "shulkerscript" name = "shulkerscript"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/moritz-hoelting/shulkerscript-lang.git?rev=a9a8aff13b0ad0986ee1bdf3d44b74676385dfcd#a9a8aff13b0ad0986ee1bdf3d44b74676385dfcd" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1546b5164f154cb0ecb5b676d0f1beeb46b9417b785b2bc43b8e2d07caab01eb"
dependencies = [ dependencies = [
"chksum-md5", "chksum-md5",
"colored", "colored",

View File

@ -43,7 +43,7 @@ path-absolutize = "3.1.1"
pathdiff = "0.2.1" pathdiff = "0.2.1"
serde = { version = "1.0.210", features = ["derive"] } serde = { version = "1.0.210", features = ["derive"] }
serde_json = { version = "1.0.128", optional = true } serde_json = { version = "1.0.128", optional = true }
shulkerscript = { git = "https://github.com/moritz-hoelting/shulkerscript-lang.git", features = ["fs_access", "shulkerbox", "zip"], default-features = false, rev = "a9a8aff13b0ad0986ee1bdf3d44b74676385dfcd" } shulkerscript = { version = "0.1.0", features = ["fs_access", "shulkerbox", "zip"], default-features = false }
thiserror = "1.0.63" thiserror = "1.0.63"
toml = "0.8.19" toml = "0.8.19"
tracing = "0.1.40" tracing = "0.1.40"

View File

@ -3,12 +3,30 @@
This is a cli tool for the shulkerscript language. It can be used to initialize a new project, and to compile and package a project. This is a cli tool for the shulkerscript language. It can be used to initialize a new project, and to compile and package a project.
## Installation ## Installation
```bash
cargo install --git https://github.com/moritz-hoelting/shulkerscript-cli.git ### From release (Windows)
```powershell
iex (iwr "https://raw.githubusercontent.com/moritz-hoelting/shulkerscript-cli/main/install.ps1").Content
``` ```
### From release (Linux / macOS)
```bash
curl -sfSL https://raw.githubusercontent.com/moritz-hoelting/shulkerscript-cli/main/install.sh | bash
```
### From source
```bash
cargo install shulkerscript-cli
```
## VS Code Extension
A VS Code extension is available [here](https://marketplace.visualstudio.com/items?itemName=moritz-hoelting.shulkerscript-lang) to provide syntax highlighting and snippets for Shulkerscript files.
## Usage ## Usage
Read the [documentation](https://shulkerscript.hoelting.dev) for more information on the language and cli.
### Initialize a new project ### Initialize a new project
```bash ```bash
shulkerscript init [OPTIONS] [PATH] shulkerscript init [OPTIONS] [PATH]

119
install.ps1 Normal file
View File

@ -0,0 +1,119 @@
# Error setup
$ErrorActionPreference = "Stop"
Set-StrictMode -Version 3.0
Set-PSDebug -Strict
# Variables
$REPO = "moritz-hoelting/shulkerscript-cli"
$PROGRAM_DISPLAY_NAME = "Shulkerscript CLI"
$LATEST_RELEASE_URL = "https://api.github.com/repos/$REPO/releases/latest"
$BIN_NAME = "shulkerscript"
$INSTALL_PATH = Join-Path $env:USERPROFILE "AppData\Local\Programs\$BIN_NAME"
$PATH_REGISTRY = "Registry::HKEY_CURRENT_USER\Environment"
function Remove-Old-Version {
if ( (Test-Path variable:INSTALLED_VERSION) -and ($INSTALL_PATH -notlike "*\.cargo\bin*") ) {
Write-Host Removing old version at $INSTALL_PATH
Remove-Item -Path "$INSTALL_PATH" -Force -Recurse
}
}
# Determine the OS and architecture
$OS = 'windows'
$ARCH = $env:PROCESSOR_ARCHITECTURE
if ($ARCH -eq 'AMD64') {
$ARCH = 'x86_64'
} elseif ($ARCH -eq 'x86') {
$ARCH = 'i686'
} else {
Write-Host "Unsupported architecture: $ARCH" -ForegroundColor Red
exit 1
}
# Fetch the latest release data from GitHub
try {
$LATEST_RELEASE_DATA = Invoke-RestMethod -Uri $LATEST_RELEASE_URL -Method Get
}
catch {
Write-Host "Failed to fetch latest release data." -ForegroundColor Red
exit 1
}
# Get the latest version number
$LATEST_VERSION = $LATEST_RELEASE_DATA.tag_name
# Check if the CLI is already installed and get the current version
if (Get-Command $BIN_NAME -ErrorAction Ignore) {
$INSTALLED_VERSION = (& $BIN_NAME --version | Select-String -Pattern '\d+\.\d+\.\d+(-(rc|beta|alpha)(\.\d+)?)?' | Select-Object -First 1).Matches.Value
$CLEAN_LATEST_VERSION = (Write-Output $LATEST_VERSION | Select-String -Pattern '\d+\.\d+\.\d+(-(rc|beta|alpha)(\.\d+)?)?').Matches.Value
Write-Host "Installed version: v$INSTALLED_VERSION"
Write-Host "Latest version: v$CLEAN_LATEST_VERSION"
if ($INSTALLED_VERSION -eq $CLEAN_LATEST_VERSION) {
Write-Host "$PROGRAM_DISPLAY_NAME is already up to date."
exit 0
}
else {
Write-Host "A new version is available. Upgrading..."
$INSTALL_PATH = Split-Path -Parent (Get-Command $BIN_NAME).Path
}
}
else {
Write-Host "$PROGRAM_DISPLAY_NAME is not installed. Installing version $LATEST_VERSION..."
}
# Use cargo-binstall if available
if (Get-Command cargo-binstall -ErrorAction SilentlyContinue) {
Write-Host "cargo-binstall is available. Installing/upgrading using cargo-binstall..."
cargo-binstall --git "https://github.com/$REPO" --force --locked --no-confirm $BIN_NAME
Remove-Old-Version
exit 0
}
# Get the download url of the latest release
$DOWNLOAD_URL = ($LATEST_RELEASE_DATA.assets | Where-Object {$_.browser_download_url -match "$OS" -and $_.browser_download_url -match "$ARCH"} | Select-Object -First 1).browser_download_url
if ([string]::IsNullOrEmpty($DOWNLOAD_URL)) {
# if there is no prebuilt binary, try to build from source
if (Get-Command cargo -ErrorAction SilentlyContinue) {
Write-Host "No prebuilt binary available for your platform. Building from source..."
cargo install --git "https://github.com/$REPO" --force --locked
Remove-Old-Version
exit 0
}
else {
Write-Host "No prebuilt binary available for your platform. Please install Rust and Cargo using https://rustup.rs and try again."
exit 1
}
}
# Create a temporary directory
$TEMP = [System.IO.Path]::GetTempPath()
$TEMP_DIR = Join-Path $TEMP (New-Guid).ToString("N")
Remove-Item -Path "$TEMP_DIR" -Recurse -Force -ErrorAction Ignore | Out-Null
New-Item -ItemType Directory -Path $TEMP_DIR | Out-Null
# Download and extract the binary
Invoke-WebRequest -Uri $DOWNLOAD_URL -OutFile "$TEMP_DIR\$BIN_NAME.zip"
Expand-Archive -Path "$TEMP_DIR\$BIN_NAME.zip" -DestinationPath $TEMP_DIR -Force
# Create install location and move binary
New-Item -ItemType Directory -Path $INSTALL_PATH -Force | Out-Null
Move-Item -Path "$TEMP_DIR\$BIN_NAME.exe" -Destination "$INSTALL_PATH\$BIN_NAME.exe" -Force
# Remove temp dir
Remove-Item -Path "$TEMP_DIR" -Recurse -Force -ErrorAction Ignore | Out-Null
# Add binary to PATH
$REGEX_INSTALL_PATH = [regex]::Escape($INSTALL_PATH)
$ARR_PATH = $env:Path -split ';' | Where-Object {$_ -match "^$REGEX_INSTALL_PATH\\?"}
if (-not $ARR_PATH) {
Write-Host "Not found in current PATH, adding..."
$OLD_PATH = (Get-ItemProperty -Path "$PATH_REGISTRY" -Name PATH).path
$NEW_PATH = "$OLD_PATH;$INSTALL_PATH"
Set-ItemProperty -Path "$PATH_REGISTRY" -Name PATH -Value $NEW_PATH
$env:PATH="$NEW_PATH"
}
Write-Host "$PROGRAM_DISPLAY_NAME has been successfully installed/upgraded to version $LATEST_VERSION."

97
install.sh Normal file
View File

@ -0,0 +1,97 @@
#!/bin/bash
# Error setup
set -euo pipefail
# Variables
REPO="moritz-hoelting/shulkerscript-cli"
PROGRAM_DISPLAY_NAME="Shulkerscript CLI"
LATEST_RELEASE_URL="https://api.github.com/repos/$REPO/releases/latest"
BIN_NAME="shulkerscript"
INSTALL_PATH="$HOME/bin/$BIN_NAME"
function removeOldVersion() {
if [ ! -z ${INSTALLED_VERSION+x} ] && [[ $INSTALL_PATH != *"/.cargo/bin/"* ]]; then
rm -f $INSTALL_PATH
hash -d $BIN_NAME &> /dev/null || true
fi
}
# Determine the OS and architecture
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
# Fetch the latest release data from GitHub
LATEST_RELEASE_DATA=$(curl -s $LATEST_RELEASE_URL)
# Get the latest version number
LATEST_VERSION=$(echo "$LATEST_RELEASE_DATA" | grep 'tag_name' | cut -d '"' -f 4)
# Check if the CLI is already installed and get the current version
if which $BIN_NAME &> /dev/null; then
INSTALLED_VERSION=$($BIN_NAME --version | grep -m 1 -oE '[0-9]+\.[0-9]+\.[0-9]+(-(rc|beta|alpha)(\.\d+)?)?')
CLEAN_LATEST_VERSION=$(echo $LATEST_VERSION | grep -oE '[0-9]+\.[0-9]+\.[0-9]+(-(rc|beta|alpha)(\.\d+)?)?')
echo "Installed version: v$INSTALLED_VERSION"
echo "Latest version: v$CLEAN_LATEST_VERSION"
if [ "$INSTALLED_VERSION" == "$CLEAN_LATEST_VERSION" ]; then
echo "$PROGRAM_DISPLAY_NAME is already up to date."
exit 0
else
echo "A new version is available. Upgrading..."
INSTALL_PATH=$(which $BIN_NAME)
fi
else
echo "$PROGRAM_DISPLAY_NAME is not installed. Installing version $LATEST_VERSION..."
fi
# Use cargo-binstall if available
if which cargo-binstall &> /dev/null; then
echo "Found cargo-binstall. Installing/upgrading using cargo-binstall..."
cargo-binstall --git "https://github.com/$REPO" --force --locked --no-confirm $BIN_NAME
# Remove old version
removeOldVersion
exit 0
fi
# Get the download url of the latest release
DOWNLOAD_URL=$(echo "$LATEST_RELEASE_DATA" | awk "/browser_download_url/ && /$OS/ && /$ARCH/" | cut -d '"' -f 4)
if [ -z "$DOWNLOAD_URL" ]; then
# if there is no prebuilt binary, try to build from source
if which cargo &> /dev/null; then
echo "No prebuilt binary available for your platform. Building from source..."
cargo install --git "https://github.com/$REPO" --force --locked
removeOldVersion
exit 0
else
echo "No prebuilt binary available for your platform. Please install Rust and Cargo using https://rustup.rs and try again."
exit 1
fi
fi
if [[ "$DOWNLOAD_URL" == *"tar.gz" ]]; then
ARCHIVE_TYPE="tar.gz"
elif [[ "$DOWNLOAD_URL" == *"zip" ]]; then
ARCHIVE_TYPE="zip"
else
echo "Unsupported archive type."
exit 1
fi
# Create a temporary directory
TEMP_DIR=$(mktemp -d)
# Download and extract the binary
curl -L -s $DOWNLOAD_URL -o $TEMP_DIR/$BIN_NAME.$ARCHIVE_TYPE
if [[ "$ARCHIVE_TYPE" == "tar.gz" ]]; then
tar -xzf $TEMP_DIR/$BIN_NAME.$ARCHIVE_TYPE -C $TEMP_DIR
else
unzip $TEMP_DIR/$BIN_NAME.$ARCHIVE_TYPE -d $TEMP_DIR
fi
chmod +x "$TEMP_DIR/$BIN_NAME"
mv "$TEMP_DIR/$BIN_NAME" "$INSTALL_PATH"
echo "$PROGRAM_DISPLAY_NAME has been successfully installed/upgraded to version $LATEST_VERSION."