Skip to content

Commit

Permalink
Enhance CI/CD workflow with Yarn 3, Node.js 14, and GitHub Actions (#799
Browse files Browse the repository at this point in the history
)

* Publish package-lock file to Appveyor artifacts

* chore: bump to Node.js 14 and Yarn 3

* ci: add GitHub workflow for CI build

* ci: refactor build scripts for CI pipeline

* chore: revert to use npm to run electron builder script

* ci: omit Linux i386 support due to lack of Electron binary support

* ci: add "export ARCHFLAGS="-arch x86_64" to overcome the issue of incompatible architecture with macOS 10.15

* ci: remove Windows x86 build

* ci: bump electron dependencies

* chore: update build scripts in package.json

* ci: implement CI/CD with GitHub action workflow

* ci: deprecate AppVeyor and use GitHub Actions

* chore: target the next release version to 1.10.0

* ci: remove GITHUB_TOKEN environment variable from build.yml

* chore: sync dependencies in src/package.json

* chore: update Node.js engine version in package.json

* chore: provide access to env.GITHUB_TOKEN when building packages

* ci: update build-latest.sh

* fix: upgrade serialport to v10

* docs: update README.md for Node.js support

* fix: use named import for the SerialPort module

* feat: upgrade Electron application

* feat: change indentation from 4 spaces to 2 spaces

* chore: rename `read-user-data` and `write-user-data` to `read-user-config` and `write-user-config`

* chore: babel polyfill is no longer needed

Co-authored-by: cheton <cheton@gmail.com>
  • Loading branch information
