ci's People
Forkers
ryanbas21 agentender wolfsoko wickstargazer photog-tech meeroslav sergeylanzman destreyf kimahari stalkaltan adevil5 jaysoo simpliant-technologies layzeedk juicpt aautem settlemint virtuoushub martines3000 gperdomor mheob michsior14 sebpalluel rrooding cyrixmorten sebastiandg7 harellevy muametgrooby johndalvik hibobio marcusresell yizumi1012xxx estateably hellonarrativ c0zen nachovazquez mikec-greene zackderose barbados-clemens blockchain-lab-um dharmesh-hemaram brianespinosa cinch-labs mattlewis92 getvoicify fyrezone asgerjensen manuelosorio marcoinarrea ctjhoa aerialyticci's Issues
Workflow hangs for full timeout if there are no detectable changes
It appears as though if affected
detects no changes, the agents are brought up and then timeout after the default 60mins.
The PR here had a change to several files that were in a folder that is in .nxignore
Is there something we need to do to short-circuit this?
name: 'Affected commands'
on:
pull_request:
branches: [master]
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: 'true'
NODE_OPTIONS: '--max_old_space_size=4096'
CYPRESS_INSTALL_BINARY: 0
jobs:
main:
name: Nx Cloud Main
uses: nrwl/ci/.github/workflows/[email protected]
with:
main-branch-name: 'master'
node-version: '14.17.0'
npm-version: '6.14.17'
yarn-version: '1.22.18'
parallel-commands-on-agents: |
npx nx-cloud record -- npx nx format:check
npx nx affected --target=lint --parallel=3
npx nx affected --target=test --parallel=3
agents:
name: Nx Cloud Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 12
node-version: '14.17.0'
npm-version: '6.14.17'
yarn-version: '1.22.18'
Publishing
Whats the recommended way of using this repo to do versioning and publishing to npm?
nx-cloud-main.yml returns Error with exit code 1 when another yml is present
I have two actions (see below).
Even though all jobs in each .yml
complete successfully, the Nx Cloud - Main Job
returns Error: Process completed with exit code 1.
This only occurs when there is another .yml
present (even if that .yml
isn't triggered (i.e. only runs on push to main etc)
Any idea why this is?
# Based on template from nx - https://github.com/nrwl/ci
name: Pull Request Flow
on:
pull_request:
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
environment-variables: |
NX_CLOUD_DISTRIBUTED_EXECUTION=true
main-branch-name: master
number-of-agents: 3
init-commands: |
npx nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3
parallel-commands: |
npx nx-cloud record -- npx nx format:check
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3 --base=$NX_BASE --head=$NX_HEAD
npx nx affected --target=test --parallel=3 --ci --code-coverage --base=$NX_BASE --head=$NX_HEAD
npx nx affected --target=build --parallel=3 --base=$NX_BASE --head=$NX_HEAD
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
and another action
name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions π
on:
pull_request:
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "π The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "π§ This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "π The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "π‘ The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "π₯οΈ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "π This job's status is ${{ job.status }}."
Raw Log:
log.txt
Unable to use environment variables in .npmrc with PNPM
We are using different registries for some packages.
For example fontawesome.
This is our .npmrc file:
strict-peer-dependencies=false
auto-install-peers=true
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=${FONTAWESOME_NPM_TOKEN}
Locally I have set a env variable in my .zshrc file, works fine.
Since as of now it is not possible to use any other secrets than the ones defined under secrets, we defined our tokens in Github variables (not optimal, but for now it is fine).
Here is our workflow yml file:
name: CI
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
# NOTE: Here we are using the special `nx-cloud record` command to ensure that any commands we run that do not go through the cloud task runner natively
# (i.e. anything that starts with `nx run`/`nx run-many`/`nx affected --target`), are still captured in the Nx Cloud UI and Github App comment for
# easier troubleshooting. See more here: https://nx.dev/nx-cloud/set-up/record-commands#recording-non-nx-commands
environment-variables: |
FONTAWESOME_NPM_TOKEN=${{ vars.FONTAWESOME_NPM_TOKEN }}
parallel-commands: |
npx nx-cloud record -- npx nx workspace-lint
npx nx-cloud record -- npx nx format:check
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3
npx nx affected --target=test --parallel=3 --ci --code-coverage
npx nx affected --target=build --parallel=3
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
We tried a lot of combinations regarding the environment-variables, it just does not want to work.
If we define our tokens hardcoded in .npmrc, then it works.
It seems to me like the env variables are not parsed at all.
Any feedback is very much appreciated.
pnpm setup fails
Hi!
Due to passing package_json_file
here:
ci/.github/workflows/nx-cloud-agents.yml
Line 108 in 40ef06c
and here:
ci/.github/workflows/nx-cloud-main.yml
Line 132 in 40ef06c
This causes the "Install PNPM" step to fail with these workflows:
The problem here is how pnpm appends the workspace root to the input as well, which is how we end up with it there twice:
Maybe this should be fixed in that action instead?
Error when connecting to Nx Cloud. Code: 404
Lately we've been getting weird cloud errors where the main job times out with a weird 404 error from nx-cloud. The app shows in the text message that the runs went through, when logging into the cloud the runs also seem to go through but the action itself fails with this error:
Sadly I've not been able to create a test repo to reproduce this error π€ If you need any additional info let me know.
Our config:
name: nrwl-nx-ci
on:
push:
branches:
- main
pull_request:
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 2
node-version: 18.14.0
parallel-commands: |
npx nx-cloud record -- npx nx workspace-lint
npx nx-cloud record -- npx nx format:check
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3 --maxWarnings=0
npx nx affected --target=build --parallel=3 -c prod --prod
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 2
node-version: 18.14.0
Lastly, is there a way to completely purge the cache of nx cloud? π€ I am aware of --skip-nx-cache
but there is not command afaik that just resets one nx cloud cache?
Add the possibility to set a container image option
In order to have the possibility to use a specific container image, could we add the container image option?
jobs:
job:
container:
image: ${{ ... }}
For more information, see: https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container
Additionally, timeout-minutes
could we add this one too?
install-command does not work if the install-command contains apostrophe `"`
The input install-command
of the [email protected]
workflow does fail when the install-command
input contains aphostophe.
Error Message:
Run if [ -n "echo "Test"
...
/home/runner/work/_temp/f144c54f-e9f8-48bd-9d58-abcdef123.sh: line 1: [: too many arguments
e.g. in your ci.yaml:
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
node-version: ${{ github.env.NODE_VERSION }}
install-command: |
echo "Test"
sudo apt-get upgrade -y
npm ci
...
The problematic code line seems to be:
ci/.github/workflows/nx-cloud-main.yml
Line 137 in c29f238
Apostrophe inside the install-command
ends the if statement string and leads to unpredictable behavior.
Make more clear what causes the job to fail
The main job fails with Error: Process completed with exit code 1.
at the end of the output
It is not clear at all what causes that failure. I tried debugging it and even revert back to a setup without DTE to see that there was a formatting error.
With DTE the formatting error is printed at the start of the console output and it is polluted with these NX_BASE errors. After the formatter error you get the output from the other task. In my case there are more than 4000 lines between the error and the end of the failed step.
Can it be made more clear what causes the error? Maybe an overview can be provided at the end of the job?
Expose in the docs the "working-directory" input
I was looking for such input to properly have a working recipe in a mono-repo containing a back and front root folders.
I had to fork this repository and go on my own until I came across this existing βworking-directoryβ input, which was precisely what I needed.
Could you officially make it a valid input from the docs so that others may not struggle?
Thanks!
Add caching node_modules option
Feature request.
As dependencies increase in monorepo, yarn commands tend to get longer.
The install time can be shortened by caching the node_modules
.
Is this worth considering?
Usage with act?
Overview
I was wondering if it's possible to use Nx actions locally with act.
Errors
Error
[CI/main] β
Success - Main Checkout
[CI/main] β Run Main Set NX SHAs
[CI/main] π³ docker cp src=/Users/UserName/.cache/act/nrwl-nx-set-shas@v3/ dst=/var/run/act/actions/nrwl-nx-set-shas@v3/
[CI/main] β Run Main Set base and head SHAs used for nx affected
[CI/main] π³ docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-setSHAs.sh] user= workdir=
[CI/main] β ::error::Not Found
[CI/main] β Failure - Main Set base and head SHAs used for nx affected
First issue was something to do with the work directory
Looked at the GH and tried this fix
steps:
- name: Checkout
uses: actions/checkout@v2
with:
path: "my-action"
Then I got this "not a git repository" error
Error
[CI/main] β Run Main Set base and head SHAs used for nx affected
[CI/main] π³ docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1-composite-setSHAs.sh] user= workdir=
| fatal: not a git repository (or any parent up to mount point /Users/UserName/projects/personal)
| Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
| node:internal/errors:857
| const err = new Error(message);
| ^
|
| Error: Command failed: git rev-parse HEAD
| fatal: not a git repository (or any parent up to mount point /Users/UserName/projects/personal)
| Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
|
| at checkExecSyncError (node:child_process:861:11)
| at execSync (node:child_process:932:15)
| at /run/act/actions/nrwl-nx-set-shas@v3/dist/index.js:13735:20
| at /run/act/actions/nrwl-nx-set-shas@v3/dist/index.js:13771:3
| at /run/act/actions/nrwl-nx-set-shas@v3/dist/index.js:13846:3
| at Object.<anonymous> (/run/act/actions/nrwl-nx-set-shas@v3/dist/index.js:13849:12)
| at Module._compile (node:internal/modules/cjs/loader:1155:14)
| at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
| at Module.load (node:internal/modules/cjs/loader:1033:32) {
| status: 128,
| signal: null,
| output: [
| null,
| '',
| 'fatal: not a git repository (or any parent up to mount point /Users/UserName/projects/personal)\n' +
| 'Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n'
| ],
| pid: 34,
| stdout: '',
| stderr: 'fatal: not a git repository (or any parent up to mount point /Users/UserName/projects/personal)\n' +
| 'Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n'
| }
That's where I paused and figured I'd ask to see if anyone has tried this.
Thanks!
Support yarn v2+
I noticed a cache issue with yarn v2+:
ci/.github/workflows/nx-cloud-agents.yml
Lines 123 to 126 in 38a6996
yarn cache dir
doesn't exist in yarn 2+
This should be done instead:
https://github.com/actions/cache/blob/main/examples.md#node---yarn-2
Edit: also --immutable
should be used instead of --frozen-lockfile
at the install step
Update deprecated set-output in workflows
The Github Action set-output syntax is deprecated in favor of the $GITHUB_OUTPUT env var. We should update the workflows accordingly.
Use {{ input.runs-on }} instead of ubuntu-latest for self-hosted option
ci/.github/workflows/nx-cloud-agents.yml
Line 66 in 5951d72
Pass last-successful-event to nrwl/nx-set-shas
I was wondering if it would make sense to pass github.event_name to nrwl/nx-set-shas from nx-cloud-main.yml?
This defaults to push within nrwl/nx-set-shas.
We have a pipeline which runs off both push and release events. When it runs from a release event it would be preferable if the base and head SHAs where from the previous release and the current release rather than the previous push and the current release.
Thanks in advance.
How can we record artifacts on failure too?
I have a project that uses the nrwl/ci/.github/workflows/nx-cloud-main.yml@refs/tags/v0.14
action and some agents to run my Playwright tests for my project.
In my previous setup, I used playwright's sharding feature, where you gather the blob reports from each shard job as artifacts and then consolidate then in a subsequent job.
With using the nx-cloud-main
workflow mentioned above, I set the input values for collecting some artifacts. But unfortunately the Upload Artifacts
step only runs if the main job was successful. See
ci/.github/workflows/nx-cloud-main.yml
Lines 368 to 374 in 81f1194
The Playwright sharding docs recommend to use if: always()
in the "Upload Artifact" step:
- name: Upload blob report to GitHub Actions Artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: blob-report-${{ matrix.shardIndex }}
path: blob-report
retention-days: 1
This will allow for artifacts for failed tests to be uploaded too, which is pretty essential.
Is there a recommended approach here, or is this a change that needs to be made to the nx-cloud-main
workflow?
Potential solutions:
- Provide some guidance to your users that they should include
|| true
to the end of the command where failures are acceptable
- This will unfortunately give a false signal of success for the main job
- Add the
always()
expression to the condition in the "Upload Artifacts" step
- This may be an unexpected behaviour for some users
- Add an input
artifacts-always-upload
to the workflow that allows a user to conditionally turn this behaviour on.
- The condition in the step would become:
if: ${{ inputs.artifacts-path != '' && (success() || (failure() && inputs.artifacts-always-upload)) }}
- Extract the steps of this workflow as a github action (which would exclude the artifact bit) so that users can leverage this code within their own job and handle artifacts how they wish. The
nx-could-main
workflow in your repository would then also use this extracted action.
What do you think?
[Feature Request]: hook the nx cloud workflow up with build artifacts
Hey guys,
I would like to know if it's currently possible to hook the nx cloud main workflow up with build artifacts?
To put it simple, I use this:
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3
npx nx affected --target=test --parallel=3 --ci --code-coverage
npx nx affected --target=build --parallel=3
And I would like to upload the generated code coverage to codecov via another job.
The problem, I can't use the generated files from the main nx workflow because I did not find any way to upload the artifacts with a command like:
- uses: actions/upload-artifact@master
with:
name: dist
path: dist
Right now my workaround has been to copy paste all your script, and add a step after the parallel commands have been executed:
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
Thank you in advance for your attention π
Update using deprecated Node12 actions
Warnings on using deprecated node12 actions with the pnpm setup action.
Print disclaimer if project contains pnpm-lock.yaml
If the repository is using pnpm, we should print out a disclaimer that pnpm it not supported by default and must be provided via custom install command.
workflow exits if one task fails
Issue summary
PR to repro the issue: rarmatei/nx-deploy-test-2#23
(See the YML directly)
If I run 3 targets:
affected --target=test
affected --target=60s-delay-fail
--> waits 60s, then fails (defined withrun-commands
+sleep 20
+ls <non-existent-folder>
affected --target=20s-delay-fail
--> waits 20s, then fails
If I use the workflow, I will get only 1 task on my github comment:
The moment the "tests" fail, it will shutdown every other task, and the NxAPI will not have a chance to mark them as completed. I am setting NX_CLOUD_DISTRIBUTED_EXECUTION_STOP_AGENTS_ON_FAILURE=false
explicitly.
I don't believe this is an NxAPI issue however - if you watch the Agent logs, you will see the Main agent move over to shutting down ALL agents the moment the tests fail, even if the 60s-delay-fail
task hasn't finished.
Simplified issue
Let's simplify the set-up and remove the Nrwl Workflow and Distributed Task Execution: rarmatei/nx-deploy-test-2#24
(See the YML directly)
We get the same broken comment:
If you pull the below into a local script and run it, it will correctly wait for all tasks to finish before shutting down:
pids=()
npx nx affected --target=test --base=origin/main &
pids+=($!)
npx nx affected --target=60s-delay-fail --base=origin/main &
pids+=($!)
npx nx affected --target=20s-delay-fail --base=origin/main &
pids+=($!)
for pid in "${pids[@]}"; do
wait "$pid"
done
So this seems to be a problem only in an Github Action context.
What's more interesting, is that, if you remove the test from the above script and you re-submit it, it will CORRECTLY wait for all tasks to finish:
pids=()
# remove the tests and now it works even on Github Actions
# npx nx affected --target=test --base=origin/main &
# pids+=($!)
npx nx affected --target=60s-delay-fail --base=origin/main &
pids+=($!)
npx nx affected --target=20s-delay-fail --base=origin/main &
pids+=($!)
for pid in "${pids[@]}"; do
wait "$pid"
done
So there seems to be something about how the tests exit that causes the Github Actions step to end prematurely. And this seems to be affecting our workflow as well.
How to make it work
If we use a slightly different approach to run all tasks in parallel, it seems to work, and correctly displays all tasks in the comment: rarmatei/nx-deploy-test-2#25
(See the YML directly)
I don't think I understand bash/Github actions well enough to understand what's happening here, and why it would work in this case.
[Feature Request] Add support for `NX_CLOUD_ACCESS_TOKEN`
Hey there!
In our Nx GitHub Actions setup we currently set the NX_CLOUD_ACCESS_TOKEN
environment variable to a token that has read/write access, while our local development environments use a read-only token (docs here). Is it possible to set a different Nx Cloud token utilizing this workflow?
I apologize if this is considered a duplicate, and I did see issue #8 asking about general environment variables. However, this seems a little more specific because it's an advertised feature of Nx Cloud.
Thank you!
Permission denied error with GitHub Actions when using pnpm
Overveiw
The nrwl/ci/.github/workflows/[email protected]
and nrwl/ci/.github/workflows/[email protected]
actions don't seem to work with pnpm
.
Details
When I tried using the generated GitHub Actions workflow while using pnpm
I encountered this error.
sh: 1: nx-cloud: Permission denied
Error: Process completed with exit code 126.
workflow code
name: CI
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/nx-cloud-main.yml@v0.8
secrets: inherit
with:
number-of-agents: 3
init-commands: |
pnpm exec nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3
parallel-commands: |
pnpm exec nx-cloud record -- pnpm exec nx workspace-lint
pnpm exec nx-cloud record -- pnpm exec nx format:check
parallel-commands-on-agents: |
pnpm exec nx affected --target=lint --parallel=3
pnpm exec nx affected --target=test --parallel=3 --ci --code-coverage
pnpm exec nx affected --target=build --parallel=3
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/nx-cloud-agents.yml@v0.8
secrets: inherit
with:
number-of-agents: 3
Troubleshooting
I tried everything I could think of
- adding
secrets: inherit
- explicitly defining
NX_CLOUD_ACCESS_TOKEN
,NX_CLOUD_AUTH_TOKEN
inenvironment-variables
nx-cloud.env
- reducing the number of agents / parallelism
- different versions of the actions
- etc
Works with yarn
Eventually I switched to yarn and it worked.
Error when changing to v0.11.0
When changing version 0.10 to 0.11 of the action, github actions started showing errors
Here is the error shown by github actions
My workflow file
name: CI - Nx Cloud
on:
pull_request:
branches: [some branchs]
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: true
NX_CLOUD_DISTRIBUTED_EXECUTION_STOP_AGENTS_ON_FAILURE: true
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
main:
name: Nx Cloud - Main Job
permissions:
contents: 'read'
actions: 'write'
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
parallel-commands-on-agents: |
yarn nx affected --target=c1 --parallel=3
yarn nx affected --target=c2 --parallel=3
yarn nx affected --target=c3 --parallel=3
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
Allow to override agent runner
Hi, I want to run nrwl/ci/.github/workflows/nx-cloud-main.yml
and nrwl/ci/.github/workflows/nx-cloud-agents.yml
with a self hosted runner but there's no option to override it :(
First test in each library is very slow
I am using the nx-cloud-main.yml
workflow for our runs. Its working fine, splitting up our runs across three agents. However, our Jest tests run very slow. And it seems that the first test in each library takes a long time, and then the rest of the tests run fast.
I have tried to play with --maxworkers
and --runInBand
but have not seen much of any improvement.
The tests run blazing fast locally, using the same nx command npx nx run-many --target=test --parallel=3 --all -- --runInBand
Can this be an issue with the Github workflow, or with nx config - or just the way we use tests?
How to integrate flutter test and build to this workflow?
I have a flutter app and a nodejs app inside the repo. But github actions fails every time with an error Flutter command not found.
. How do I integrate flutter build tools into this workflow?
How to get outputs from nx-cloud-main workflow?
I've been trying to see if it is possible to execute a command within the nx-cloud-main workflow and send the result to $GITHUB_OUTPUT and then pick it up later on in our pipeline.
Our use case is to drive a strategy matrix with a list of affected projects with a "package" target which in our case means that the project needs to be pushed to ECR and deployed to ECS. We have this working already with a custom action but it requires a fair bit of copy/paste from the nx-cloud-main workflow which is a bit of a maintenance overhead to keep up to date.
I don't think this is possible with a reusable workflow (a GitHub limitation not an Nx one) but I am hoping to be proved wrong.
Thanks in advance.
Add support to use git-crypt
Provide support to optionally use git-crypt. Repositories using this tool have a restricted behavior as some required workspace files are not readable.
Support setting registry-url and scope for private packages
We currently have this step in our workflow that we are trying to migrate to NxCloud DTE
- uses: actions/setup-node@v3
with:
node-version: '20'
cache: 'npm'
registry-url: 'https://npm.pkg.github.com'
scope: '@myorg'
The current workflow does support node-version and cache but does not support the registry-url
and scope
params. There is also support for setting the NPM_TOKEN
secret but I am struggling to see how that can even be used without being able to set these. Could we set these using a .npmrc
file in the root of our repo?
When there's a pr that doesn't affect anything in nx build (i.e yml file change, md file etc...) there are no artifacts at all.
When there's a pr that doesn't affect anything in nx build (i.e yml file change, md file etc...) there are no artifacts at all.
In that case the deploy fails on downloading the artifacts...
i.e
And in the deploy step I get this error:
what is the suggested approach to downloading artifacts without getting errors if they are missing?
packageManager in package.json is not respected for pnpm setup action
The setup action of PNPM should always take into account the version set in the package manager. This is already the case by default for the action.
The issue here is that the pnpm-setup action by default takes the version in package.json (packageManager) into account if no version is specified. nrwl/ci on the other hand takes the latest version if none is specified.
Is this task compatible with Nx17?
After upgrading to NX17, my build job fails to run with "To use Distributed Task Execution, your default task runner configuration must use the "nx-cloud" task runner."
For background: I'm using nx-cloud only on the CI server. Nx migrate removed the taskRunnerOptions
from nx.json, so not really sure why it would need to set it again?
SHORT FORM:
Is this shared action known to be compatible with nx17?
LONG FORM:
I've bumped to run on 0.14.0 of this action, but i get
For Start Nx Agent 1/2/3
Run npx nx-cloud start-agent
> NX Starting an agent for running Nx tasks
> NX Invalid Task Runner Configuration
To use Distributed Task Execution, your default task runner configuration must
use the "nx-cloud" task runner.
This can be adjusted in "nx.json".
Under "Run any configured install commands" it logs
Run npm ci --prefer-offline --audit false --legacy-peer-deps
npm ci --prefer-offline --audit false --legacy-peer-deps
npm run postinstall
npx nx report
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: true
NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT: 3
NX_BRANCH: [2](https://github.com/<ORG>/<REPO>/actions/runs/6958272621/job/18932964541#step:15:2)54
NX_CLOUD_ACCESS_TOKEN: ***
NX_CLOUD_AUTH_TOKEN:
NPM_TOKEN:
VOLTA_HOME: /opt/hostedtoolcache/volta/1.1.1/x64
npm WARN deprecated [email protected]: Please upgrade to @sentry/node. See the migration guide https://bit.ly/[3](https://github.com/ORG/REPO/actions/runs/6958272621/job/18932964541#step:15:3)ybOlo7
npm WARN deprecated [email protected]: We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser
npm WARN deprecated @types/[email protected]: This is a stub types definition for reflect-metadata (https://github.com/rbuckton/ReflectDecorators). reflect-metadata provides its own type definitions, so you don't need @types/reflect-metadata installed!
npm WARN deprecated @slack/[email protected]: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm WARN deprecated @babel/[email protected]: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
npm WARN deprecated @babel/[email protected]: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
npm WARN deprecated @babel/[email protected]: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
npm WARN deprecated [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
> [email protected] postinstall
> node ./decorate-angular-cli.js
> NX Decoration of the Angular CLI is deprecated and will be removed in a future version
Please replace usage of "ng <command>" in any scripts, particularly for CI, with "nx <command>"
> NX Angular CLI has been decorated to enable computation caching.
added 2687 packages in 1m
358 packages are looking for funding
run `npm fund` for details
> [email protected] postinstall
> node ./decorate-angular-cli.js
> NX Decoration of the Angular CLI is deprecated and will be removed in a future version
Please replace usage of "ng <command>" in any scripts, particularly for CI, with "nx <command>"
> NX Angular CLI has been decorated to enable computation caching.
> NX Report complete - copy this into the issue template
Node : 18.18.2
OS : linux-x6[4](https://github.com/ORG/REPO/actions/runs/6958272621/job/18932964541#step:15:4)
npm : 9.8.1
nx : 17.1.3
@nx/js : 17.1.3
@nx/jest : 17.1.3
@nx/linter : 17.1.3
@nx/eslint : 17.1.3
@nx/workspace : 17.1.3
@nx/angular : 17.1.3
@nx/cypress : 17.1.3
@nx/devkit : 17.1.3
@nx/eslint-plugin : 17.1.3
@nx/plugin : 17.1.3
@nx/storybook : 17.1.3
@nrwl/tao : 17.1.3
@nx/web : 17.1.3
@nx/webpack : 17.1.3
typescript : [5](https://github.com/ORG/REPO/actions/runs/6958272621/job/18932964541#step:15:5).2.2
---------------------------------------
Community plugins:
@currents/nx : 0.2.1
@ngneat/spectator : 10.0.1
@storybook/angular : [7](https://github.com/ORG/REPO/actions/runs/6958272621/job/18932964541#step:15:7).5.3
ng-mocks : 14.[12](https://github.com/ORG/REPO/actions/runs/6958272621/job/18932964541#step:15:12).1
---------------------------------------
Local workspace plugins:
My tasks:
main:
needs:
- install
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
secrets:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
with:
number-of-agents: 3
install-commands: npm ci --prefer-offline --audit false --legacy-peer-deps && npm run postinstall
init-commands: |
npx nx-cloud start-ci-run --stop-agents-after="e2e" --agent-count=3
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3
npx nx affected --target=test --ci --base=remotes/origin/main --parallel=3 --runInBand --exclude integration-tests components storefront-b2c feed-generator
npx nx affected --target=server --parallel=3
npx nx affected --target=build --parallel=3
# check server side builds as well as regular builds, to capture any broken services
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
secrets:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
with:
number-of-agents: 3
install-commands: |
npm ci --prefer-offline --audit false --legacy-peer-deps
npm run postinstall
npx nx report
Passing Env vars into action
Hi, thanks for this action! looks amazing.
Is there any way of passing a env var into the action?
I would like to pass an npm token as an env var into the action so when it build it can read packages from a private registry.
Run volta-cli Step 404 Error
I generated the GitHub Actions CI file with the generator, but when I create the PR for the action to run it fails with the following error:
Agents:
Main Job:
I'm unsure why it's failing, but my ci.yaml file that was generated is basically unchanged. I added a few environment variables and an init-commands section, and changed the name of the main branch:
CI Yaml File
on: push: branches: - master pull_request: branches: - masterenv:
NX_BRANCH: ${{ github.event.number }}
NX_RUN_GROUP: ${{ github.run_id }}
NPM_TOKEN: ${{ secrets.MYGET_TOKEN }}
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
main-branch-name: master
init-commands: |
cp npmrc_file .npmrc
parallel-commands: |
npx nx-cloud record -- npx nx workspace-lint
npx nx-cloud record -- npx nx format:check
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3
npx nx affected --target=test --parallel=3 --ci --code-coverage
npx nx affected --target=build --parallel=3
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
My version of Angular is 13.3.11 and Nx is 14.1.9.
Frequent failure with volta-cli//action
The error of using Volta to install Node.js 16.18.1 failed quite often and it is quite disruptive to our pipelines. Happens 1-2 times everyday
Do you have any suggestions on how I can improve this?
Run volta-cli/action@v4
with:
node-version: 16.18.1
npm-version: 8.19.[2](https://github.com/***/****/actions/runs/)
token: ***
always-auth: false
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: true
NX_BRANCH: develop
NX_CLOUD_ACCESS_TOKEN:
NX_CLOUD_AUTH_TOKEN:
NPM_TOKEN:
looking up latest volta version
downloading [email protected]
/usr/bin/tar xz --warning=no-unknown-keyword --overwrite -C /home/runner/work/_temp/118[3](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:3)303d-b7a6-[4](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:4)af9-88cc-1b79993d1[5](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:5)9c/bin -f /home/runner/work/_temp/0522f090-57c9-480f-b553-83[6](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:6)3bbdef8cd
/opt/hostedtoolcache/volta/1.1.1/x64/bin/volta setup
caching [email protected] into /opt/hostedtoolcache/volta/1.1.1/x64
adding /opt/hostedtoolcache/volta/1.1.1/x64/bin to $PATH
installing Node 16.18.1
/opt/hostedtoolcache/volta/1.1.1/x64/bin/volta install [email protected]
error: Could not unpack Node v16.18.1
Please ensure the correct version is specified.
error: Error cause: failed to unpack `/opt/hostedtoolcache/volta/1.1.1/x64/tmp/.tmprsHt[7](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:7)a/node-v16.1[8](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:8).1-linux-x64/bin/node`
Error cause: failed to unpack `/opt/hostedtoolcache/volta/1.1.1/x64/tmp/.tmprsHt7a/node-v16.18.1-linux-x64/bin/node`
Error cause: failed to unpack `node-v16.18.1-linux-x64/bin/node` into `/opt/hostedtoolcache/volta/1.1.1/x64/tmp/.tmprsHt7a/node-v16.18.1-linux-x64/bin/node`
Error cause: Resource temporarily unavailable (os error [11](https://github.com//actions/runs/4692165290/jobs/8317540378#step:4:11))
Error: The process '/opt/hostedtoolcache/volta/1.1.1/x64/bin/volta' failed with exit code 1
Add support for pnpm
Blocked by volta-cli/volta#737
CI Fails with Error: ENOENT: no such file or directory './.github/workflows/run-commands-in-parallel.sh'
I am using the ci template to get initial out of the box CI with nx cloud.
I am getting this error since 2 days.
If I understand correctly it is a script generated by the workflow itself. Is this known?
failed 12 minutes ago in 1m 26s
Search logs
4s
2s
0s
0s
0s
1s
0s
0s
4s
0s
0s
0s
0s
1m 9s
0s
##[debug]Evaluating condition for step: 'Create command utils'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: Create command utils
##[debug]Loading inputs
##[debug]Evaluating: github.token
##[debug]Evaluating Index:
##[debug]..Evaluating github:
##[debug]..=> Object
##[debug]..Evaluating String:
##[debug]..=> 'token'
##[debug]=> '***'
##[debug]Result: '***'
##[debug]Loading env
Run actions/github-script@v6
with:
script: const { writeFileSync } = require('fs');
const runCommandsInParallelScript = `
# Extract the provided commands from the stringified JSON array.
IFS=$'\n' read -d '' -a userCommands < <((jq -c -r '.[]') <<<"$[1](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:1)")
# Invoke the provided commands in parallel and collect their exit codes.
pids=()
for userCommand in "\${userCommands[@]}"; do
eval "$userCommand" & pids+=($!)
done
# If any one of the invoked commands exited with a non-zero exit code, exit the whole thing with code 1.
for pid in \${pids[*]}; do
if ! wait $pid; then
exit 1
fi
done
# All the invoked commands must have exited with code zero.
exit 0
`;
writeFileSync('./.github/workflows/run-commands-in-parallel.sh', runCommandsInParallelScript);
github-token: ***
debug: false
user-agent: actions/github-script
result-encoding: json
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: true
NX_BRANCH: 8
NX_BASE: a98c3111c1719c38b639b69a9811e49f373361ea
NX_HEAD: 6accfdaef9a5fb6[2](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:2)d9c621e[3](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:3)07b85[4](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:4)d[5](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:5)1829cdce
VOLTA_HOME: /opt/hostedtoolcache/volta/1.0.7/x[6](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:6)4
Error: ENOENT: no such file or directory, open './.github/workflows/run-commands-in-parallel.sh'
at Object.openSync (node:fs:585:3)
at writeFileSync (node:fs:2153:35)
at eval (eval at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:480[7](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:7):16), <anonymous>:24:1)
at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:4[8](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:8)08:12)
at main (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:4862:26)
at Module.272 (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:4846:1)
at __webpack_require__ (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:24:31)
at startup (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:43:1[9](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:9))
at /home/runner/work/_actions/actions/github-script/v6/dist/index.js:49:18
at Object.<anonymous> (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:52:[10](https://github.com/Cheveo/gymony/runs/6592554030?check_suite_focus=true#step:15:10)) {
errno: -2,
syscall: 'open',
code: 'ENOENT',
path: './.github/workflows/run-commands-in-parallel.sh'
}
Error: Unhandled error: Error: ENOENT: no such file or directory, open './.github/workflows/run-commands-in-parallel.sh'
##[debug]Node Action run completed with exit code 1
##[debug]Finishing: Create command utils```
Allow artifact retention period to be configured
This is a feature request. We recently started using the ability to store artifacts made possible by the artifacts-path parameter to the nx-cloud-main workflow. This has had the knock on effect of significantly increasing our storage costs for artifacts we only need to store short term.
I don't think GitHub supports this on a per-repository basis (happy to be corrected) and we do not want to lower the organisation wide default. So if we could set on a per-workflow basis that would be ideal.
The upload artifact action which you are using supports this - https://github.com/actions/upload-artifact#retention-period.
[Feature Request]: Add Init Commands Option for Agents
We need to add domains to our /etc/hosts
file in order for our E2E to run successfully.
We have to spin up a web and api server, which we need to test on actual domains.
It appears, that agents run on different machines (I'm not a CI expert, but this seems reasonable) than the main
job runs on (which makes sense). So I need each agent that is running an E2E (at least for this E2E job), to have these /etc/hosts
domains available.
I have been changing the /etc/hosts file like so:
sudo echo "127.0.0.1 sdkapp.example.com auth.example.com api.example.com user.example.com" | sudo tee -a /etc/hosts
It would be great if we have an option for init-commands: |
in agent config as well.
Something like this:
agents:
name: Forgerock CI Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
init-commands: |
sudo echo "127.0.0.1 sdkapp.example.com auth.example.com api.example.com user.example.com" | sudo tee -a /etc/hosts
number-of-agents: 3
For my understanding: In this scenario, I think only the agent needs to edit to the /etc/hosts config file, and the "main" job in this instance would not need it because its not really "running" the command. Is this correct?
Specifying a custom runner with runs-on fails
Specifying a custom runner with runs-on
fails with the following error message:
Called workflows cannot be queued onto self-hosted runners across organisations/enterprises. Failed to queue this job. Labels: '8-core_runner'.
Any idea what could be wrong or how to fix this?
The github actions config:
name: CI
on:
push:
branches:
- master
- staging
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
secrets:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
with:
runs-on: 8-core_runner
main-branch-name: master
parallel-commands: |
npx nx-cloud record -- nx format:check --all
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=4 --maxWarnings=0
npx nx affected --target=test --parallel=4 --ci
npx nx affected --target=build --parallel=4 --prod
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
secrets:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
with:
runs-on: 8-core_runner
number-of-agents: 8
Environment variables in custom workflow
CI Provider: GitHub
Where do I set env vars when using a custom workflow for the parallel tasks? Do I set them on the agent job? if so which step? the Start Nx Agent step? This didn't seem to be working for me.
Github CI - no such file or directory package.json
Hello,
I used the command line :
nx g ci-workflow
to generate my github workflow.
It generated me a ci.yml
file where I added my secret NX_CLOUD_ACCESS_TOKEN
name: CI
on:
push:
branches:
- main
pull_request:
# Needed for nx-set-shas within nx-cloud-main.yml, when run on the main branch
permissions:
actions: read
contents: read
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
with:
main-branch-name: main
number-of-agents: 3
init-commands: |
pnpm exec nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3
parallel-commands: |
pnpm exec nx-cloud record -- pnpm exec nx format:check
parallel-commands-on-agents: |
pnpm exec nx affected --target=lint --parallel=3
pnpm exec nx affected --target=test --parallel=3 --ci --code-coverage
pnpm exec nx affected --target=build --parallel=3
secrets:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
with:
number-of-agents: 3
When the pipeline runs I receive this error during Install PNPM
step
Run pnpm/action-setup@v2
with:
package_json_file: /home/runner/work/myrepo/myrepo/package.json
dest: ~/setup-pnpm
run_install: null
standalone: false
env:
NX_CLOUD_DISTRIBUTED_EXECUTION: true
NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT: 3
NX_BRANCH: 4
NX_CLOUD_ACCESS_TOKEN: ***
NX_CLOUD_AUTH_TOKEN:
NPM_TOKEN:
NX_BASE: abb15dd8634ea8a39afef3e0510f9[2](https://github.com/sueno-ltd/myrepo/actions/runs/7383009232/job/20083548144#step:7:2)458ffabf76
NX_HEAD: dc52fca6dbde92cf8[3](https://github.com/sueno-ltd/myrepo/actions/runs/7383009232/job/20083548144#step:7:3)72369f0c2a1f8ebec6dd8d
VOLTA_HOME: /opt/hostedtoolcache/volta/1.1.1/x6[4](https://github.com/sueno-ltd/myrepo/actions/runs/7383009232/job/20083548144#step:7:4)
Running self-installer...
[Error: ENOENT: no such file or directory, open '/home/runner/work/myrepo/myrepo/home/runner/work/myrepo/myrepo/package.json'] {
errno: -2,
Error: Error: ENOENT: no such file or directory, open '/home/runner/work/myrepo/myrepo/home/runner/work/myrepo/myrepo/package.json'
code: 'ENOENT',
syscall: 'open',
path: '/home/runner/work/myrepo/myrepo/home/runner/work/myrepo/myrepo/package.json'
}
It looks like the current path is duplicated
Thank you in advance for your help
How do I use external GitHub actions within Nx workflow
Example: I would like to "plug" the Coveralls Github Action at the end of Nx workflow, after running the tests with the coverage flag.
What should I do?
In Github Actions docs, they suggest uploading the artifacts for sharing between jobs, but it's also an action π€·ββοΈ
Should you guys break the workflow into actions to cover these complex needs?
Thanks!
runs-on config is not working as expected
I tried to use larger runners to speed up our nx builds even more. GitHub provides us a list of large runners for example: ubuntu-latest-16-cores
.
When I set this name in the ci-config, the build will fail. It looks like it is not possible to define the requested runner by name. I'm missing something in my config?
name: NX Cloud
on:
push:
branches:
- develop
- master
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.ref }}
cancel-in-progress: true
jobs:
main:
name: Nx Cloud - Main Job
uses: nrwl/ci/.github/workflows/[email protected]
if: github.event.pull_request.draft == false
with:
number-of-agents: 3
runs-on: ubuntu-latest-16-cores
main-branch-name: 'master'
init-commands: |
npx nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3
parallel-commands: |
npx nx-cloud record -- npx nx workspace-lint
npx nx-cloud record -- npx nx format:check
parallel-commands-on-agents: |
npx nx affected --target=lint --parallel=3
npx nx run-many --all --target=test --parallel=3 --ci --code-coverage --coverageReporters=lcov
npx nx affected --target=build --parallel=1
final-commands: |
npx nx-cloud record node ./tools/scripts/coverageMerger.js
artifacts-path: |
coverage/lcov.info
artifacts-name: coverage-report
agents:
name: Nx Cloud - Agents
uses: nrwl/ci/.github/workflows/[email protected]
if: github.event.pull_request.draft == false
with:
number-of-agents: 3
runs-on: ubuntu-latest-16-cores
Volta does not read package.json when working-directory is passed
The volta install action always looks for the package.json
file in the root of the repository, independently of specifying a different working-directory
How do I set environment variables inside of this workflow?
Hey, guys!
I would like to set the NPM_TOKEN
env var in the nx workflow due to our private repository.
How can I do it? Thanks!
add timeout-minutes options for pipeline jobs
The Problem
Sometimes the workflow hangs for large amounts of time (>1hour) when some of the actions fail.
We would like to be able to configure the timeout-minutes configuration for the pipeline jobs.
Additional Resources
nx-cloud-main: forward secrets/env for commands running parallel
Hello, I am using nx-cloud-main
and I have a use case where I need to pass a secret into a command running in parallel. It is currently impossible, can we get a way to set internal environment variables from outside or allow nx-cloud-main
to use secrets?
I am using @nx-tools/nx-container
and they require secrets.GITHUB_TOKEN
Upload Coverage
Hey !
First of all, thanks for the work.
In the example, a --code-coverage is used. Which means coverage files are generated.
The problem is, since the tests are run on the agents, the coverage files are generated there, and are not available on the main job.
How would you upload these coverage files ? (using the codecov action for example)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.