Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
009ca1c607 | ||
|
|
5a1827ae4c | ||
|
|
3b5ac71c72 | ||
|
|
42c4c32b8f | ||
|
|
f1f4280c19 | ||
|
|
eb84d7646a |
@@ -8,16 +8,47 @@ on:
|
||||
NodeVersion:
|
||||
required: true
|
||||
description: 'Node.js version to build (ex: v12.22.7, v16.12.0)'
|
||||
workflow_call:
|
||||
inputs:
|
||||
NodeVersion:
|
||||
required: true
|
||||
description: 'Node.js version to build (ex: v12.22.7, v16.12.0)'
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
prebuild:
|
||||
outputs:
|
||||
NodeVersion: ${{ steps.check_node_version.outputs.NodeVersion }}
|
||||
name: Determine node.js version
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check node.js version
|
||||
id: check_node_version
|
||||
run: |
|
||||
# Determine which NodeVersion input to use
|
||||
if [ -n "${{ github.event.inputs.NodeVersion }}" ]; then
|
||||
NODE_VERSION="${{ github.event.inputs.NodeVersion }}"
|
||||
echo "Using NodeVersion from workflow_dispatch: $NODE_VERSION"
|
||||
elif [ -n "${{ inputs.NodeVersion }}" ]; then
|
||||
NODE_VERSION="${{ inputs.NodeVersion }}"
|
||||
echo "Using NodeVersion from workflow_call: $NODE_VERSION"
|
||||
else
|
||||
echo "Error: No NodeVersion specified"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set the output that will be used by subsequent steps/jobs
|
||||
echo "NodeVersion=$NODE_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
build:
|
||||
name: Build node.js ${{github.event.inputs.NodeVersion}}
|
||||
needs: [prebuild]
|
||||
name: Build node.js ${{needs.prebuild.outputs.NodeVersion}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Build the Docker image
|
||||
run: |
|
||||
NodeVersion="${{github.event.inputs.NodeVersion}}"
|
||||
NodeVersion="${{needs.prebuild.outputs.NodeVersion}}"
|
||||
PythonVersion="python3"
|
||||
if [[ $NodeVersion = v12* ]]
|
||||
then
|
||||
@@ -25,31 +56,31 @@ jobs:
|
||||
fi
|
||||
echo node.js version $NodeVersion
|
||||
echo python version $PythonVersion
|
||||
docker build --file Dockerfile --tag alpine_nodejs:${{github.event.inputs.NodeVersion}} --build-arg NodeVersion=${{github.event.inputs.NodeVersion}} --build-arg PythonVersion=$PythonVersion .
|
||||
docker build --file Dockerfile --tag alpine_nodejs:${{needs.prebuild.outputs.NodeVersion}} --build-arg NodeVersion=${{needs.prebuild.outputs.NodeVersion}} --build-arg PythonVersion=$PythonVersion .
|
||||
- name: Copy alpine node.js out
|
||||
run: |
|
||||
mkdir $RUNNER_TEMP/alpine_node
|
||||
docker run --rm -v $RUNNER_TEMP/alpine_node:/node_output alpine_nodejs:${{github.event.inputs.NodeVersion}}
|
||||
docker run --rm -v $RUNNER_TEMP/alpine_node:/node_output alpine_nodejs:${{needs.prebuild.outputs.NodeVersion}}
|
||||
ls -l -R $RUNNER_TEMP/alpine_node
|
||||
- name: Upload alpine node.js
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: alpine_nodejs_${{github.event.inputs.NodeVersion}}
|
||||
path: ${{runner.temp}}/alpine_node/node-${{github.event.inputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
name: alpine_nodejs_${{needs.prebuild.outputs.NodeVersion}}
|
||||
path: ${{runner.temp}}/alpine_node/node-${{needs.prebuild.outputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
|
||||
test:
|
||||
name: Test node.js ${{github.event.inputs.NodeVersion}}
|
||||
needs: [build]
|
||||
name: Test node.js ${{needs.prebuild.outputs.NodeVersion}}
|
||||
needs: [prebuild, build]
|
||||
runs-on: ubuntu-latest
|
||||
container: alpine
|
||||
steps:
|
||||
- name: Download alpine node.js
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: alpine_nodejs_${{github.event.inputs.NodeVersion}}
|
||||
name: alpine_nodejs_${{needs.prebuild.outputs.NodeVersion}}
|
||||
- run: |
|
||||
ls -l
|
||||
tar xzf ./node-${{github.event.inputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
tar xzf ./node-${{needs.prebuild.outputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
ls -l -R
|
||||
./bin/node -v
|
||||
./bin/node -e "console.log('hello world')"
|
||||
@@ -57,25 +88,25 @@ jobs:
|
||||
ldd ./bin/node
|
||||
name: Test node
|
||||
release:
|
||||
name: Create release for node.js ${{github.event.inputs.NodeVersion}}
|
||||
needs: [test]
|
||||
name: Create release for node.js ${{needs.prebuild.outputs.NodeVersion}}
|
||||
needs: [prebuild, test]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download alpine node.js
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: alpine_nodejs_${{github.event.inputs.NodeVersion}}
|
||||
name: alpine_nodejs_${{needs.prebuild.outputs.NodeVersion}}
|
||||
# Create GitHub release
|
||||
- uses: actions/create-release@master
|
||||
id: createRelease
|
||||
name: Create node.js ${{github.event.inputs.NodeVersion}} Alpine Release
|
||||
name: Create node.js ${{needs.prebuild.outputs.NodeVersion}} Alpine Release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: "${{github.event.inputs.NodeVersion}}"
|
||||
release_name: "${{github.event.inputs.NodeVersion}}"
|
||||
tag_name: "${{needs.prebuild.outputs.NodeVersion}}"
|
||||
release_name: "${{needs.prebuild.outputs.NodeVersion}}"
|
||||
body: |
|
||||
Alpine node.js ${{github.event.inputs.NodeVersion}}
|
||||
Alpine node.js ${{needs.prebuild.outputs.NodeVersion}}
|
||||
# Upload release assets
|
||||
- name: Upload Release Asset
|
||||
uses: actions/upload-release-asset@v1.0.1
|
||||
@@ -83,6 +114,6 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.createRelease.outputs.upload_url }}
|
||||
asset_path: ${{ github.workspace }}/node-${{github.event.inputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
asset_name: node-${{github.event.inputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
asset_path: ${{ github.workspace }}/node-${{needs.prebuild.outputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
asset_name: node-${{needs.prebuild.outputs.NodeVersion}}-alpine-x64.tar.gz
|
||||
asset_content_type: application/octet-stream
|
||||
|
||||
80
.github/workflows/release-alpine-nodejs-on-schedule.yml
vendored
Normal file
80
.github/workflows/release-alpine-nodejs-on-schedule.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
name: Build and Release Alpine Node.js on Schedule
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0' # Every Sunday at midnight
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
get_versions:
|
||||
outputs:
|
||||
versions: ${{ steps.set-matrix.outputs.versions }}
|
||||
buildnode: ${{ steps.set-matrix.outputs.buildnode }}
|
||||
name: Find versions to build and release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Find latest versions from each major version
|
||||
id: set-matrix
|
||||
run: |
|
||||
BUILD_NODE=0
|
||||
|
||||
# Read major versions from versions.json
|
||||
MAJOR_VERSIONS=$(jq -r '.[]' versions.json)
|
||||
|
||||
# Initialize array to store latest versions
|
||||
LATEST_VERSIONS=()
|
||||
|
||||
# For each major version, find the latest release
|
||||
for VERSION in $MAJOR_VERSIONS; do
|
||||
# Get latest release for this major version
|
||||
LATEST=$(curl -s "https://nodejs.org/dist/index.json" | \
|
||||
jq -r "[.[] | select(.version | startswith(\"$VERSION.\"))] | sort_by(.date) | reverse | .[0].version")
|
||||
|
||||
if [ -n "$LATEST" ]; then
|
||||
echo "Found latest $VERSION: $LATEST"
|
||||
|
||||
# Check if this version already exists in GitHub releases
|
||||
# Using the GitHub API to check if the tag/release exists
|
||||
RELEASE_EXISTS=$(curl -s -H "Authorization: token ${{github.token}}" \
|
||||
"https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${LATEST}" | \
|
||||
jq -r '.id != null')
|
||||
|
||||
if [ "$RELEASE_EXISTS" == "true" ]; then
|
||||
echo "Release for $LATEST already exists - skipping"
|
||||
else
|
||||
echo "Release for $LATEST does not exist - will build"
|
||||
LATEST_VERSIONS+=("$LATEST")
|
||||
BUILD_NODE=1
|
||||
fi
|
||||
else
|
||||
echo "No version found for $VERSION"
|
||||
fi
|
||||
done
|
||||
|
||||
# Create properly escaped JSON for GitHub Actions
|
||||
MATRIX_JSON=$(jq -c -n --argjson versions "$(printf '%s\n' "${LATEST_VERSIONS[@]}" | jq -R . | jq -s .)" '{"node_version":$versions}')
|
||||
echo "Matrix JSON: $MATRIX_JSON"
|
||||
|
||||
# Setting output with proper delimiter for multiline values
|
||||
echo "versions<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$MATRIX_JSON" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
echo "buildnode=$BUILD_NODE" >> $GITHUB_OUTPUT
|
||||
|
||||
build_release:
|
||||
name: Build and Release Node.js
|
||||
needs: get_versions
|
||||
if: needs.get_versions.outputs.buildnode == 1
|
||||
strategy:
|
||||
matrix: ${{ fromJSON(needs.get_versions.outputs.versions) }}
|
||||
uses: ./.github/workflows/build-release-alpine-nodejs.yml
|
||||
permissions:
|
||||
contents: write
|
||||
with:
|
||||
NodeVersion: ${{ matrix.node_version }}
|
||||
|
||||
|
||||
@@ -3,9 +3,7 @@
|
||||
|
||||
## How to file issues and get help
|
||||
|
||||
This project uses GitHub issues to track bugs and feature requests. Please search the existing issues before filing new issues to avoid duplicates. For new issues, file your bug or feature request as a new issue.
|
||||
|
||||
For help or questions about using this project, please check the [discussions](https://github.com/actions/alpine_nodejs/discussions)
|
||||
This project does not support issues, however you may submit a pull request with any proposed improvements.
|
||||
|
||||
`actions/alpine_nodejs` is under active development and maintained by GitHub staff **AND THE COMMUNITY**. We will do our best to respond to support, feature requests, and community questions in a timely manner.
|
||||
|
||||
|
||||
4
versions.json
Normal file
4
versions.json
Normal file
@@ -0,0 +1,4 @@
|
||||
[
|
||||
"v20",
|
||||
"v24"
|
||||
]
|
||||
Reference in New Issue
Block a user