From 21291e0b347d89157cb7f47bd745c8781902be03 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Mon, 10 Feb 2020 15:20:34 -0800 Subject: [PATCH 01/10] Adding release workflow preliminaries --- .github/scripts/generate_changelog.sh | 65 ++++++++++ .github/scripts/publish_preflight_check.sh | 131 +++++++++++++++++++++ .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 119 +++++++++++++++++++ pom.xml | 24 ++-- 5 files changed, 328 insertions(+), 13 deletions(-) create mode 100755 .github/scripts/generate_changelog.sh create mode 100755 .github/scripts/publish_preflight_check.sh create mode 100644 .github/workflows/release.yml diff --git a/.github/scripts/generate_changelog.sh b/.github/scripts/generate_changelog.sh new file mode 100755 index 000000000..3c97dca0c --- /dev/null +++ b/.github/scripts/generate_changelog.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e +set -u + +function printChangelog() { + local TITLE=$1 + shift + # Skip the sentinel value. + local ENTRIES=("${@:2}") + if [ ${#ENTRIES[@]} -ne 0 ]; then + echo "### ${TITLE}" + echo "" + for ((i = 0; i < ${#ENTRIES[@]}; i++)) + do + echo "* ${ENTRIES[$i]}" + done + echo "" + fi +} + +if [[ -z "${GITHUB_SHA}" ]]; then + GITHUB_SHA="HEAD" +fi + +LAST_TAG=`git describe --tags $(git rev-list --tags --max-count=1) 2> /dev/null` || true +if [[ -z "${LAST_TAG}" ]]; then + echo "[INFO] No tags found. Including all commits up to ${GITHUB_SHA}." + VERSION_RANGE="${GITHUB_SHA}" +else + echo "[INFO] Last release tag: ${LAST_TAG}." + COMMIT_SHA=`git show-ref -s ${LAST_TAG}` + echo "[INFO] Last release commit: ${COMMIT_SHA}." + VERSION_RANGE="${COMMIT_SHA}..${GITHUB_SHA}" + echo "[INFO] Including all commits in the range ${VERSION_RANGE}." +fi + +echo "" + +# Older versions of Bash (< 4.4) treat empty arrays as unbound variables, which triggers +# errors when referencing them. Therefore we initialize each of these arrays with an empty +# sentinel value, and later skip them. +CHANGES=("") +FIXES=("") +FEATS=("") +MISC=("") + +while read -r line +do + COMMIT_MSG=`echo ${line} | cut -d ' ' -f 2-` + if [[ $COMMIT_MSG =~ ^change(\(.*\))?: ]]; then + CHANGES+=("$COMMIT_MSG") + elif [[ $COMMIT_MSG =~ ^fix(\(.*\))?: ]]; then + FIXES+=("$COMMIT_MSG") + elif [[ $COMMIT_MSG =~ ^feat(\(.*\))?: ]]; then + FEATS+=("$COMMIT_MSG") + else + MISC+=("${COMMIT_MSG}") + fi +done < <(git log ${VERSION_RANGE} --oneline) + +printChangelog "Breaking Changes" "${CHANGES[@]}" +printChangelog "New Features" "${FEATS[@]}" +printChangelog "Bug Fixes" "${FIXES[@]}" +printChangelog "Miscellaneous" "${MISC[@]}" diff --git a/.github/scripts/publish_preflight_check.sh b/.github/scripts/publish_preflight_check.sh new file mode 100755 index 000000000..0c889deaa --- /dev/null +++ b/.github/scripts/publish_preflight_check.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +###################################### Outputs ##################################### + +# 1. version: The version of this release including the 'v' prefix (e.g. v1.2.3). +# 2. changelog: Formatted changelog text for this release. + +#################################################################################### + +set -e +set -u + +function echo_info() { + local MESSAGE=$1 + echo "[INFO] ${MESSAGE}" +} + +function echo_warn() { + local MESSAGE=$1 + echo "[WARN] ${MESSAGE}" +} + +function terminate() { + echo "" + echo_warn "--------------------------------------------" + echo_warn "PREFLIGHT FAILED" + echo_warn "--------------------------------------------" + exit 1 +} + + +echo_info "Starting publish preflight check..." +echo_info "Git revision : ${GITHUB_SHA}" +echo_info "Workflow triggered by : ${GITHUB_ACTOR}" +echo_info "GitHub event : ${GITHUB_EVENT_NAME}" + + +echo_info "" +echo_info "--------------------------------------------" +echo_info "Extracting release version" +echo_info "--------------------------------------------" +echo_info "" + +echo_info "Loading version from: pom.xml" +readonly RELEASE_VERSION=`mvn help:evaluate -Dexpression=project.version -q -DforceStdout` || true +if [[ -z "${RELEASE_VERSION}" ]]; then + echo_warn "Failed to extract release version from: pom.xml" + terminate +fi + +if [[ ! "${RELEASE_VERSION}" =~ ^([0-9]*)\.([0-9]*)\.([0-9]*)$ ]]; then + echo_warn "Malformed release version string: ${RELEASE_VERSION}. Exiting." + terminate +fi + +echo_info "Extracted release version: ${RELEASE_VERSION}" +echo "::set-output name=version::v${RELEASE_VERSION}" + + +echo_info "" +echo_info "--------------------------------------------" +echo_info "Checking previous releases" +echo_info "--------------------------------------------" +echo_info "" + +readonly MAVEN_CENTRAL_URL="https://repo1.maven.org/maven2/com/google/firebase/firebase-admin/${RELEASE_VERSION}" +readonly MAVEN_STATUS=`curl -s -o /dev/null -L -w "%{http_code}" ${MAVEN_CENTRAL_URL}` +if [[ $PYPI_STATUS -eq 404 ]]; then + echo_info "Release version ${RELEASE_VERSION} not found in Maven Central." +elif [[ $PYPI_STATUS -eq 200 ]]; then + echo_warn "Release version ${RELEASE_VERSION} already present in Maven Central." + terminate +else + echo_warn "Unexpected ${PYPI_STATUS} response from Maven Central. Exiting." + terminate +fi + + +echo_info "" +echo_info "--------------------------------------------" +echo_info "Checking release tag" +echo_info "--------------------------------------------" +echo_info "" + +echo_info "---< git fetch --depth=1 origin +refs/tags/*:refs/tags/* >---" +git fetch --depth=1 origin +refs/tags/*:refs/tags/* +echo "" + +readonly EXISTING_TAG=`git rev-parse -q --verify "refs/tags/v${RELEASE_VERSION}"` || true +if [[ -n "${EXISTING_TAG}" ]]; then + echo_warn "Tag v${RELEASE_VERSION} already exists. Exiting." + echo_warn "If the tag was created in a previous unsuccessful attempt, delete it and try again." + echo_warn " $ git tag -d v${RELEASE_VERSION}" + echo_warn " $ git push --delete origin v${RELEASE_VERSION}" + + readonly RELEASE_URL="https://github.com/firebase/firebase-admin-java/releases/tag/v${RELEASE_VERSION}" + echo_warn "Delete any corresponding releases at ${RELEASE_URL}." + terminate +fi + +echo_info "Tag v${RELEASE_VERSION} does not exist." + + +echo_info "" +echo_info "--------------------------------------------" +echo_info "Generating changelog" +echo_info "--------------------------------------------" +echo_info "" + +echo_info "---< git fetch origin master --prune --unshallow >---" +git fetch origin master --prune --unshallow +echo "" + +echo_info "Generating changelog from history..." +readonly CURRENT_DIR=$(dirname "$0") +readonly CHANGELOG=`${CURRENT_DIR}/generate_changelog.sh` +echo "$CHANGELOG" + +# Parse and preformat the text to handle multi-line output. +# See https://github.community/t5/GitHub-Actions/set-output-Truncates-Multiline-Strings/td-p/37870 +FILTERED_CHANGELOG=`echo "$CHANGELOG" | grep -v "\\[INFO\\]"` +FILTERED_CHANGELOG="${FILTERED_CHANGELOG//'%'/'%25'}" +FILTERED_CHANGELOG="${FILTERED_CHANGELOG//$'\n'/'%0A'}" +FILTERED_CHANGELOG="${FILTERED_CHANGELOG//$'\r'/'%0D'}" +echo "::set-output name=changelog::${FILTERED_CHANGELOG}" + + +echo "" +echo_info "--------------------------------------------" +echo_info "PREFLIGHT SUCCESSFUL" +echo_info "--------------------------------------------" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10007c5c6..1d0e0a989 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ name: Continuous Integration -on: [push, pull_request] +on: push jobs: build: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..fa6272780 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,119 @@ +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Release Candidate + +on: + # Only run the workflow when a PR is updated or when a developer explicitly requests + # a build by sending a 'firebase_build' event. + pull_request: + types: [opened, synchronize, closed] + + repository_dispatch: + types: + - firebase_build + +jobs: + stage_release: + # To publish a release, merge the release PR with the label 'release:publish'. + # To stage a release without publishing it, send a 'firebase_build' event or apply + # the 'release:stage' label to a PR. + if: github.event.action == 'firebase_build' || + contains(github.event.pull_request.labels.*.name, 'release:stage') || + (github.event.pull_request.merged && + contains(github.event.pull_request.labels.*.name, 'release:publish')) + + runs-on: ubuntu-latest + + # When manually triggering the build, the requester can specify a target branch or a tag + # via the 'ref' client parameter. + steps: + - name: Checkout source for staging + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.ref || github.ref }} + + - name: Set up JDK 1.7 + uses: actions/setup-java@v1 + with: + java-version: 1.7 + + - name: Run unit tests + run: mvn test + + - name: Run integration tests + run: echo Running integration tests + + - name: Package release artifacts + run: mvn package -Dcheckstyle.skip -DskipTests + + # Attach the packaged artifacts to the workflow output. These can be manually + # downloaded for later inspection if necessary. + - name: Archive artifacts + uses: actions/upload-artifact@v1 + with: + name: target + path: target + + publish_release: + needs: stage_release + + # Check whether the release should be published. We publish only when the trigger PR is + # 1. merged + # 2. to the master branch + # 3. with the label 'release:publish', and + # 4. the title prefix '[chore] Release '. + if: github.event.pull_request.merged && + github.ref == 'master' && + contains(github.event.pull_request.labels.*.name, 'release:publish') && + startsWith(github.event.pull_request.title, '[chore] Release ') + + runs-on: ubuntu-latest + + steps: + - name: Checkout source for publish + uses: actions/checkout@v2 + + - name: Set up JDK 1.7 + uses: actions/setup-java@v1 + with: + java-version: 1.7 + + - name: Publish preflight check + id: preflight + run: ./.github/scripts/publish_preflight_check.sh + + # We pull this action from a custom fork of a contributor until + # https://github.com/actions/create-release/pull/32 is merged. Also note that v1 of + # this action does not support the "body" parameter. + - name: Create release tag + uses: fleskesvor/create-release@1a72e235c178bf2ae6c51a8ae36febc24568c5fe + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.preflight.outputs.version }} + release_name: Firebase Admin Java SDK ${{ steps.preflight.outputs.version }} + body: ${{ steps.preflight.outputs.changelog }} + draft: false + prerelease: false + + - name: Publish to Maven Central + run: echo Publishing to Maven Central + + # Post to Twitter if explicitly opted-in by adding the label 'release:tweet'. + - name: Post to Twitter + if: success() && + contains(github.event.pull_request.labels.*.name, 'release:tweet') + run: echo Posting Tweet + continue-on-error: true diff --git a/pom.xml b/pom.xml index e82439e48..0d53442a5 100644 --- a/pom.xml +++ b/pom.xml @@ -199,18 +199,6 @@ -J-Xmx1024m - - maven-source-plugin - 2.2.1 - - - attach-sources - - jar-no-fork - - - - maven-gpg-plugin 1.5 @@ -323,6 +311,18 @@ 1.7 + + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + maven-surefire-plugin 2.19.1 From 6c6288af8ac2152001a5cb543ad6aedc95fae434 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Mon, 10 Feb 2020 15:24:38 -0800 Subject: [PATCH 02/10] Fixed a syntax error --- .github/workflows/release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fa6272780..3a5d34d01 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -46,8 +46,8 @@ jobs: - name: Set up JDK 1.7 uses: actions/setup-java@v1 - with: - java-version: 1.7 + with: + java-version: 1.7 - name: Run unit tests run: mvn test @@ -86,9 +86,9 @@ jobs: uses: actions/checkout@v2 - name: Set up JDK 1.7 - uses: actions/setup-java@v1 - with: - java-version: 1.7 + uses: actions/setup-java@v1 + with: + java-version: 1.7 - name: Publish preflight check id: preflight From 2eadc5d623ade8560cbcc2d4d328384d0a032f3d Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Mon, 10 Feb 2020 15:49:58 -0800 Subject: [PATCH 03/10] Uploading only the jar artifacts --- .github/workflows/release.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a5d34d01..7be5b8ae9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,16 +55,23 @@ jobs: - name: Run integration tests run: echo Running integration tests - - name: Package release artifacts - run: mvn package -Dcheckstyle.skip -DskipTests + # Package the binary and source artifacts. Skip all tests and other validations since we + # have already completed them in the previous steps. + # Maven target directory can consist of way too many files. Just copy the jar artifacts + # into a new directory for upload. + - name: Package artifacts + run: | + mvn package -Dcheckstyle.skip -DskipTests + mkdir -p dist + cp target/*.jar dist/ # Attach the packaged artifacts to the workflow output. These can be manually # downloaded for later inspection if necessary. - name: Archive artifacts uses: actions/upload-artifact@v1 with: - name: target - path: target + name: dist + path: dist publish_release: needs: stage_release From 86c974f85f575ca095e602d14479391b70e19bca Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Mon, 10 Feb 2020 16:17:17 -0800 Subject: [PATCH 04/10] Enabling integration tests --- .../resources/integ-service-account.json.gpg | Bin 0 -> 1734 bytes .github/scripts/generate_changelog.sh | 14 ++++++++++ .github/scripts/publish_preflight_check.sh | 15 +++++++++++ .github/scripts/run_integration_tests.sh | 25 ++++++++++++++++++ .github/workflows/ci.yml | 16 +++++++++++ .github/workflows/release.yml | 9 ++++--- 6 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 .github/resources/integ-service-account.json.gpg create mode 100755 .github/scripts/run_integration_tests.sh diff --git a/.github/resources/integ-service-account.json.gpg b/.github/resources/integ-service-account.json.gpg new file mode 100644 index 0000000000000000000000000000000000000000..da547f44dff331d7c4b1e454ca1a230aef03622c GIT binary patch literal 1734 zcmV;%208hR4Fm}T0_WqJMLyD96#vrd0kSseMv-_5+A>|dXkh)Lxg1WlZ_;HhFTh#x zDXB$vd955)y_i6fJ)Oj)aBCs+sb^rD8ckG^9BEnrFn(oz#yfzS@$+cn3lx!+B3v>8 z+oZYA$+d_~HR_?8Y|47V&47`mfrj&cS28OWOy@;W6RABVdPnTBDiQppT7W_J!vZ~k zJU+n4wlc$u!0!vj)k)conSKAdiLj5M4~3gTnMvFiA3OAaxG9$-Fi4Hz8zrK}UW+wP zy2KkBMs*nJt{;S3op3>^&flbtsElr~I!hsD^U2aEDCp+ScE}*!0)iJIYxI~0rz0!! z$*UJ{b*NbH9yB>mQVu(OxgZzVjskCoA1LLO)@Ob*I`%xmx3pY(UfU8<8kU$joj5L4 zATtgXL$nQ}etB%PN4yHDL~%HN5EDvD5vvXO-mjxu`Jw^zi}3M^AJM(=3}3DOf8t`1 zj@}P~D3y#8&Z~?x@1we($j}oT5e)y|907FiLk@uC)}}$TRV@Z^%|3?~AHf{N=JdS& zmAzu?{0*volC=e78`s^b_7LW?R+;1;+(&V(( zT*de9#KZNX^&6OE$fSpA*AbRQ@qfp9pz}Jz&>w6bXOw_#xf2&v-L&Phl|oHWm@D3} zOys2V$RMQlp$0{v*s34|sV=iP;x;zP=5RpwWJqnMP&QI7t)^63FDPCOen|MjFf6Fy zbH8(4!{wkLz8MP^38`HGosmm`E%%?rxE~2g)rNC_O(^3S*C5=3vYzG?3+y!oJ{s{1 zzUNA>f{FX&_8Zr~`3Aw+iI_(l<`oeGJGikkiq2sFOWR;=B!0NQRSX2%#^zb?1Vrn0 zUAk&@PC~v?RWOgIT?*LH&uK#GKtFXuFkP#zy6ByVhMXCsN=h$QNcx6Fab!8QW6Ur& zu}^KvHWAtV9#3GkF0lWTE~;FldqZH>&o2Z%KX~iA^p+fyiGvth=T-)<@CAc* z?GOwo%qlyt!74iU48M9XWmg)7k`fK)b}RNsiVo+UFE1g{y{tK^E0QF7xiW`>{iE_L z2e)`aCjrF4vaJ(AvkPqelNNjHn&uE@P7P07O+*CceK`8`Ej^O>;!(i7HaCaidZ~kj z$!=OMn@HL1CK6=ew?$zQygRGVm+>k2DR7{CKke27evSnGj z1DV~gv?jynB1yH$8kV3HDk^T{2PYCrSXN1{hh09 z;l&(GhZ7|l=@6E5%7=&;~1HUa3Edum39CeKllCDf5wr&+x@&+?!$Me2rKSZQ|DnUwYV~xd6kbA z^fr&FN-_FU?HQ=YD~>e6BR*{U((QLQmN58HK)d%N*5aFTL7;s!iBET0tq(c}0dVe8m%YTz{Xp6^}&9rC_ zFW>egRI>>@J|qb&;qSrsBP~vN2r{|}xny7Ft7$IqnF5kN{Ynzk**xBl6FNa!ASKZr zjkC^DnaK9M?q75@{PckJ6UMReK^Nr?iNe=Y6Rz(Imio@B{ax^h!#Hx-I^eU|&f@Sk zeh`^4eBkBo*Y~t$e?2{Lb0)LXxo?T=3jk#6n!+oCl3nSeNpa@uI5OjP zK#5K-d&uK-Mex4OqRTzG{P7!FFn+a literal 0 HcmV?d00001 diff --git a/.github/scripts/generate_changelog.sh b/.github/scripts/generate_changelog.sh index 3c97dca0c..e393f40e4 100755 --- a/.github/scripts/generate_changelog.sh +++ b/.github/scripts/generate_changelog.sh @@ -1,5 +1,19 @@ #!/bin/bash +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + set -e set -u diff --git a/.github/scripts/publish_preflight_check.sh b/.github/scripts/publish_preflight_check.sh index 0c889deaa..dab01d87d 100755 --- a/.github/scripts/publish_preflight_check.sh +++ b/.github/scripts/publish_preflight_check.sh @@ -1,5 +1,20 @@ #!/bin/bash +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + ###################################### Outputs ##################################### # 1. version: The version of this release including the 'v' prefix (e.g. v1.2.3). diff --git a/.github/scripts/run_integration_tests.sh b/.github/scripts/run_integration_tests.sh new file mode 100755 index 000000000..6fb8ac9e3 --- /dev/null +++ b/.github/scripts/run_integration_tests.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e +set -u + +gpg --quiet --batch --yes --decrypt --passphrase="${FIREBASE_SERVICE_ACCT_KEY}" \ + --output integration_cert.json .github/resources/integ-service-account.json.gpg + +echo "${FIREBASE_API_KEY}" > integration_apikey.txt + +mvn -B verify -Dcheckstyle.skip -DskipUTs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d0e0a989..d6a1c5862 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,16 @@ +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. name: Continuous Integration on: push @@ -5,11 +18,14 @@ on: push jobs: build: runs-on: ubuntu-latest + steps: - uses: actions/checkout@v1 + - name: Set up JDK 1.7 uses: actions/setup-java@v1 with: java-version: 1.7 + - name: Build with Maven run: mvn -B package --file pom.xml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7be5b8ae9..a12d62e9d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -50,10 +50,13 @@ jobs: java-version: 1.7 - name: Run unit tests - run: mvn test + run: mvn -B test - name: Run integration tests - run: echo Running integration tests + run: ./.github/scripts/run_integration_tests.sh + env: + FIREBASE_SERVICE_ACCT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCT_KEY }} + FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }} # Package the binary and source artifacts. Skip all tests and other validations since we # have already completed them in the previous steps. @@ -61,7 +64,7 @@ jobs: # into a new directory for upload. - name: Package artifacts run: | - mvn package -Dcheckstyle.skip -DskipTests + mvn -B package -Dcheckstyle.skip -DskipTests mkdir -p dist cp target/*.jar dist/ From 400d1a9558e1aecf9cd39882d6126565545083b6 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Tue, 11 Feb 2020 09:34:38 -0800 Subject: [PATCH 05/10] Using Maven lifecycle more effectively --- ...egration_tests.sh => package_artifacts.sh} | 13 ++- .github/workflows/ci.yml | 6 +- .github/workflows/release.yml | 14 +-- pom.xml | 101 ++++++++---------- 4 files changed, 66 insertions(+), 68 deletions(-) rename .github/scripts/{run_integration_tests.sh => package_artifacts.sh} (65%) diff --git a/.github/scripts/run_integration_tests.sh b/.github/scripts/package_artifacts.sh similarity index 65% rename from .github/scripts/run_integration_tests.sh rename to .github/scripts/package_artifacts.sh index 6fb8ac9e3..6e993066e 100755 --- a/.github/scripts/run_integration_tests.sh +++ b/.github/scripts/package_artifacts.sh @@ -22,4 +22,15 @@ gpg --quiet --batch --yes --decrypt --passphrase="${FIREBASE_SERVICE_ACCT_KEY}" echo "${FIREBASE_API_KEY}" > integration_apikey.txt -mvn -B verify -Dcheckstyle.skip -DskipUTs +# Does the following: +# 1. Runs the Checkstyle plugin (validate phase) +# 2. Compiles the source (compile phase) +# 3. Runs the unit tests (test phase) +# 4. Packages the artifacts - src, bin, javadocs (package phase) +# 5. Runs the integration tests (verify phase) +mvn -B clean verify + +# Maven target directory can consist of many files. Just copy the jar artifacts +# into a new directory for upload. +mkdir -p dist +cp target/*.jar dist/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d6a1c5862..fbb1aad5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,5 +27,9 @@ jobs: with: java-version: 1.7 + # Does the following: + # 1. Runs the Checkstyle plugin (validate phase) + # 2. Compiles the source (compile phase) + # 3. Runs the unit tests (test phase) - name: Build with Maven - run: mvn -B package --file pom.xml + run: mvn -B clean test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a12d62e9d..2fc6bcd28 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,22 +52,12 @@ jobs: - name: Run unit tests run: mvn -B test - - name: Run integration tests - run: ./.github/scripts/run_integration_tests.sh + - name: Compile, test and package + run: ./.github/scripts/package_artifacts.sh env: FIREBASE_SERVICE_ACCT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCT_KEY }} FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }} - # Package the binary and source artifacts. Skip all tests and other validations since we - # have already completed them in the previous steps. - # Maven target directory can consist of way too many files. Just copy the jar artifacts - # into a new directory for upload. - - name: Package artifacts - run: | - mvn -B package -Dcheckstyle.skip -DskipTests - mkdir -p dist - cp target/*.jar dist/ - # Attach the packaged artifacts to the workflow output. These can be manually # downloaded for later inspection if necessary. - name: Archive artifacts diff --git a/pom.xml b/pom.xml index 0d53442a5..2900886ff 100644 --- a/pom.xml +++ b/pom.xml @@ -161,44 +161,8 @@ release - - - true - - - maven-javadoc-plugin - - - package - - jar - - - - - - com.google.doclava - doclava - 1.0.6 - - com.google.doclava.Doclava - ${sun.boot.class.path} - - - com.google.j2objc - j2objc-annotations - 1.3 - - - - -warning 101 - - false - -J-Xmx1024m - - maven-gpg-plugin 1.5 @@ -283,6 +247,7 @@ + maven-checkstyle-plugin 2.17 @@ -303,6 +268,8 @@ + + maven-compiler-plugin 3.6.1 @@ -311,6 +278,17 @@ 1.7 + + + + maven-surefire-plugin + 2.19.1 + + ${skipUTs} + + + + maven-source-plugin 2.2.1 @@ -324,12 +302,39 @@ - maven-surefire-plugin - 2.19.1 + maven-javadoc-plugin + + + attach-javadocs + + jar + + + - ${skipUTs} + + com.google.doclava + doclava + 1.0.6 + + com.google.doclava.Doclava + ${sun.boot.class.path} + + + com.google.j2objc + j2objc-annotations + 1.3 + + + + -warning 101 + + false + -J-Xmx1024m + + maven-failsafe-plugin 2.19.1 @@ -342,20 +347,8 @@ - - maven-javadoc-plugin - 2.10.4 - - - maven-release-plugin - 2.5.3 - - false - release - v@{project.version} - deploy - - + + org.sonatype.plugins nexus-staging-maven-plugin @@ -364,7 +357,7 @@ ossrh https://oss.sonatype.org/ - false + true From 667c27cd6a11b5e2bc3314c7d1c7a1beddd7d7da Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Wed, 12 Feb 2020 14:46:48 -0800 Subject: [PATCH 06/10] Fixing indentation --- .github/workflows/release.yml | 122 +++++++++++++++++----------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2fc6bcd28..273148f82 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,32 +39,32 @@ jobs: # When manually triggering the build, the requester can specify a target branch or a tag # via the 'ref' client parameter. steps: - - name: Checkout source for staging - uses: actions/checkout@v2 - with: - ref: ${{ github.event.client_payload.ref || github.ref }} - - - name: Set up JDK 1.7 - uses: actions/setup-java@v1 - with: - java-version: 1.7 - - - name: Run unit tests - run: mvn -B test - - - name: Compile, test and package - run: ./.github/scripts/package_artifacts.sh - env: - FIREBASE_SERVICE_ACCT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCT_KEY }} - FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }} - - # Attach the packaged artifacts to the workflow output. These can be manually - # downloaded for later inspection if necessary. - - name: Archive artifacts - uses: actions/upload-artifact@v1 - with: - name: dist - path: dist + - name: Checkout source for staging + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.ref || github.ref }} + + - name: Set up JDK 1.7 + uses: actions/setup-java@v1 + with: + java-version: 1.7 + + - name: Run unit tests + run: mvn -B test + + - name: Compile, test and package + run: ./.github/scripts/package_artifacts.sh + env: + FIREBASE_SERVICE_ACCT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCT_KEY }} + FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }} + + # Attach the packaged artifacts to the workflow output. These can be manually + # downloaded for later inspection if necessary. + - name: Archive artifacts + uses: actions/upload-artifact@v1 + with: + name: dist + path: dist publish_release: needs: stage_release @@ -82,38 +82,38 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout source for publish - uses: actions/checkout@v2 - - - name: Set up JDK 1.7 - uses: actions/setup-java@v1 - with: - java-version: 1.7 - - - name: Publish preflight check - id: preflight - run: ./.github/scripts/publish_preflight_check.sh - - # We pull this action from a custom fork of a contributor until - # https://github.com/actions/create-release/pull/32 is merged. Also note that v1 of - # this action does not support the "body" parameter. - - name: Create release tag - uses: fleskesvor/create-release@1a72e235c178bf2ae6c51a8ae36febc24568c5fe - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ steps.preflight.outputs.version }} - release_name: Firebase Admin Java SDK ${{ steps.preflight.outputs.version }} - body: ${{ steps.preflight.outputs.changelog }} - draft: false - prerelease: false - - - name: Publish to Maven Central - run: echo Publishing to Maven Central - - # Post to Twitter if explicitly opted-in by adding the label 'release:tweet'. - - name: Post to Twitter - if: success() && - contains(github.event.pull_request.labels.*.name, 'release:tweet') - run: echo Posting Tweet - continue-on-error: true + - name: Checkout source for publish + uses: actions/checkout@v2 + + - name: Set up JDK 1.7 + uses: actions/setup-java@v1 + with: + java-version: 1.7 + + - name: Publish preflight check + id: preflight + run: ./.github/scripts/publish_preflight_check.sh + + # We pull this action from a custom fork of a contributor until + # https://github.com/actions/create-release/pull/32 is merged. Also note that v1 of + # this action does not support the "body" parameter. + - name: Create release tag + uses: fleskesvor/create-release@1a72e235c178bf2ae6c51a8ae36febc24568c5fe + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.preflight.outputs.version }} + release_name: Firebase Admin Java SDK ${{ steps.preflight.outputs.version }} + body: ${{ steps.preflight.outputs.changelog }} + draft: false + prerelease: false + + - name: Publish to Maven Central + run: echo Publishing to Maven Central + + # Post to Twitter if explicitly opted-in by adding the label 'release:tweet'. + - name: Post to Twitter + if: success() && + contains(github.event.pull_request.labels.*.name, 'release:tweet') + run: echo Posting Tweet + continue-on-error: true From d873dc4895b9e228ac054934f88caa54b93a8b05 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 13 Feb 2020 17:12:53 -0800 Subject: [PATCH 07/10] Maven deployment configuration --- .github/resources/firebase.asc.gpg | Bin 0 -> 4056 bytes .github/resources/settings.xml.gpg | Bin 0 -> 556 bytes .github/scripts/publish_artifacts.sh | 29 +++++++++++++++++++++ .github/scripts/publish_preflight_check.sh | 6 ++--- .github/workflows/release.yml | 18 +++++++++---- 5 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 .github/resources/firebase.asc.gpg create mode 100644 .github/resources/settings.xml.gpg create mode 100755 .github/scripts/publish_artifacts.sh diff --git a/.github/resources/firebase.asc.gpg b/.github/resources/firebase.asc.gpg new file mode 100644 index 0000000000000000000000000000000000000000..a946776c7fd1498a0399836a94785dc8fd5293ed GIT binary patch literal 4056 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 KX);zY-!1|?!O3F) literal 0 HcmV?d00001 diff --git a/.github/resources/settings.xml.gpg b/.github/resources/settings.xml.gpg new file mode 100644 index 0000000000000000000000000000000000000000..023794b7fa983fde2c15bd91f72ebafb7a13007c GIT binary patch literal 556 zcmV+{0@MAB4Fm}T0tPrqc?=aUxc}1W0WzbOk>1bf!w>BS$kbQft#G(tP;Wb;4ZMAZ zAN;I0+m)W!u588O!^*SZn1LwmCCjTwOXa7>;oQzSAp|9(nCsCsDg1GeS@05K7%EIY zoNCaLW}eT(29bs9DZ-@f{)UG3dm*O^LM0U$HI4oD#XXOMv2P|ip~#V}vh1ePJirOh z%4{E}YqWxA9rvmePQpimsev1)B;4Q~1 z`9(ulAk>WpSf8G3e?M;nO(7+_7@dJOKy$E!ia|3q6w9~3{9?4)0+p*saRQ#$p+R(? zo5H=mzjDn-w#;5Veyslpc|79{F!%?BDLDg*u`Vg0?ev7}Gq2yNVuminh#{!iqMeiJ0zD<2kMGK*{H0$}6k`XvIS< zdp(OY6QyDsPg}WRzMokYh4sGeL>HVO z=_%?B4cctzv)cw9lY@6kwgFk5 + ${{ steps.preflight.outputs.version }} of @Firebase Admin Java SDK is available. + https://github.com/firebase/firebase-admin-python/releases/tag/${{ steps.preflight.outputs.version }} + consumer-key: ${{ secrets.TWITTER_CONSUMER_KEY }} + consumer-secret: ${{ secrets.TWITTER_CONSUMER_SECRET }} + access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }} + access-token-secret: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }} continue-on-error: true From 2b8007f1064175f147af0c2cf2949bc95deb9e39 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Thu, 13 Feb 2020 17:15:48 -0800 Subject: [PATCH 08/10] Point the send tweet action to master --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 215e08026..76c0b7ee6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -115,7 +115,7 @@ jobs: - name: Post to Twitter if: success() && contains(github.event.pull_request.labels.*.name, 'release:tweet') - uses: firebase/firebase-admin-node/.github/actions/send-tweet + uses: firebase/firebase-admin-node/.github/actions/send-tweet@master with: status: > ${{ steps.preflight.outputs.version }} of @Firebase Admin Java SDK is available. From 012604ecb375c8bddec03d1086426d8b9315fa79 Mon Sep 17 00:00:00 2001 From: hiranya911 Date: Fri, 14 Feb 2020 11:12:41 -0800 Subject: [PATCH 09/10] Setting all publish config as env variables --- .github/resources/settings.xml | 29 +++++++++++++++++++++++++++ .github/resources/settings.xml.gpg | Bin 556 -> 0 bytes .github/scripts/publish_artifacts.sh | 14 +++++++++---- .github/workflows/release.yml | 4 +++- 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 .github/resources/settings.xml delete mode 100644 .github/resources/settings.xml.gpg diff --git a/.github/resources/settings.xml b/.github/resources/settings.xml new file mode 100644 index 000000000..708bbcb75 --- /dev/null +++ b/.github/resources/settings.xml @@ -0,0 +1,29 @@ + + + + false + + + + ossrh + ${env.NEXUS_OSSRH_USERNAME} + ${env.NEXUS_OSSRH_PASSWORD} + + + + + + release + + true + + + gpg + B652FFD3865AF7A75830876F5F55C8F6985BB9DD + ${env.GPG_PASSPHRASE} + + + + diff --git a/.github/resources/settings.xml.gpg b/.github/resources/settings.xml.gpg deleted file mode 100644 index 023794b7fa983fde2c15bd91f72ebafb7a13007c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmV+{0@MAB4Fm}T0tPrqc?=aUxc}1W0WzbOk>1bf!w>BS$kbQft#G(tP;Wb;4ZMAZ zAN;I0+m)W!u588O!^*SZn1LwmCCjTwOXa7>;oQzSAp|9(nCsCsDg1GeS@05K7%EIY zoNCaLW}eT(29bs9DZ-@f{)UG3dm*O^LM0U$HI4oD#XXOMv2P|ip~#V}vh1ePJirOh z%4{E}YqWxA9rvmePQpimsev1)B;4Q~1 z`9(ulAk>WpSf8G3e?M;nO(7+_7@dJOKy$E!ia|3q6w9~3{9?4)0+p*saRQ#$p+R(? zo5H=mzjDn-w#;5Veyslpc|79{F!%?BDLDg*u`Vg0?ev7}Gq2yNVuminh#{!iqMeiJ0zD<2kMGK*{H0$}6k`XvIS< zdp(OY6QyDsPg}WRzMokYh4sGeL>HVO z=_%?B4cctzv)cw9lY@6kwgFk5 Date: Fri, 14 Feb 2020 14:22:51 -0800 Subject: [PATCH 10/10] Fixed typo in tweet --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 34bf8ad09..0e1c307bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -121,7 +121,7 @@ jobs: with: status: > ${{ steps.preflight.outputs.version }} of @Firebase Admin Java SDK is available. - https://github.com/firebase/firebase-admin-python/releases/tag/${{ steps.preflight.outputs.version }} + https://github.com/firebase/firebase-admin-java/releases/tag/${{ steps.preflight.outputs.version }} consumer-key: ${{ secrets.TWITTER_CONSUMER_KEY }} consumer-secret: ${{ secrets.TWITTER_CONSUMER_SECRET }} access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }}