mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-21 01:15:35 +00:00
169 lines
6.4 KiB
YAML
169 lines
6.4 KiB
YAML
name: Release
|
|
on:
|
|
pull_request_review:
|
|
types: [submitted]
|
|
|
|
env:
|
|
YARN_ENABLE_GLOBAL_CACHE: false
|
|
|
|
jobs:
|
|
release:
|
|
name: Publish releases
|
|
if:
|
|
${{ github.event.review.state == 'approved' && github.event.sender.login
|
|
== github.event.pull_request.assignee.login &&
|
|
github.event.pull_request.head.ref == 'release-candidate' }}
|
|
outputs:
|
|
companionWasReleased:
|
|
${{ steps.checkIfCompanionWasReleased.outputs.version }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout sources
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 2
|
|
- name: Get yarn cache directory path
|
|
id: yarn-cache-dir-path
|
|
run:
|
|
echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT
|
|
|
|
- uses: actions/cache@v3
|
|
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
|
with:
|
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-yarn-
|
|
- name: Install Node.js
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: lts/*
|
|
- name: Install dependencies
|
|
run: corepack yarn install --immutable
|
|
env:
|
|
# https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation
|
|
CYPRESS_INSTALL_BINARY: 0
|
|
- name: Get CHANGELOG diff
|
|
run:
|
|
git --no-pager diff HEAD^ -- CHANGELOG.md | awk '{ if( substr($0,0,1)
|
|
== "+" && $1 != "+##" && $1 != "+Released:" && $1 != "+++" ) { print
|
|
substr($0,2) } }' > CHANGELOG.diff.md
|
|
- name: Copy README for `uppy` package
|
|
run: cp README.md packages/uppy/.
|
|
- name: Build before publishing
|
|
run: corepack yarn run build
|
|
- name: Hack to allow the publish of the Angular package
|
|
run: corepack yarn workspace @uppy/angular prepublishOnly
|
|
- name: Publish to the npm registry
|
|
run:
|
|
corepack yarn workspaces foreach --no-private npm publish --access
|
|
public --tolerate-republish
|
|
env:
|
|
YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
- name: Merge PR
|
|
id: merge
|
|
run: |
|
|
gh api -X PUT repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/merge \
|
|
-F merge_method="squash" \
|
|
-F commit_message="$(cat CHANGELOG.diff.md)" \
|
|
--jq 'if .merged then "sha="+.sha else error("not merged") end' >> $GITHUB_OUTPUT
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Create tags
|
|
run: |
|
|
git --no-pager diff --name-only HEAD^ | awk '$0 ~ /^packages\/.+\/package\.json$/ { print "jq -r '"'"'\"gh api /repos/{owner}/{repo}/git/refs -f ref=\\\"refs/tags/\"+.name+\"@\"+.version+\"\\\" -f sha=${{ steps.merge.outputs.sha }}\"'"'"' < " $0 }' > createTags.sh
|
|
cat createTags.sh
|
|
sh createTags.sh | sh
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Get Uppy version number
|
|
id: uppyVersion
|
|
run:
|
|
jq -r '"version="+.version' < packages/uppy/package.json >>
|
|
$GITHUB_OUTPUT
|
|
- name: Create GitHub release
|
|
run:
|
|
gh release create uppy@${{ steps.uppyVersion.outputs.version }} -t
|
|
"Uppy ${{ steps.uppyVersion.outputs.version }}" -F CHANGELOG.diff.md
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Upload `uppy` to CDN
|
|
run: corepack yarn run uploadcdn uppy
|
|
env:
|
|
EDGLY_KEY: ${{secrets.EDGLY_KEY}}
|
|
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}}
|
|
- name: Upload `@uppy/locales` to CDN if it was released
|
|
run:
|
|
git diff --exit-code --quiet HEAD^ --
|
|
packages/@uppy/locales/package.json ||corepack yarn run uploadcdn
|
|
@uppy/locales
|
|
env:
|
|
EDGLY_KEY: ${{secrets.EDGLY_KEY}}
|
|
EDGLY_SECRET: ${{secrets.EDGLY_SECRET}}
|
|
- name: Check if Companion was released
|
|
id: checkIfCompanionWasReleased
|
|
run:
|
|
git diff --exit-code --quiet HEAD^ --
|
|
packages/@uppy/companion/package.json || echo "version=$(jq -r
|
|
.version < packages/@uppy/companion/package.json)" >> $GITHUB_OUTPUT
|
|
- name: Remove release-candidate branch
|
|
run:
|
|
gh api -X DELETE repos/${{ github.repository
|
|
}}/git/refs/heads/release-candidate || echo "Already deleted"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Remove release branch
|
|
run:
|
|
gh api -X DELETE repos/${{ github.repository }}/git/refs/heads/release
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Disable Release workflow
|
|
run: gh workflow disable Release --repo ${{ github.repository }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: In case of failure
|
|
if: ${{ failure() }}
|
|
run:
|
|
gh pr comment ${{ github.event.pull_request.number }} --body "Release
|
|
job failed, please take action."
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# See also companion-deploy.yml
|
|
docker:
|
|
name: DockerHub
|
|
needs: release
|
|
if: ${{ needs.release.outputs.companionWasReleased }}
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
DOCKER_BUILDKIT: 0
|
|
COMPOSE_DOCKER_CLI_BUILD: 0
|
|
steps:
|
|
- name: Checkout sources
|
|
uses: actions/checkout@v3
|
|
- name: Docker meta
|
|
id: docker_meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: transloadit/companion
|
|
tags: |
|
|
type=edge
|
|
type=semver,pattern={{version}},value=${{ needs.release.outputs.companionWasReleased }}
|
|
# set latest tag for default branch
|
|
type=raw,value=latest,enable=true
|
|
- uses: docker/setup-qemu-action@v2
|
|
- uses: docker/setup-buildx-action@v2
|
|
- name: Log in to DockerHub
|
|
uses: docker/login-action@v2
|
|
with:
|
|
username: ${{secrets.DOCKER_USERNAME}}
|
|
password: ${{secrets.DOCKER_PASSWORD}}
|
|
- name: Build and push
|
|
uses: docker/build-push-action@v3
|
|
with:
|
|
push: true
|
|
context: .
|
|
platforms: linux/amd64,linux/arm64
|
|
file: Dockerfile
|
|
tags: ${{ steps.docker_meta.outputs.tags }}
|
|
labels: ${{ steps.docker_meta.outputs.labels }}
|