emcniece and cheton committed Jan 22, 2023
1 parent f51fa82 commit a0ccc16
Show file tree
Hide file tree
Showing 364 changed files with 63,047 additions and 41,133 deletions.
5 changes: 2 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ workflows:
jobs:
build-tag:
docker:
- image: cimg/node:12.22-browsers
- image: cimg/node:14.20-browsers
steps:
- browser-tools/install-browser-tools
- run:
Expand Down Expand Up @@ -87,7 +87,7 @@ jobs:
- ci.tar.gz
deploy-tag:
docker:
- image: cimg/node:12.22
- image: cimg/node:14.20
steps:
- setup_remote_docker:
version: 19.03.13
Expand Down Expand Up @@ -118,6 +118,5 @@ jobs:
docker build -f Dockerfile -t $DOCKER_REPO:$DOCKER_BRANCH_TAG .
docker images
docker push $DOCKER_REPO:$DOCKER_BRANCH_TAG
docker tag $DOCKER_REPO:$DOCKER_BRANCH_TAG $DOCKER_REPO:latest
docker push $DOCKER_REPO:latest
5 changes: 4 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,18 @@ module.exports = {
}
},
rules: {
'indent': ['error', 2],
'max-lines-per-function': [1, {
max: 512,
skipBlankLines: true,
skipComments: true
}],
'react/jsx-indent': ['error', 2],
'react/jsx-indent-props': ['error', 2],
'react/jsx-no-bind': [1, {
allowArrowFunctions: true
}],
'react/no-access-state-in-setstate': 0,
'react/prefer-stateless-function': 0,
'react/no-access-state-in-setstate': 0
}
};
277 changes: 277 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,277 @@
name: CI

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
build-linux:
name: Build Linux packages
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Environment variables
run: |
# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
echo "• GITHUB_REF_NAME=$GITHUB_REF_NAME"
echo "• GITHUB_REF_TYPE=$GITHUB_REF_TYPE" # `branch` or `tag`
echo "• GITHUB_RUN_NUMBER=$GITHUB_RUN_NUMBER"
echo "• GITHUB_SHA=$GITHUB_SHA"
echo "• RUNNER_ARCH=$RUNNER_ARCH"
echo "• RUNNER_NAME=$RUNNER_NAME"
echo "• RUNNER_OS=$RUNNER_OS"
echo "• RUNNER_TEMP=$RUNNER_TEMP"
echo "• RUNNER_TOOL_CACHE=$RUNNER_TOOL_CACHE"
- name: Install Yarn package manager
run: npm install -g yarn
- name: Install necessary dependencies and perform initial checks
run: |
yarn up
yarn install
yarn lint
yarn test
- name: Run "build" script
if: github.ref_type == 'tag'
run: yarn run build
- name: Run "build-latest" script
if: github.ref_type == 'branch'
run: yarn run build-latest
- name: Build Linux binaries
run: |
yarn run build:linux
- name: Prepare release assets
shell: bash
run: |
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
PRODUCT_NAME=CNCjs
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
mkdir -p releases/linux
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.x86_64.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.x86_64.rpm"
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x86_64.AppImage"
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_amd64.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-amd64.deb"
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.armv7l.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.armv7l.rpm"
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-armv7l.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.AppImage"
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_armv7l.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.deb"
cp -af "output/${PACKAGE_NAME}-${PACKAGE_VERSION}.aarch64.rpm" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux.aarch64.rpm"
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-arm64.AppImage" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.AppImage"
cp -af "output/${PACKAGE_NAME}_${PACKAGE_VERSION}_arm64.deb" "releases/linux/${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.deb"
pushd releases/linux
ln -sf ../../output/linux-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-x64"
ln -sf ../../output/linux-armv7l-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-armv7l"
ln -sf ../../output/linux-arm64-unpacked "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
tar zcfh "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64.tar.gz" "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
rm -f "${PACKAGE_NAME}-${PACKAGE_VERSION}-linux-arm64"
popd
ls -al output releases/linux
if [[ "$GITHUB_REF_TYPE" == "branch" && "$GITHUB_REF_NAME" == "master" ]]; then
yarn github-release delete \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
"*-linux*";
yarn github-release upload \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
--body="${GIT_COMMIT_LOG}" \
releases/linux/*;
fi
#- name: Upload release assets
# uses: actions/github-script@v6
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: |
# // https://github.com/actions/upload-release-asset/issues/47#issuecomment-659071145
# console.log('environment:', process.versions);
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
releases/linux/*
build-macos:
name: Build macOS packages
runs-on: macos-latest
strategy:
matrix:
node-version: [14.x]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Environment variables
run: |
# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
echo "• GITHUB_REF_NAME=$GITHUB_REF_NAME"
echo "• GITHUB_REF_TYPE=$GITHUB_REF_TYPE" # `branch` or `tag`
echo "• GITHUB_RUN_NUMBER=$GITHUB_RUN_NUMBER"
echo "• GITHUB_SHA=$GITHUB_SHA"
echo "• RUNNER_ARCH=$RUNNER_ARCH"
echo "• RUNNER_NAME=$RUNNER_NAME"
echo "• RUNNER_OS=$RUNNER_OS"
echo "• RUNNER_TEMP=$RUNNER_TEMP"
echo "• RUNNER_TOOL_CACHE=$RUNNER_TOOL_CACHE"
- name: Install Yarn package manager
run: npm install -g yarn
- name: Install necessary dependencies and perform initial checks
run: |
yarn up
yarn install
yarn lint
yarn test
- name: Run "build" script
if: github.ref_type == 'tag'
run: yarn run build
- name: Run "build-latest" script
if: github.ref_type == 'branch'
run: yarn run build-latest
- name: Build macOS binaries
run: yarn run build:macos
- name: Prepare release assets
shell: bash
run: |
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
PRODUCT_NAME=CNCjs
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
mkdir -p releases/macos
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}.dmg" "releases/macos/${PACKAGE_NAME}-${PACKAGE_VERSION}-macos-x64.dmg"
cp -af "output/${PRODUCT_NAME}-${PACKAGE_VERSION}-arm64.dmg" "releases/macos/${PACKAGE_NAME}-${PACKAGE_VERSION}-macos-arm64.dmg"
ls -al output releases/macos
if [[ "$GITHUB_REF_TYPE" == "branch" && "$GITHUB_REF_NAME" == "master" ]]; then
yarn github-release delete \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
"*-macos*";
yarn github-release upload \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
--body="${GIT_COMMIT_LOG}" \
releases/macos/*;
fi
#- name: Upload release assets
# uses: actions/github-script@v6
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: |
# // https://github.com/actions/upload-release-asset/issues/47#issuecomment-659071145
# console.log('environment:', process.versions);
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
releases/macos/*
build-windows:
name: Build Windows packages
runs-on: windows-latest
strategy:
matrix:
node-version: [14.x]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Prepare VC++ Runtime
run: choco install -y vcredist2017
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Environment variables
run: |
# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
echo "• GITHUB_REF_NAME=$GITHUB_REF_NAME"
echo "• GITHUB_REF_TYPE=$GITHUB_REF_TYPE" # `branch` or `tag`
echo "• GITHUB_RUN_NUMBER=$GITHUB_RUN_NUMBER"
echo "• GITHUB_SHA=$GITHUB_SHA"
echo "• RUNNER_ARCH=$RUNNER_ARCH"
echo "• RUNNER_NAME=$RUNNER_NAME"
echo "• RUNNER_OS=$RUNNER_OS"
echo "• RUNNER_TEMP=$RUNNER_TEMP"
echo "• RUNNER_TOOL_CACHE=$RUNNER_TOOL_CACHE"
- name: Install Yarn package manager
run: npm install -g yarn
- name: Install necessary dependencies and perform initial checks
run: |
yarn up
yarn install
yarn lint
yarn test
- name: Run "build" script
if: github.ref_type == 'tag'
run: yarn run build
- name: Run "build-latest" script
if: github.ref_type == 'branch'
run: yarn run build-latest
- name: Build Windows binaries
run: yarn run build:windows
- name: Prepare release assets
shell: bash
run: |
GIT_COMMIT_LOG=`git log -1 --format='%ci %H %s'`
PRODUCT_NAME=CNCjs
PACKAGE_NAME=`node -e "console.log(require('./src/package.json').name)"`
PACKAGE_VERSION=`node -e "console.log(require('./src/package.json').version)"`
mkdir -p releases/windows
cp -af "output/${PRODUCT_NAME} Setup ${PACKAGE_VERSION}.exe" "releases/windows/${PACKAGE_NAME}-${PACKAGE_VERSION}-windows-x64.exe"
ls -al output releases/windows
if [[ "$GITHUB_REF_TYPE" == "branch" && "$GITHUB_REF_NAME" == "master" ]]; then
yarn github-release delete \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
"*-windows*";
yarn github-release upload \
--owner=cncjs \
--repo=cncjs \
--tag="${GITHUB_REF_NAME}-latest" \
--release-name="${GITHUB_REF_NAME}" \
--body="${GIT_COMMIT_LOG}" \
releases/windows/*;
fi
#- name: Upload release assets
# uses: actions/github-script@v6
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: |
# // https://github.com/actions/upload-release-asset/issues/47#issuecomment-659071145
# console.log('environment:', process.versions);
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
releases/windows/*
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
node_modules
npm-debug.log
package-lock.json
yarn-debug.log*
yarn-error.log
/.eslintcache
/.nyc_output
/coverage
/dist
/output
/releases

# https://next.yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
Loading

0 comments on commit a0ccc16

Please sign in to comment.