diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cbaacb02..77de69d8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,8 +16,35 @@ jobs: - name: Checkout uses: actions/checkout@v1 + - name: Setup Node.js with GitHub Package Registry + uses: actions/setup-node@v1 + with: + node-version: 12 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + registry-url: 'https://npm.pkg.github.com' + scope: 'cycjimmy' + always-auth: true + + - name: Setup Node.js with Npm Package Registry + uses: actions/setup-node@v1 + with: + node-version: 12 + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + registry-url: 'https://registry.npmjs.org' + always-auth: true + + - name: Set .npmrc + env: + CI: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + echo "//npm.pkg.github.com/:_authToken=$GITHUB_TOKEN" > /home/runner/work/_temp/.npmrc + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> /home/runner/work/_temp/.npmrc + - name: Semantic Release uses: cycjimmy/semantic-release-action@master + id: semantic with: branch: master extra_plugins: | @@ -26,3 +53,10 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Publish To GitHub Package Registry + if: steps.semantic.outputs.new-release-published == 'true' + run: npm publish --@cycjimmy:registry='https://npm.pkg.github.com' + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} + diff --git a/README.md b/README.md index d01d8716..437d1f19 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,39 @@ GitHub Action for [Semantic Release](https://github.com/semantic-release/semantic-release). ## Usage -* `branch`: [Optional] The branch for release. Default `"master"`. -* `extra_plugins`: [Optional] Extra plugins for pre-install. Default `""`. +* inputs: + * `branch`: [Optional] The branch for release. Default `"master"`. + * `extra_plugins`: [Optional] Extra plugins for pre-install. Default `""`. +* outputs: + * `new-release-published`: Whether a new release was published. `true` or `false` +A simple example ```yaml steps: - name: Semantic Release uses: cycjimmy/semantic-release-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} +``` + +An advanced example +```yaml +steps: + - name: Semantic Release + uses: cycjimmy/semantic-release-action@master + id: semantic with: branch: master extra_plugins: | @semantic-release/git @semantic-release/changelog + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Do something when a new release published + if: steps.semantic.outputs.new-release-published == 'true' + run: ... ``` diff --git a/action.yml b/action.yml index 723b3fbc..a09c7bbd 100644 --- a/action.yml +++ b/action.yml @@ -11,6 +11,9 @@ inputs: extra_plugins: description: 'Extra plugins for pre-install' default: '' +outputs: + new-release-published: + description: "Whether a new release was published" runs: using: 'node12' main: 'index.js' diff --git a/src/index.js b/src/index.js index 133da066..7fc1cb40 100644 --- a/src/index.js +++ b/src/index.js @@ -3,10 +3,15 @@ const path = require('path'); const core = require('@actions/core'); const semanticRelease = require('semantic-release'); +const OutputKey_NewReleasePublished = 'new-release-published'; + const release = async () => { const branch = core.getInput('branch', {required: false}) || 'master'; const extraPlugins = core.getInput('extra_plugins', {required: false}) || ''; + // set outputs default + core.setOutput(OutputKey_NewReleasePublished, 'false'); + // pre-install plugins if (extraPlugins) { const _extraPlugins = extraPlugins @@ -15,7 +20,7 @@ const release = async () => { const {stdout, stderr} = await exec(`npm install ${_extraPlugins}`, { cwd: path.resolve(__dirname) }); - console.log(stdout); + core.debug(stdout); if (stderr) { return Promise.reject(stderr); } @@ -39,9 +44,13 @@ const release = async () => { for (const release of releases) { core.debug(`The release was published with plugin "${release.pluginName}".`); } + + // set outputs default + core.setOutput(OutputKey_NewReleasePublished, 'true'); }; module.exports = () => { + core.debug('Initialization successful'); release().catch(core.setFailed); };