Replace travis ci with github action (#1212)

* 1196 refactor/ci (#3)

* Remove .travis.yml

* Refactor github action partially

* Fix yaml syntax error

* Add run command for every step

* Set current branch name into halo.yml temporarily

* Test validation.yml

* Add upload-release-asset step into release.yml

* Perfect release.yml

* Fix indent error

* Refactor on condition in release.yml

* Refactor on condition in validation.yml

* Fix release.yml

* Fix upload_url value set

* Fix environment set error

* Change artifact variable from output into global environment

* Fix deprecated environment set method

* Fix environment variable set error

* Change assert_content_type with application/zip

* Refactor upload release step

* Fix release id set

* Fix release id set again

* Fix syntax error

* Refactor upload process

* Refactor halo ci

* Make build step rely on check step

* Inspect docker action

* Inspect docker action again

* Refine bootBuildImage config

* Refactor bootBuildImage config and halo ci

* Fix download artifact path error

* Fix docker image name concat error

* Remove downloaded files inspect tips
pull/1220/head
John Niang 2021-01-03 22:05:39 +08:00 committed by GitHub
parent 8ba115ffb6
commit 7cb4f3464a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 223 additions and 89 deletions

View File

@ -1,31 +0,0 @@
name: Halo CI
on:
pull_request:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
with:
submodules: true
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Gradle
id: cache-gradle
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Test with Gradle
run: ./gradlew test
- name: Build with Gradle
run: ./gradlew build -x test

182
.github/workflows/halo.yml vendored Normal file
View File

@ -0,0 +1,182 @@
name: Halo CI
on:
pull_request:
paths:
- '**'
- '!**.md'
push:
branches:
- '**'
paths:
- '**'
- '!**.md'
release:
types: # This configuration does not affect the page_build event above
- created
jobs:
check:
runs-on: ubuntu-latest
# Default steps
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Gradle wrapper
id: cache-gradle-wrapper
uses: actions/cache@v2.1.3
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-dependencies-
- name: Cache Dependencies
id: cache-dependencies
uses: actions/cache@v2.1.3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-dependencies-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-dependencies-
- name: Check And Test
run: ./gradlew check
build:
runs-on: ubuntu-latest
needs: check
if: github.event_name == 'release'
# Default steps
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Gradle wrapper
id: cache-gradle-wrapper
uses: actions/cache@v2.1.3
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-dependencies-
- name: Cache Dependencies
id: cache-dependencies
uses: actions/cache@v2.1.3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-dependencies-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-dependencies-
- name: Build with Gradle
run: ./gradlew clean build -x test
- name: Archive halo jar
uses: actions/upload-artifact@v2
with:
name: halo-jar
path: build/libs
retention-days: 1
github-release:
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'release'
steps:
- name: Download halo jar
uses: actions/download-artifact@v2
with:
name: halo-jar
path: build/libs
- name: Get Name of Artifact
id: get_artifact
run: |
ARTIFACT_PATHNAME=$(ls build/libs/*.jar | head -n 1)
ARTIFACT_NAME=$(basename ${ARTIFACT_PATHNAME})
echo "Artifact pathname: ${ARTIFACT_PATHNAME}"
echo "Artifact name: ${ARTIFACT_NAME}"
echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV
echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV
echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV
- name: Upload a Release Asset
uses: actions/github-script@v2
if: github.event_name == 'release'
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
console.log('environment', process.versions);
const fs = require('fs').promises;
const { repo: { owner, repo }, sha } = context;
console.log({ owner, repo, sha });
const releaseId = process.env.RELEASE_ID
const artifactPathName = process.env.ARTIFACT_PATHNAME
const artifactName = process.env.ARTIFACT_NAME
console.log('Releasing', releaseId, artifactPathName, artifactName)
await github.repos.uploadReleaseAsset({
owner, repo,
release_id: releaseId,
name: artifactName,
data: await fs.readFile(artifactPathName)
});
docker-release:
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'release'
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Download halo jar
uses: actions/download-artifact@v2
with:
name: halo-jar
path: build/libs
- name: Cache Gradle wrapper
id: cache-gradle-wrapper
uses: actions/cache@v2.1.3
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-dependencies-
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build docker image
run: |
docker info
docker images
export DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }}
export DOCKER_TOKEN=${{ secrets.DOCKER_TOKEN }}
export DOCKER_IMAGE_NAME=${{ secrets.DOCKER_IMAGE_NAME }}
export TAG_LATEST=false
echo "Building and pushing with version tag."
./gradlew bootBuildImage -x bootJar --publishImage
PRE_RELEASE=${{ github.event.release.prerelease }}
if ! $PRE_RELEASE
then
echo "Building and pushing with latest tag."
export TAG_LATEST=true
./gradlew bootBuildImage -x bootJar --publishImage
else
echo "Skipped building and pushing with latest tag due to pre-release."
fi
docker images

View File

@ -1,49 +0,0 @@
language: java
jdk:
- openjdk:11
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
- $TRAVIS_BUILD_DIR/build/libs/
dist: trusty
jobs:
include:
- stage: test
script: ./gradlew check
- stage: build
script: ./gradlew clean build -x test
- stage: Build Docker Image for Release
script: ./scripts/docker-build-release.sh
- stage: Build Docker Image for Dev
script: ./scripts/docker-build-dev.sh
- stage: GitHub Release
script: echo "Deploying to GitHub releases ..." && pwd
deploy:
provider: releases
api_key: $GITHUB_OAUTH_TOKEN
file_glob: true
file: $TRAVIS_BUILD_DIR/build/libs/*
skip_cleanup: true
on:
tags: true
stages:
- test
- build
- name: GitHub Release
if: tag =~ /^v\d+\.\d+(\.\d+)?(-\S*)?$/
- name: Build Docker Image for Release
if: tag =~ /^v\d+\.\d+(\.\d+)?(-release)?$/
- name: Build Docker Image for Dev
if: tag =~ /^v\d+\.\d+(\.\d+)?-(beta|alpha)+(\.\d+)?$/
branches:
only:
- master
- dev
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
notifications:
webhooks:
- https://fathomless-fjord-24024.herokuapp.com/notify

View File

@ -1,16 +1,17 @@
FROM adoptopenjdk/openjdk11-openj9
VOLUME /tmp
ARG JAR_FILE=build/libs/halo.jar
ARG PORT=8090
ARG JAR_FILE=build/libs/*.jar
ARG TIME_ZONE=Asia/Shanghai
ENV TZ=${TIME_ZONE}
ENV JVM_XMS="256m"
ENV JVM_XMX="256m"
ENV JVM_XMS="256m" \
JVM_XMX="256m" \
JVM_OPTS="" \
TZ=${TIME_ZONE}
COPY ${JAR_FILE} halo.jar
EXPOSE ${PORT}
EXPOSE 8090
ENTRYPOINT java -Xms${JVM_XMS} -Xmx${JVM_XMX} -Djava.security.egd=file:/dev/./urandom -server -jar halo.jar
ENTRYPOINT java -Xms${JVM_XMS} -Xmx${JVM_XMX} ${JVM_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar halo.jar

View File

@ -37,8 +37,39 @@ configurations {
bootJar {
manifest {
attributes("Implementation-Title": "Halo Application",
"Implementation-Version": version)
attributes "Implementation-Title": "Halo Application",
"Implementation-Version": archiveVersion
}
}
bootBuildImage.doFirst {
// check data
assert System.getenv("DOCKER_USERNAME") != null
assert System.getenv("DOCKER_TOKEN") != null
}
bootBuildImage {
// prepare data
def tagLatest = Boolean.valueOf(System.getenv("TAG_LATEST"))
def dockerImageName = System.getenv("DOCKER_IMAGE_NAME")
def dockerUsername = System.getenv("DOCKER_USERNAME")
def dockerToken = System.getenv("DOCKER_TOKEN")
if (dockerImageName == null) {
dockerImageName = "${dockerUsername}/halo"
}
if (!tagLatest) {
dockerImageName = "${dockerImageName}:${project.version}"
}
// config plugin
imageName = "${dockerImageName}"
docker {
publishRegistry {
username = "${dockerUsername}"
password = "${dockerToken}"
email = "hi@halo.run"
}
}
}