Compare commits
18 commits
dcaffe2e75
...
3cd1ff30a8
Author | SHA1 | Date | |
---|---|---|---|
3cd1ff30a8 | |||
27cdc5104b | |||
c4abd27ac7 | |||
6b88318bcd | |||
96f2dce50f | |||
f786b40961 | |||
8caf790529 | |||
e6c974120b | |||
38181e8e00 | |||
8adbd23569 | |||
e3a7732837 | |||
d9d3c9b863 | |||
808bc48ab9 | |||
6ebdd6aa31 | |||
2ff29317e5 | |||
84333d05cd | |||
3a8997ca5c | |||
8212600d40 |
14 changed files with 208 additions and 36 deletions
22
.github/workflows/build.yml
vendored
Normal file
22
.github/workflows/build.yml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- .github/workflows/build.yml
|
||||||
|
- build.gradle
|
||||||
|
- settings.gradle
|
||||||
|
- src/**
|
||||||
|
- launcher/build.gradle
|
||||||
|
- launcher/src/**
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: antville
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile with Gradle
|
||||||
|
run: ./gradlew :compileJava
|
23
.github/workflows/release.yml
vendored
23
.github/workflows/release.yml
vendored
|
@ -9,16 +9,27 @@ permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
release:
|
||||||
runs-on: antville
|
runs-on: antville
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
LC_TIME: en_US.UTF-8
|
LC_TIME: en_US.UTF-8
|
||||||
TODAY: $(date +'%d %b %Y')
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Create release notes
|
||||||
|
id: create_release_notes
|
||||||
|
run: |
|
||||||
|
release_notes=$(npx git-cliff@latest --latest)
|
||||||
|
# Write the release notes as a heredoc to the workflow output
|
||||||
|
# ⚠️ No white space around `<<` is crucial!
|
||||||
|
echo "release_notes<<.eot0x03" >> $GITHUB_OUTPUT
|
||||||
|
echo "$release_notes" >> $GITHUB_OUTPUT
|
||||||
|
echo ".eot0x03" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: ./gradlew assembleDist
|
run: ./gradlew assembleDist
|
||||||
|
@ -29,17 +40,17 @@ jobs:
|
||||||
direction: upload
|
direction: upload
|
||||||
url: https://code.host.antville.org
|
url: https://code.host.antville.org
|
||||||
token: ${{ github.token }}
|
token: ${{ github.token }}
|
||||||
title: ${{ env.TODAY }}
|
title: Helma ${{ github.ref_name }}
|
||||||
release-dir: build/distributions
|
release-dir: build/distributions
|
||||||
release-notes-assistant: true
|
release-notes: ${{ steps.create_release_notes.outputs.release_notes }}
|
||||||
verbose: true
|
verbose: true
|
||||||
|
|
||||||
- name: Create release at GitHub
|
- name: Create release at GitHub
|
||||||
run: |
|
run: |
|
||||||
gh release create "$GITHUB_REF_NAME" \
|
gh release create "$GITHUB_REF_NAME" \
|
||||||
--repo "$GITHUB_REPOSITORY" \
|
--repo "$GITHUB_REPOSITORY" \
|
||||||
--title "${{ env.TODAY }}" \
|
--title "Helma ${{ github.ref_name }}" \
|
||||||
--generate-notes
|
--notes "${{ steps.create_release_notes.outputs.release_notes }}"
|
||||||
|
|
||||||
- name: Upload release assets to GitHub
|
- name: Upload release assets to GitHub
|
||||||
run: |
|
run: |
|
||||||
|
|
32
.gitignore
vendored
32
.gitignore
vendored
|
@ -1,22 +1,30 @@
|
||||||
.gradle
|
# Generally ignore hidden files
|
||||||
.idea
|
.*
|
||||||
.settings
|
|
||||||
build
|
|
||||||
|
|
||||||
/apps
|
# Manage some Codium configuration
|
||||||
|
.vscode/*
|
||||||
|
!.vscode
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
|
||||||
|
# Ignore files created during build or run
|
||||||
/bin
|
/bin
|
||||||
/backups
|
/backups
|
||||||
/db
|
build
|
||||||
/docs
|
/docs
|
||||||
/extras
|
|
||||||
/lib
|
/lib
|
||||||
/licenses
|
/licenses
|
||||||
/log
|
/log
|
||||||
|
|
||||||
|
# Ignore files managed in src/dist
|
||||||
|
/*.properties
|
||||||
|
/apps
|
||||||
|
/db
|
||||||
|
/extras
|
||||||
|
/launcher.jar
|
||||||
/static
|
/static
|
||||||
|
|
||||||
/*.properties
|
# Manage Gradle configuration
|
||||||
/launcher.jar
|
|
||||||
/passwd
|
|
||||||
/start.*
|
|
||||||
|
|
||||||
!/gradle.properties
|
!/gradle.properties
|
||||||
|
|
21
.vscode/launch.json
vendored
Normal file
21
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "java",
|
||||||
|
"name": "Current File",
|
||||||
|
"request": "launch",
|
||||||
|
"mainClass": "${file}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "java",
|
||||||
|
"name": "Debug",
|
||||||
|
"request": "launch",
|
||||||
|
"mainClass": "helma.main.Server",
|
||||||
|
"projectName": "helma_"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
# License
|
# License
|
||||||
|
|
||||||
Copyright (c) 1999-2008 Helma Project. All rights reserved.
|
Copyright (c) 1999-2025 Helma Project. All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
## TL;DR
|
## TL;DR
|
||||||
|
|
||||||
- Make sure you have Java 11 or higher installed
|
- Make sure you have Java 11 or higher installed
|
||||||
- Download and unpack the [latest release](https://github.com/antville/helma/releases)
|
- Download and unpack the [latest release](https://code.host.antville.org/antville/helma/releases)
|
||||||
- Invoke `./bin/helma`, resp. `./bin/helma.bat`, depending on your platform
|
- Invoke `./bin/helma`, resp. `./bin/helma.bat`, depending on your platform
|
||||||
- Direct your web browser to <http://localhost:8080>
|
- Direct your web browser to <http://localhost:8080>
|
||||||
|
|
||||||
|
|
17
build.gradle
17
build.gradle
|
@ -42,15 +42,6 @@ if (JavaVersion.current().isJava8Compatible()) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main {
|
|
||||||
java {
|
|
||||||
// Sources in `src` will be available here after processing
|
|
||||||
srcDirs = ["$buildDir/src/main/java"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
// Wrapping implementation because it does not allow access to its files
|
// Wrapping implementation because it does not allow access to its files
|
||||||
// (i.e. cannot be resolved)
|
// (i.e. cannot be resolved)
|
||||||
|
@ -156,9 +147,11 @@ installDist {
|
||||||
dependsOn build
|
dependsOn build
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('processSource', Sync) {
|
def processSource = tasks.register('processSource', Sync) {
|
||||||
def gitOutput = new ByteArrayOutputStream()
|
def gitOutput = new ByteArrayOutputStream()
|
||||||
|
|
||||||
|
outputs.dir "${project.buildDir}/src"
|
||||||
|
|
||||||
exec {
|
exec {
|
||||||
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
||||||
standardOutput = gitOutput
|
standardOutput = gitOutput
|
||||||
|
@ -173,9 +166,11 @@ tasks.register('processSource', Sync) {
|
||||||
.replaceAll('__builddate__', new Date().format("d MMM yyyy"))
|
.replaceAll('__builddate__', new Date().format("d MMM yyyy"))
|
||||||
.replaceAll('__commithash__', gitOutput.toString().trim())
|
.replaceAll('__commithash__', gitOutput.toString().trim())
|
||||||
.replaceAll('__version__', version)
|
.replaceAll('__version__', version)
|
||||||
} into "${project.buildDir}/src"
|
} into outputs.files.singleFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.compileJava.source = processSource.map { it.outputs.files }
|
||||||
|
|
||||||
tasks.register('update') {
|
tasks.register('update') {
|
||||||
dependsOn installDist
|
dependsOn installDist
|
||||||
|
|
||||||
|
|
52
cliff.toml
Normal file
52
cliff.toml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# git-cliff ~ default configuration file
|
||||||
|
# https://git-cliff.org/docs/configuration
|
||||||
|
#
|
||||||
|
# Lines starting with "#" are comments.
|
||||||
|
# Configuration options are organized into tables and keys.
|
||||||
|
# See documentation for more information on available options.
|
||||||
|
|
||||||
|
[changelog]
|
||||||
|
trim = true
|
||||||
|
|
||||||
|
header = "## Changes"
|
||||||
|
|
||||||
|
body = """
|
||||||
|
{% for group, commits in commits | filter(attribute="merge_commit") | group_by(attribute="group") %}
|
||||||
|
### {{ group | striptags | trim | upper_first }}
|
||||||
|
{% for commit in commits %}
|
||||||
|
* [<tt>{{ commit.id | split(pat="") | slice(end=11) | join() }}</tt>]\
|
||||||
|
(https://code.host.antville.org/antville/helma/commit/{{ commit.id }}) \
|
||||||
|
{% if commit.breaking %}**Breaking:** {% endif %}\
|
||||||
|
{{ commit.message | split(pat="\\n") | first | upper_first | escape }}\
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
**Full Changelog:** [{{ previous.version }} → {{ version }}]\
|
||||||
|
(https://code.host.antville.org/antville/helma/compare/\
|
||||||
|
{{ previous.version | urlencode }}..{{ version | urlencode }})\n\n
|
||||||
|
"""
|
||||||
|
|
||||||
|
footer = """
|
||||||
|
Generated by [git-cliff](https://git-cliff.org/).
|
||||||
|
"""
|
||||||
|
|
||||||
|
[git]
|
||||||
|
conventional_commits = false
|
||||||
|
filter_commits = false
|
||||||
|
filter_unconventional = false
|
||||||
|
protect_breaking_commits = false
|
||||||
|
sort_commits = "newest"
|
||||||
|
split_commits = false
|
||||||
|
topo_order = false
|
||||||
|
|
||||||
|
commit_parsers = [
|
||||||
|
{ message = "^Apply \\d+ suggestion", skip = true },
|
||||||
|
{ message = "^Merge .*(branch|dependabot|dependency|renovate)", skip = true },
|
||||||
|
{ message = "^Lock file maintenance", skip = true },
|
||||||
|
{ message = "yarn\\.lock", skip = true },
|
||||||
|
|
||||||
|
{ message = "^[Ff]ix", group = "<!-- 0 --> 🐛 Bug Fixes" },
|
||||||
|
{ field = "author.name", pattern = "[Rr]enovate|[Dd]ependabot", group = "<!-- 3 --> 📦 Dependency Updates" },
|
||||||
|
{ message = "^Merge pull request", group = "<!-- 1 --> 🔀 Merges" },
|
||||||
|
{ message = ".*", group = "<!-- 2 --> Uncategorized" },
|
||||||
|
]
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
4
gradlew
vendored
4
gradlew
vendored
|
@ -114,7 +114,7 @@ case "$( uname )" in #(
|
||||||
NONSTOP* ) nonstop=true ;;
|
NONSTOP* ) nonstop=true ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
CLASSPATH="\\\"\\\""
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
|
@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
-classpath "$CLASSPATH" \
|
-classpath "$CLASSPATH" \
|
||||||
org.gradle.wrapper.GradleWrapperMain \
|
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
# Stop when "xargs" is not available.
|
# Stop when "xargs" is not available.
|
||||||
|
|
4
gradlew.bat
vendored
4
gradlew.bat
vendored
|
@ -70,11 +70,11 @@ goto fail
|
||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
set CLASSPATH=
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|
|
@ -16,3 +16,6 @@ project(':modules').projectDir = file('modules/helma')
|
||||||
project(':jala').projectDir = file('modules/jala')
|
project(':jala').projectDir = file('modules/jala')
|
||||||
project(':hopKit').projectDir = file('modules/jala/util/HopKit')
|
project(':hopKit').projectDir = file('modules/jala/util/HopKit')
|
||||||
project(':test').projectDir = file('modules/jala/util/Test')
|
project(':test').projectDir = file('modules/jala/util/Test')
|
||||||
|
|
||||||
|
// Rename this project to prevent redundancy and renaming of main project (VSC does not care, though)
|
||||||
|
project(':modules').name = 'modules'
|
||||||
|
|
60
src/dist/extras/deploy.sh
vendored
Executable file
60
src/dist/extras/deploy.sh
vendored
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Use this script as forced command of an authorized SSH key:
|
||||||
|
# command="/home/helma/extras/deploy.sh" ssh-ed25519 AAAAC3NzaC…
|
||||||
|
|
||||||
|
# Define HELMA_HOST and ANTVILLE_HOST in this file
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
. "$HOME"/deploy.env
|
||||||
|
|
||||||
|
case "$SSH_ORIGINAL_COMMAND" in
|
||||||
|
ping)
|
||||||
|
echo pong
|
||||||
|
;;
|
||||||
|
|
||||||
|
deploy-helma)
|
||||||
|
rsync ./ "$HELMA_HOST":./ \
|
||||||
|
--archive --compress --delete --verbose \
|
||||||
|
--filter '+ /bin' \
|
||||||
|
--filter '+ /extras' \
|
||||||
|
--filter '+ /launcher.jar' \
|
||||||
|
--filter '- /lib/ext' \
|
||||||
|
--filter '+ /lib' \
|
||||||
|
--filter '+ /modules' \
|
||||||
|
--filter '- /*'
|
||||||
|
printf 'Restarting Helma on HELMA_host… '
|
||||||
|
ssh "$HELMA_HOST" sudo /bin/systemctl restart helma
|
||||||
|
;;
|
||||||
|
|
||||||
|
deploy-antville)
|
||||||
|
rsync ./apps/antville/ "$ANTVILLE_HOST":./apps/antville/ \
|
||||||
|
--archive --compress --delete --verbose \
|
||||||
|
--filter '+ /claustra' \
|
||||||
|
--filter '+ /code' \
|
||||||
|
--filter '+ /compat' \
|
||||||
|
--filter '+ /i18n' \
|
||||||
|
--filter '+ /lib' \
|
||||||
|
--filter '- /*'
|
||||||
|
rsync ./apps/antville/static/helma/ "$ANTVILLE_HOST":./apps/antville/static/helma/ \
|
||||||
|
--archive --compress --verbose \
|
||||||
|
--filter '+ /fonts' \
|
||||||
|
--filter '+ /formica.html' \
|
||||||
|
--filter '+ /img' \
|
||||||
|
--filter '+ /scripts' \
|
||||||
|
--filter '+ /styles' \
|
||||||
|
--filter '- /*'
|
||||||
|
printf 'Restarting Helma on ANTVILLE_host… '
|
||||||
|
ssh "$ANTVILLE_HOST" sudo /bin/systemctl restart helma
|
||||||
|
;;
|
||||||
|
|
||||||
|
restart)
|
||||||
|
printf 'Restarting Helma… '
|
||||||
|
sudo /bin/systemctl restart helma
|
||||||
|
printf '%s\n' 'done.'
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
# Allow any rsync command but restrict it to the installation directory
|
||||||
|
rrsync -wo /home/helma
|
||||||
|
;;
|
||||||
|
esac
|
Loading…
Add table
Reference in a new issue