Fix CI workflows. #95
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The cross platform build was created based on the [Packaging Rust Applications for the NPM Registry blog](https://blog.orhun.dev/packaging-rust-for-npm/). | |
name: Continuous Deployment | |
on: | |
pull_request: | |
paths: | |
- .github/workflows/npm-cd.yml | |
- .github/workflows/build-node-wrapper/action.yml | |
- .github/workflows/start-self-hosted-runner/action.yml | |
push: | |
tags: | |
- "v*.*" | |
concurrency: | |
group: npm-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
start-self-hosted-runner: | |
if: github.repository_owner == 'aws' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Start self hosted EC2 runner | |
uses: ./.github/workflows/start-self-hosted-runner | |
with: | |
aws-access-key-id: ${{ secrets.AWS_EC2_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_EC2_SECRET_ACCESS_KEY }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
ec2-instance-id: ${{ secrets.AWS_EC2_INSTANCE_ID }} | |
publish-binaries: | |
needs: start-self-hosted-runner | |
if: github.repository_owner == 'aws' | |
name: Publish packages to NPM | |
runs-on: ${{ matrix.build.RUNNER }} | |
strategy: | |
fail-fast: false | |
matrix: | |
build: | |
- { | |
OS: ubuntu, | |
NAMED_OS: linux, | |
RUNNER: ubuntu-latest, | |
ARCH: x64, | |
TARGET: x86_64-unknown-linux-gnu, | |
} | |
- { | |
OS: ubuntu, | |
NAMED_OS: linux, | |
RUNNER: [self-hosted, Linux, ARM64], | |
ARCH: arm64, | |
TARGET: aarch64-unknown-linux-gnu, | |
CONTAINER: "2_28", | |
} | |
- { | |
OS: macos, | |
NAMED_OS: darwin, | |
RUNNER: macos-12, | |
ARCH: x64, | |
TARGET: x86_64-apple-darwin, | |
} | |
- { | |
OS: macos, | |
NAMED_OS: darwin, | |
RUNNER: macos-13-xlarge, | |
arch: arm64, | |
TARGET: aarch64-apple-darwin, | |
} | |
steps: | |
- name: Setup self-hosted runner access | |
if: ${{ contains(matrix.build.RUNNER, 'self-hosted') }} | |
run: sudo chown -R $USER:$USER /home/ubuntu/actions-runner/_work/glide-for-redis | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "true" | |
- name: Set the release version | |
shell: bash | |
run: | | |
export version=`if ${{ github.event_name == 'pull_request' }}; then echo '255.255.255'; else echo ${GITHUB_REF:11}; fi` | |
echo "RELEASE_VERSION=${version}" >> $GITHUB_ENV | |
- name: Setup node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
registry-url: "https://registry.npmjs.org" | |
architecture: ${{ matrix.build.ARCH }} | |
scope: "${{ vars.NPM_SCOPE }}" | |
always-auth: true | |
token: ${{ secrets.NPM_AUTH_TOKEN }} | |
- name: Update package version in config.toml | |
uses: ./.github/workflows/update-glide-version | |
with: | |
folder_path: "${{ github.workspace }}/node/rust-client/.cargo" | |
named_os: ${{ matrix.build.NAMED_OS }} | |
- name: Build Node wrapper | |
uses: ./.github/workflows/build-node-wrapper | |
with: | |
os: ${{ matrix.build.OS }} | |
named_os: ${{ matrix.build.NAMED_OS }} | |
arch: ${{ matrix.build.ARCH }} | |
target: ${{ matrix.build.TARGET }} | |
npm_scope: ${{ vars.NPM_SCOPE }} | |
publish: "true" | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish to NPM | |
if: github.event_name != 'pull_request' | |
shell: bash | |
working-directory: ./node | |
run: | | |
set +e | |
# Redirect only stderr | |
{ npm_publish_err=$(npm publish --access public 2>&1 >&3 3>&-); } 3>&1 | |
if [[ "$npm_publish_err" == *"You cannot publish over the previously published versions"* ]] | |
then | |
echo "Skipping publishing, package already published" | |
elif [[ ! -z "$npm_publish_err" ]] | |
then | |
echo "Failed to publish with error: ${npm_publish_err}" | |
exit 1 | |
fi | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} | |
- name: Pack the Node package | |
shell: bash | |
working-directory: ./node | |
run: | | |
# Remove the "cpu" and "os" fileds so the base package would be able to install it on ubuntu | |
SED_FOR_MACOS=`if [[ "${{ matrix.build.OS }}" =~ .*"macos".* ]]; then echo "''"; fi` | |
sed -i $SED_FOR_MACOS '/"\/\/\/cpu": \[/,/]/d' ./package.json && sed -i $SED_FOR_MACOS '/"\/\/\/os": \[/,/]/d' ./package.json | |
mkdir -p bin | |
npm pack --pack-destination ./bin | |
ls ./bin | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} | |
- name: Upload the Node package | |
if: github.event_name != 'pull_request' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.build.TARGET }} | |
path: ./node/bin | |
if-no-files-found: error | |
publish-base-to-npm: | |
if: github.event_name != 'pull_request' | |
name: Publish the base NPM package | |
needs: publish-binaries | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: "true" | |
- name: Install node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: "16" | |
registry-url: "https://registry.npmjs.org" | |
scope: "${{ vars.NPM_SCOPE }}" | |
always-auth: true | |
- name: Create package.json file | |
shell: bash | |
working-directory: ./node/npm/glide | |
run: | | |
export pkg_name=glide-for-redis | |
echo "${GITHUB_REF:11}" | |
export package_version=${GITHUB_REF:11} | |
export scope=`if [ "$NPM_SCOPE" != '' ]; then echo "$NPM_SCOPE/"; fi` | |
mv package.json package.json.tmpl | |
envsubst < package.json.tmpl > "package.json" | |
cat package.json | |
# Fix index.ts based on the scope variable | |
sed -i "s|@scope/|${scope}|g" index.ts | |
env: | |
NPM_SCOPE: ${{ vars.NPM_SCOPE }} | |
- name: Build Node wrapper | |
uses: ./.github/workflows/build-node-wrapper | |
with: | |
os: ubuntu | |
target: "x86_64-unknown-linux-gnu" | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create a directory for the packed packages | |
shell: bash | |
working-directory: ./node/npm/glide | |
run: mkdir packages | |
- name: Download the packed packages | |
id: download | |
uses: actions/download-artifact@v3 | |
with: | |
path: ./node/npm/glide/packages | |
- name: Install the packed packages | |
shell: bash | |
working-directory: ./node/npm/glide | |
run: | | |
ls -LR packages/ | |
packages_list=`find ${{steps.download.outputs.download-path}} -type f -follow -print` | |
for package in $packages_list | |
do | |
if [[ "${package}" == *.tgz ]] | |
then | |
echo "Installing package $package" | |
npm i --no-save "$package" | |
fi | |
done | |
- name: Publish the base package | |
if: github.event_name != 'pull_request' | |
shell: bash | |
working-directory: ./node/npm/glide | |
run: | | |
# Copy the main README file | |
cp ../../README.md . | |
npm install | |
npm run build | |
npm publish --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} |