diff --git a/.github/workflows/cl.yml b/.github/workflows/cl.yml new file mode 100644 index 0000000..d1a1c2f --- /dev/null +++ b/.github/workflows/cl.yml @@ -0,0 +1,33 @@ +name: CI +on: [push] +jobs: + + build: + name: Build + runs-on: macos-latest + strategy: + matrix: + goVer: [1.13, 1.14] + + steps: + - name: Set up Go ${{ matrix.goVer }} + uses: actions/setup-go@v1 + with: + go-version: ${{ matrix.goVer }} + id: go + + - name: Check out code into the Go module directory + uses: actions/checkout@v2 + + - name: Get dependencies + run: | + go get -v -t -d ./... + go get gopkg.in/check.v1 + - name: Build + run: go build -v . + + - name: Format + run: diff -u <(echo -n) <(gofmt -d .) + + - name: Test + run: go test -v ./... diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 70376fe..8fa6710 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,39 +1,147 @@ -on: release -name: Build Release +name: Build Hack-Browser-Data Release +on: + release: + types: [created] + jobs: - release-darwin-amd64: - name: release darwin/amd64 - runs-on: macos-latest - steps: - - uses: actions/checkout@master - - name: compile and release - uses: ngs/go-release.action@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GOARCH: amd64 - GOOS: darwin - EXTRA_FILES: "LICENSE" - release-windows-386: - name: release windows/386 - runs-on: windows-latest - steps: - - uses: actions/checkout@master - - name: compile and release - uses: ngs/go-release.action@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GOARCH: "386" - GOOS: windows - EXTRA_FILES: "LICENSE" - release-windows-amd64: - name: release windows/amd64 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@master - - name: compile and release - uses: ngs/go-release.action@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GOARCH: amd64 - GOOS: windows - EXTRA_FILES: "LICENSE" + build: + name: Build Binary + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest, macos-latest] + arch: [amd64] + # We sometimes use different verbiage for things (e.g. "darwin" + # for the GOOS build flag and "osx" in the actual release ZIP). + # We need to specify those here. + include: + - os: windows-latest + goos: windows + bin: 'hack-browser-data.exe' + releaseos: windows + - os: macos-latest + goos: darwin + bin: 'hack-browser-data' + releaseos: osx + # Don't build windows-32bit due to missing MinGW dependencies + # Don't build osx-32bit due to eventual drop in Go support + exclude: + - os: windows-latest + arch: '386' + - os: macos-latest + arch: '386' + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.14 + # - if: matrix.os == 'ubuntu-latest' + # run: sudo apt-get update && sudo apt-get install -y gcc-multilib + # - if: matrix.arch == '386' + # run: echo "::set-env name=RELEASE::gophish-${{ github.event.release.tag_name }}-${{ matrix.releaseos}}-32bit" + - if: matrix.arch == 'amd64' + run: echo "::set-env name=RELEASE::hack-browser-data-${{ github.event.release.tag_name}}-${{ matrix.releaseos}}-64bit" + - uses: actions/checkout@v2 + - name: Build ${{ matrix.goos }}/${{ matrix.arch }} + run: go build -o ${{ matrix.bin }} + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.arch }} + CGO_ENABLED: 1 + - name: Upload to artifacts + uses: actions/upload-artifact@v2 + with: + name: ${{ env.RELEASE }} + path: ${{ matrix.bin }} + + package: + name: Package Assets + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v2 + - uses: actions/download-artifact@v2 + with: + path: bin + - name: Package Releases + run: | + mkdir releases; + for RELEASE_DIR in bin/* + do + echo "Creating release $RELEASE_DIR" + for BINARY in $RELEASE_DIR/* + do + cp $BINARY .; + zip -r releases/$(basename $RELEASE_DIR).zip \ + $(basename ${BINARY}) \ + static/js/dist \ + static/js/src/vendor/ckeditor \ + static/css/dist \ + static/images \ + static/font \ + static/db \ + db \ + templates \ + README.md \ + VERSION \ + LICENSE \ + config.json; + rm $BINARY; + done + done + - name: Upload to artifacts + uses: actions/upload-artifact@v2 + with: + name: releases + path: releases/*.zip + + upload: + name: Upload to the Release + runs-on: ubuntu-latest + needs: package + steps: + - uses: actions/download-artifact@v2 + with: + name: releases + path: releases/ + # I would love to use @actions/upload-release-asset, but they don't + # support wildcards in the asset path. Ref #9, #24, and #47 + - name: Upload Archives to Release + env: + UPLOAD_URL: ${{ github.event.release.upload_url }} + API_HEADER: "Accept: application/vnd.github.v3+json" + AUTH_HEADER: "Authorization: token ${{ secrets.GITHUB_TOKEN }}" + run: | + UPLOAD_URL=$(echo -n $UPLOAD_URL | sed s/\{.*//g) + for FILE in releases/* + do + echo "Uploading ${FILE}"; + curl \ + -H "${API_HEADER}" \ + -H "${AUTH_HEADER}" \ + -H "Content-Type: $(file -b --mime-type ${FILE})" \ + --data-binary "@${FILE}" \ + "${UPLOAD_URL}?name=$(basename ${FILE})"; + done + - name: Generate SHA256 Hashes + env: + API_HEADER: "Accept: application/vnd.github.v3+json" + AUTH_HEADER: "Authorization: token ${{ secrets.GITHUB_TOKEN }}" + RELEASE_URL: ${{ github.event.release.url }} + run: | + HASH_TABLE="| SHA256 Hash | Filename |" + HASH_TABLE="${HASH_TABLE}\n|-----|-----|\n" + for FILE in releases/* + do + FILENAME=$(basename ${FILE}) + HASH=$(sha256sum ${FILE} | cut -d ' ' -f 1) + HASH_TABLE="${HASH_TABLE}|${HASH}|${FILENAME}|\n" + done + echo "${HASH_TABLE}" + curl \ + -XPATCH \ + -H "${API_HEADER}" \ + -H "${AUTH_HEADER}" \ + -H "Content-Type: application/json" \ + -d "{\"body\": \"${HASH_TABLE}\"}" \ + "${RELEASE_URL}"; diff --git a/build.sh b/build.sh deleted file mode 100644 index 6ca98b0..0000000 --- a/build.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -set -eux - -PROJECT_ROOT="/go/src/github.com/${GITHUB_REPOSITORY}" - -mkdir -p $PROJECT_ROOT -rmdir $PROJECT_ROOT -ln -s $GITHUB_WORKSPACE $PROJECT_ROOT -cd $PROJECT_ROOT -go get -v ./... - -EXT='' - -if [ $GOOS == 'windows' ]; then -EXT='.exe' -fi - -if [ -x "./build.sh" ]; then - OUTPUT=`./build.sh "${CMD_PATH}"` -else - go build "${CMD_PATH}" - OUTPUT="${PROJECT_NAME}${EXT}" -fi - -echo ${OUTPUT} \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100644 index 4efc2ba..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,54 +0,0 @@ - -#!/bin/sh - -set -eux - -if [ -z "${CMD_PATH+x}" ]; then - echo "::warning file=entrypoint.sh,line=6,col=1::CMD_PATH not set" - export CMD_PATH="" -fi - -FILE_LIST=`/build.sh` - -#echo "::warning file=/build.sh,line=1,col=5::${FILE_LIST}" - -EVENT_DATA=$(cat $GITHUB_EVENT_PATH) -echo $EVENT_DATA | jq . -UPLOAD_URL=$(echo $EVENT_DATA | jq -r .release.upload_url) -UPLOAD_URL=${UPLOAD_URL/\{?name,label\}/} -RELEASE_NAME=$(echo $EVENT_DATA | jq -r .release.tag_name) -PROJECT_NAME=$(basename $GITHUB_REPOSITORY) -NAME="${NAME:-${PROJECT_NAME}_${RELEASE_NAME}}_${GOOS}_${GOARCH}" - -if [ -z "${EXTRA_FILES+x}" ]; then -echo "::warning file=entrypoint.sh,line=22,col=1::EXTRA_FILES not set" -fi - -FILE_LIST="${FILE_LIST} ${EXTRA_FILES}" - -FILE_LIST=`echo "${FILE_LIST}" | awk '{$1=$1};1'` - - -if [ $GOOS == 'windows' ]; then -ARCHIVE=tmp.zip -zip -9r $ARCHIVE ${FILE_LIST} -else -ARCHIVE=tmp.tgz -tar cvfz $ARCHIVE ${FILE_LIST} -fi - -CHECKSUM=$(md5sum ${ARCHIVE} | cut -d ' ' -f 1) - -curl \ - -X POST \ - --data-binary @${ARCHIVE} \ - -H 'Content-Type: application/octet-stream' \ - -H "Authorization: Bearer ${GITHUB_TOKEN}" \ - "${UPLOAD_URL}?name=${NAME}.${ARCHIVE/tmp./}" - -curl \ - -X POST \ - --data $CHECKSUM \ - -H 'Content-Type: text/plain' \ - -H "Authorization: Bearer ${GITHUB_TOKEN}" \ - "${UPLOAD_URL}?name=${NAME}_checksum.txt" \ No newline at end of file