Skip to content

Commit

Permalink
chore: transfer the validate release script to action (#193)
Browse files Browse the repository at this point in the history
* enhance a string of actions

---------

Co-authored-by: imbajin <[email protected]>
  • Loading branch information
z7658329 and imbajin authored Feb 8, 2023
1 parent c844015 commit 88a0ea1
Show file tree
Hide file tree
Showing 5 changed files with 254 additions and 2 deletions.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion .github/workflows/hugo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# limitations under the License.

# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Deploy site to pages (hugo)
name: "Deploy site to pages (hugo)"

on:
pull_request:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Mark stale issues and pull requests
name: "Mark stale issues and pull requests"

on:
schedule:
Expand Down
252 changes: 252 additions & 0 deletions .github/workflows/validate-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
name: "Validate Apache Release"

on:
workflow_dispatch:
inputs:
release_version:
required: true
default: '1.0.0'

push:
branches:
- 'release-*'
pull_request:
branches:
- 'release-*'

jobs:
build:
runs-on: ubuntu-latest
env:
SCRIPT_PATH: hugegraph-dist/scripts/
URL_PREFIX: https://dist.apache.org/repos/dist/dev/incubator/hugegraph/
USER: 'imbajin'
# TODO: parse version from the running branch name & also adapt the input version
RELEASE_VERSION: ''
steps:
- name: Checkout source
uses: actions/checkout@v3
- name: Install JDK ${{ matrix.java_version }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java_version }}
distribution: 'adopt'
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Get Yarn path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Cache Yarn packages
uses: actions/cache@v3
# use id to check `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: 1. Download SVN Sources
run: |
rm -rf dist/${{ inputs.release_version }}
svn co ${URL_PREFIX}/${{ inputs.release_version }} dist/${{ inputs.release_version }}
cd dist/${{ inputs.release_version }} || exit
- name: 2. Check Environment & Import Public Keys
run: |
cd dist/${{ inputs.release_version }}
shasum --version 1>/dev/null || exit
gpg --version 1>/dev/null || exit
wget https://downloads.apache.org/incubator/hugegraph/KEYS || exit
echo "Import KEYS:" && gpg --import KEYS

echo -e "5\ny\n" | gpg --batch --command-fd 0 --edit-key $USER trust

echo "trust all pk"
for key in $(gpg --no-tty --list-keys --with-colons | awk -F: '/^pub/ {print $5}');
do
echo -e "5\ny\n" | gpg --batch --command-fd 0 --edit-key "$key" trust
done

