Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
964375ddcf | ||
|
|
ec110b9f4f | ||
|
|
009ca1c607 | ||
|
|
5a1827ae4c | ||
|
|
3b5ac71c72 | ||
|
|
42c4c32b8f | ||
|
|
f1f4280c19 | ||
|
|
1598397a66 | ||
|
|
024e36f5e0 | ||
|
|
eb84d7646a | ||
|
|
d585b049e5 | ||
|
|
18679c6c19 | ||
|
|
66db024c59 | ||
|
|
8421ebc16f | ||
|
|
9a0377c9f9 | ||
|
|
6bb24f4f08 | ||
|
|
6054417c26 | ||
|
|
7260fb7f61 | ||
|
|
0bc3793a68 | ||
|
|
ab1bc511a8 | ||
|
|
0ac3a85234 |
@@ -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 }}
|
||||
|
||||
|
||||
19
CONTRIBUTING.md
Normal file
19
CONTRIBUTING.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Contributing
|
||||
|
||||
## Submitting a pull request
|
||||
|
||||
1. Fork and clone the repository
|
||||
1. Create a new branch: `git checkout -b my-branch-name`
|
||||
1. Push to your fork and submit a pull request
|
||||
1. Pat yourself on the back and wait for your pull request to be reviewed and merged
|
||||
|
||||
## Tips for working this repository:
|
||||
> - The repository is huge right now, you don't want to waste your time and disk space to get those unrelated files.
|
||||
> - Ignore LFS files during initial `git clone` the repo with `GIT_LFS_SKIP_SMUDGE=1 git clone https://mseng@dev.azure.com/mseng/AzureDevOps/_git/CIPlat.Externals`
|
||||
> - Ignore LFS files during any `git checkout` or `git fetch` operation with `GIT_LFS_SKIP_SMUDGE=1`.
|
||||
> - You do want the LFS smudge filter to run during `git add` and `git push`, make sure you don't have `GIT_LFS_SKIP_SMUDGE=1` when you run `git add` and `git push`.
|
||||
> - More `Git-LFS` doc is at https://github.com/git-lfs/git-lfs/tree/main/docs
|
||||
|
||||
Thanks! :heart: :heart: :heart:
|
||||
|
||||
GitHub Actions Team :octocat:
|
||||
34
README.md
34
README.md
@@ -1,8 +1,29 @@
|
||||
# alpine_nodejs
|
||||
# GitHub Alpine NodeJS
|
||||
|
||||
[GitHub Actions Runner](https://github.com/actions/runner/blob/main/src/Misc/externals.sh) download alpine node.js from https://vstsagenttools.blob.core.windows.net/tools/nodejs
|
||||
[](https://github.com/actions/alpine_nodejs/actions)
|
||||
|
||||
The [workflow](https://github.com/TingluoHuang/alpine_nodejs/actions/workflows/docker-image.yml) in this repository can compile a partial-static node.js for alpine and create a [GitHub release](https://github.com/TingluoHuang/alpine_nodejs/releases) for it.
|
||||
The Alpine NodeJS repo houses a redistribution of NodeJS builds that are used within the [GitHub Actions Runner](https://github.com/actions/runner/blob/main/src/Misc/externals.sh).
|
||||
|
||||
### Note
|
||||
|
||||
Thank you for your interest in this GitHub action, however, right now we are not taking contributions. Add commentMore actions
|
||||
|
||||
We continue to focus our resources on strategic areas that help our customers be successful while making developers' lives easier. While GitHub Actions remains a key part of this vision, we are allocating resources towards other areas of Actions and are not taking contributions to this repository at this time. The GitHub public roadmap is the best place to follow along for any updates on features we’re working on and what stage they’re in.
|
||||
|
||||
We are taking the following steps to better direct requests related to GitHub Actions, including:
|
||||
|
||||
1. We will be directing questions and support requests to our [Community Discussions area](https://github.com/orgs/community/discussions/categories/actions)
|
||||
|
||||
2. High Priority bugs can be reported through Community Discussions or you can report these to our support team https://support.github.com/contact/bug-report.
|
||||
|
||||
3. Security Issues should be handled as per our [security.md](security.md)
|
||||
|
||||
We will still provide security updates for this project and fix major breaking changes during this time.
|
||||
|
||||
You are welcome to still raise bugs in this repo.
|
||||
|
||||
## Getting Started
|
||||
The [workflow](https://github.com/actions/alpine_nodejs/actions/workflows/docker-image.yml) in this repository can compile a partial-static node.js for alpine and create a [GitHub release](https://github.com/actions/alpine_nodejs/releases) for it.
|
||||
|
||||
- Queue workflow using `workflow_dispatch` trigger and set the `node` version you want to compile as input, ex: `v12.22.7`
|
||||

|
||||
@@ -13,10 +34,3 @@ The [workflow](https://github.com/TingluoHuang/alpine_nodejs/actions/workflows/d
|
||||
- There should be a newly created release that matches the version you want for `node`, and it is able to run on alpine.
|
||||

|
||||
|
||||
- Once we get [approval](https://github.com/github/open-source-releases/issues/205) to change the current repository from `private` to `public`, then we can consume the release assets directly. In the meantime, you will need to follow [instructions](https://dev.azure.com/mseng/AzureDevOps/_wiki/wikis/AzureDevOps.wiki/4037/How-to-upload-resource-to-vstsagenttools.blob.core.windows.net) to check-in the compiled alpine node.js from the release assets as a `Git-LFS` files to https://dev.azure.com/mseng/AzureDevOps/_git/CIPlat.Externals and get it mirror into https://vstsagenttools.blob.core.windows.net/tools/nodejs
|
||||
> Tips for working with `CIPlat.Externals` repository:
|
||||
> - The repository is huge right now, you don't want to waste your time and disk space to get those unrelated files.
|
||||
> - Ignore LFS files during initial `git clone` the repo with `GIT_LFS_SKIP_SMUDGE=1 git clone https://mseng@dev.azure.com/mseng/AzureDevOps/_git/CIPlat.Externals`
|
||||
> - Ignore LFS files during any `git checkout` or `git fetch` operation with `GIT_LFS_SKIP_SMUDGE=1`.
|
||||
> - You do want the LFS smudge filter to run during `git add` and `git push`, make sure you don't have `GIT_LFS_SKIP_SMUDGE=1` when you run `git add` and `git push`.
|
||||
> - More `Git-LFS` doc is at https://github.com/git-lfs/git-lfs/tree/main/docs
|
||||
|
||||
12
SUPPORT.md
Normal file
12
SUPPORT.md
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
# Support
|
||||
|
||||
## How to file issues and get help
|
||||
|
||||
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.
|
||||
|
||||
## GitHub Support Policy
|
||||
|
||||
Support for this project is limited to the resources listed above.
|
||||
4
versions.json
Normal file
4
versions.json
Normal file
@@ -0,0 +1,4 @@
|
||||
[
|
||||
"v20",
|
||||
"v24"
|
||||
]
|
||||
Reference in New Issue
Block a user