- name: 3. Check SHA512 & GPG Signature
run: |
cd dist/${{ inputs.release_version }}
for i in *.tar.gz; do
echo "$i"
shasum -a 512 --check "$i".sha512 || exit
eval gpg "${GPG_OPT}" --verify "$i".asc "$i" || exit
done
- name: 4. Validate Source Packages
run: |
cd dist/${{ inputs.release_version }} && ls -lh ./*.tar.gz
for i in *src.tar.gz; do
echo "$i"
# 4.0 check the directory name include "incubating"
if [[ ! "$i" =~ "incubating" ]]; then
echo "The package name should include incubating" && exit 1
fi
tar xzvf "$i" || exit
cd "$(basename "$i" .tar.gz)" || exit
# 4.1 check the directory include "NOTICE" and "LICENSE" and "DISCLAIMER" file
if [[ ! -f "LICENSE" ]]; then
echo "The package should include LICENSE file" && exit 1
fi
if [[ ! -f "NOTICE" ]]; then
echo "The package should include NOTICE file" && exit 1
fi
if [[ ! -f "DISCLAIMER" ]]; then
echo "The package should include DISCLAIMER file" && exit 1
fi
# 4.2 ensure doesn't contains empty directory or file
COUNT=$(find . -type d -empty | wc -l)
if [[ $COUNT -ne 0 ]]; then
find . -type d -empty
echo "The package should not include empty directory, but get $COUNT" # TODO: && exit 1
fi
# 4.3 ensure any file should less than 900kb & not include binary file
COUNT=$(find . -type f -size +900k | wc -l)
if [[ $COUNT -ne 0 ]]; then
find . -type f -size +900k
echo "The package should not include file larger than 900kb, but get $COUNT"
fi
COUNT=$(find . -type f | perl -lne 'print if -B' | wc -l)
if [[ $COUNT -ne 0 ]]; then
find . -type f | perl -lne 'print if -B'
echo "The package should not include binary file, but get $COUNT"
fi
# 4.4 test compile the packages
if [[ $JAVA_VERSION == 8 && "$i" =~ "computer" ]]; then
cd .. && echo "skip computer module in java8"
continue
fi
mvn package -DskipTests -ntp && ls -lh
cd .. || exit
done
- name: 5. Run Compiled Packages In Server
run: |
cd dist/${{ inputs.release_version }} && ls -lh
cd ./*hugegraph-incubating*src/*hugegraph*${{ inputs.release_version }} || exit
bin/init-store.sh && sleep 1
bin/start-hugegraph.sh && ls ../../
cd ../../ || exit
- name: 6. Run Compiled Packages In ToolChain (Loader & Tool & Hubble)
run: |
cd dist/${{ inputs.release_version }}
cd ./*toolchain*src || exit
ls -lh
cd ./*toolchain*${{ inputs.release_version }} || exit
ls -lh
# 6.1 load some data first
echo "test loader"
cd ./*loader*${{ inputs.release_version }} || exit
bin/hugegraph-loader.sh -f ./example/file/struct.json -s ./example/file/schema.groovy \
-g hugegraph || exit
cd .. || exit
# 6.2 try some gremlin query & api in tool
echo "test tool"
cd ./*tool*${{ inputs.release_version }} || exit
bin/hugegraph gremlin-execute --script 'g.V().count()' || exit
bin/hugegraph task-list || exit
bin/hugegraph backup -t all --directory ./backup-test || exit
cd .. || exit
# 6.3 start hubble and connect to server
echo "test hubble"
cd ./*hubble*${{ inputs.release_version }} || exit
cat conf/hugegraph-hubble.properties && bin/start-hubble.sh
cd ../../../ || exit
rm -rf ./*src* && ls -lh
- name: 7. Validate Binary Packages
run: |
cd dist/${{ inputs.release_version }}
for i in *.tar.gz; do
echo "$i"
# 7.0 check the directory name include "incubating"
if [[ ! "$i" =~ "incubating" ]]; then
echo "The package name should include incubating" && exit 1
fi
tar xzvf "$i" || exit
# 7.1 check root dir include "NOTICE"/"LICENSE"/"DISCLAIMER" files & "release-docs" dir
cd "$(basename "$i" .tar.gz)" && ls -lh || exit
if [[ ! -f "LICENSE" ]]; then
echo "The package should include LICENSE file" && exit 1
fi
if [[ ! -f "NOTICE" ]]; then
echo "The package should include NOTICE file" && exit 1
fi
if [[ ! -f "DISCLAIMER" ]]; then
echo "The package should include DISCLAIMER file" && exit 1
fi
if [[ ! -d "release-docs" ]]; then
echo "The package should include release-docs dir" && exit 1
fi
# 7.2 ensure doesn't contains empty directory or file
COUNT=$(find . -type d -empty | wc -l)
if [[ $COUNT -ne 0 ]]; then
find . -type d -empty
echo "The package shouldn't include empty directory, but get $COUNT" # TODO: && exit 1
fi
cd - || exit
done
- name: 8. Validate Binary Packages(Start Server)
run: |
cd dist/${{ inputs.release_version }}
cd ./*hugegraph-incubating*${{ inputs.release_version }} || exit
bin/init-store.sh && sleep 1
# kill the HugeGraphServer process by jps
jps | grep HugeGraphServer | awk '{print $1}' | xargs kill -9
bin/start-hugegraph.sh && ls ../
cd - || exit
- name: 9. Validate Binary Packages(Start ToolChain(Loader/Tool/Hubble))
run: |
cd dist/${{ inputs.release_version }}
cd ./*toolchain*${{ inputs.release_version }} || exit
ls -lh
# 9.1 loader some data first
echo "test loader"
cd ./*loader*${{ inputs.release_version }} || exit
bin/hugegraph-loader.sh -f ./example/file/struct.json -s ./example/file/schema.groovy \
-g hugegraph || exit
cd - || exit
# 9.2 try some gremlin query & api in tool
echo "test tool"
cd ./*tool*${{ inputs.release_version }} || exit
bin/hugegraph gremlin-execute --script 'g.V().count()' || exit
bin/hugegraph task-list || exit
bin/hugegraph backup -t all --directory ./backup-test || exit
cd - || exit
# 9.3 start hubble and connect to server
echo "test hubble"
cd ./*hubble*${{ inputs.release_version }} || exit
# TODO: add hubble doc & test it
cat conf/hugegraph-hubble.properties
bin/stop-hubble.sh && bin/start-hubble.sh
cd - || exit
strategy:
fail-fast: false
matrix:
java_version: [ '8','11' ]

0 comments on commit 88a0ea1

Please sign in to comment.