Giter VIP home page Giter VIP logo

akhilmhdh / contributors-readme-action Goto Github PK

View Code? Open in Web Editor NEW
157.0 157.0 44.0 3.69 MB

A github action to automate a contributors section in readme.

Home Page: https://nicedoc.io/akhilmhdh/contributors-readme-action

License: MIT License

JavaScript 100.00%
automation bots bots-contribute collaborators collaborators-contribte contributors contributors-welcome github-actions hacktoberfest keyword productivity-tools readme readme-md username workflow

contributors-readme-action's Introduction

Profile Pic

Let's connect! Find me on the web.



  • ๐Ÿ”ญ Iโ€™m currently working on Infisical, Square One(coming soon) ๐Ÿคซ
  • ๐ŸŒฑ Iโ€™m currently learning Compilers and Systems ๐Ÿค”
  • ๐Ÿ‘ฏ Iโ€™m looking to collaborate on More on Real World Problems and OpenSource ๐Ÿ™‚
  • ๐Ÿ’ฌ Ask me about anything on technology. Let's find the ans together ๐Ÿ˜
  • โœจ Ultra extrovert ๐Ÿ˜‰
  • โšก Fun fact: I โค๏ธ food, travelling and ๐Ÿถs

contributors-readme-action's People

Contributors

akhilmhdh avatar athul avatar dependabot[bot] avatar dtcmlops avatar github-actions[bot] avatar jessebot avatar kachick avatar matks avatar melroy89 avatar mrchocolatine avatar shufo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

contributors-readme-action's Issues

Sponsors / Weights

Hi! Thanks for the action!

Is it possible to also add sponsors to the list?

  • On one hand, we could do that only by also querying sponsors and adding them to the list.
  • On the other hand, that might create some small conflict with #9, since we would now have to weight sponsors/contributors to put them in order. And I think #9 is crucial because contributions are likely to follow a Pareto distribution.

We can solve that issue with:

contributors.sort((a,b) => (a.contributions < b.contributions) ? 1 : -1);

If we were to have sponsors, then we'd have something like:

       const sponsors_list = await octokit.request(`GET /repos/${owner}/sponsors`,{ 
            // I could only find sponsors in the GraphQL API v4 though
            // This is a bad example
            headers: {
                authorization: `token ${token}`,
              },
        })
       // ...
      const sponsors = sponsors_list.data.filter(el => el.type !== "Bot");

and then sort them with 100% preference for code contributions:

         const everyone = contributors.concat(sponsors).sort(function (a, b){
            const a_contributions = a.hasOwnProperty('contributions') ? a.contributions : 0;
            const b_contributions = b.hasOwnProperty('contributions') ? b.contributions : 0;
            if (a_contributions < b_contributions) {
                return -1;
            } else if (a.contributions > b.contributions) {
                return +1;
            } else {
                // assuming sponsorship in a 'sponsorship' field
                const a_value = a.hasOwnProperty('sponsorship') ? a.value : 0;
                const b_value = b.hasOwnProperty('sponsorship') ? b.value : 0;
                return (a_ sponsorship < b_ sponsorship) ? -1 : +1;
            }
        });

Or by providing weights:

        const everyone = contributors.concat(sponsors).sort(function (a, b){
            const a_contributions = a.hasOwnProperty('contributions') ? a.contributions : 0;
            const b_contributions = b.hasOwnProperty('contributions') ? b.contributions : 0;
            const a_ sponsorship = a.hasOwnProperty('sponsorship') ? a.value : 0;
            const b_ sponsorship = b.hasOwnProperty('sponsorship') ? b.value : 0;
            const a_score = a_contributions * contribution_weight + a_ sponsorship * sponsorship_weight;
            const b_score = b_contributions * contribution_weight + b_ sponsorship * sponsorship_weight;
            return (a_score < b_score) ? -1 : +1;
        });

Because weights might be somewhat arbitrary, it could create normalized weights (from 0 to 1 for both) if the weights are not provided:

        const max_contribution = Math.max.apply(Math, contributors.map(function(o) { return o.contributions; }))
        const contribution_weight = 1./max_contribution;
        const max_sponsorship = Math.max.apply(Math, contributors.map(function(o) { return o.sponsorship; }))
        const sponsorship_weight = 1./max_sponsorship;

That should mix both in a less arbitrary way.

I can help with any of these things if you find the ideas useful.

Thanks,

Missing 'tbody' in the generated 'table'

Problem Description

I found that there's no <tbody></tbody> inside the <table></table> generated by this GitHub Action.

<!-- readme: contributors -start -->
<table>
<tr>
    <td align="center">
        <a href="https://github.com/hwhsu1231">
            <img src="https://avatars.githubusercontent.com/u/71438617?v=4" width="50;" alt="hwhsu1231"/>
            <br />
            <sub><b>Haowei Hsu</b></sub>
        </a>
    </td></tr>
</table>
<!-- readme: contributors -end -->

Although it looks fine in GitHub or some Markdown Editors, there will be a problem when I upload a README.md which has this form of <table></table> to Crowdin. Take an issue I recently encountered while testing andrii-bodnar/action-crowdin-contributors for example.

Origianally, I used v1.0.2 version of this GitHub Action to generate a Crowdin Contributors List. The generated HTML table is as follow:

Click to expand codes
<!-- CROWDIN-CONTRIBUTORS-START -->
<table>
  <tr>
    <td align="center" valign="top">
      <a href="https://crowdin.com/profile/hwhsu1231"><img alt="logo" style="width: 50px" src="https://crowdin-static.downloads.crowdin.com/avatar/15619673/medium/2c1c17f04c7d3131cd44cba220d3ab93.png" />
        <br />
        <sub><b>Haowei Hsu (hwhsu1231)</b></sub></a>
      <br />
      <sub><b>2334 words</b></sub>
      <br /><sub><b><code title="Chinese Simplified">zh-CN</code></b>, <b><code title="Chinese Traditional">zh-TW</code></b></sub>
    </td>
  </tr>
</table>
<!-- CROWDIN-CONTRIBUTORS-END -->

However, an error showed up when I tried to upload this README.md to Crowdin:

Click to expand logs
D:\Test\test-crowdin-readme>crowdin upload --branch test
[OK] Fetching project info
[SKIPPED] Branch 'test' already exists in the project
[ERROR] File 'test\README.md'
[ERROR] Wrong parameters:
<key: storageId, code: fileInvalid, message: An unknown error occurred while importing the file.>
[ERROR] Current execution finished with errors

D:\Test\test-crowdin-readme>

After reporting to Crowdin Support Team, they fix this issue by upgrading this GitHub Action to v1.0.3, in which they add <tbody></tbody> into <table></table>. The newly generated table is as follow:

Click to expand codes
<!-- CROWDIN-CONTRIBUTORS-START -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top">
        <a href="https://crowdin.com/profile/hwhsu1231"><img alt="logo" style="width: 50px" src="https://crowdin-static.downloads.crowdin.com/avatar/15619673/medium/2c1c17f04c7d3131cd44cba220d3ab93.png" />
          <br />
          <sub><b>Haowei Hsu (hwhsu1231)</b></sub></a>
        <br />
        <sub><b>2334 words</b></sub>
        <br /><sub><b><code title="Chinese Simplified">zh-CN</code></b>, <b><code title="Chinese Traditional">zh-TW</code></b></sub>
      </td>
    </tr>
  </tbody>
</table>
<!-- CROWDIN-CONTRIBUTORS-END -->

Therefore, I hope this GitHub Action, akhilmhdh/contributors-readme-action, can fix this issue as well. That is, I hope it can generate the following form of table:

<!-- readme: contributors -start -->
<table>
  <tbody>
    <tr>
      <td align="center">
        <a href="https://github.com/hwhsu1231">
          <img src="https://avatars.githubusercontent.com/u/71438617?v=4" width="50;" alt="hwhsu1231"/>
          <br />
          <sub><b>Haowei Hsu</b></sub>
        </a>
      </td>
    </tr>
  </tbody>
</table>
<!-- readme: contributors -end -->

Versions

akhilmhdh/[email protected]

Removing ImgBotApp from contributor list

I tried to delete another username. like: rizkytegar, and this works.

But when deleting ImgBot App it doesn't work

work

<!-- readme: contributors,rizkytegar/- -start -->
<!-- readme: contributors,rizkytegar/- -end -->

ImgBotApp account : https://github.com/ImgBotApp

Not work

<!-- readme: contributors,imgbotapp/- -start -->
<!-- readme: contributors,imgbotapp/- -end -->

Not work

<!-- readme: contributors,ImgBotApp/- -start -->
<!-- readme: contributors,ImgBotApp/- -end -->

Not work

<!-- readme: contributors,Imgbot/- -start -->
<!-- readme: contributors,Imgbot/- -end -->

Not work

<!-- readme: contributors,imgbotapp/-,ImgBotApp/-,Imgbot/- -start -->
<!-- readme: contributors,imgbotapp/-,ImgBotApp/-,Imgbot/- -end -->

Example result

my CONTRIBUTORS.md

https://github.com/gemarkode/hacktoberfest/blob/main/CONTRIBUTORS.md

image

<!-- readme: contributors,imgbotapp/-,ImgBotApp/-,Imgbot/- -start -->
<table>
<tr>
    <td align="center">
        <a href="https://github.com/rizkytegar">
            <img src="https://avatars.githubusercontent.com/u/55475891?v=4" width="100;" alt="rizkytegar"/>
            <br />
            <sub><b>Rizky Tegar Pratama</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/septiynp">
            <img src="https://avatars.githubusercontent.com/u/113845016?v=4" width="100;" alt="septiynp"/>
            <br />
            <sub><b>Septiyani Putri</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/shinqy">
            <img src="https://avatars.githubusercontent.com/u/91445296?v=4" width="100;" alt="shinqy"/>
            <br />
            <sub><b>ShinDwQy</b></sub>
        </a>
    </td>
    <td align="center">
        <a href="https://github.com/ImgBotApp">
            <img src="https://avatars.githubusercontent.com/u/31427850?v=4" width="100;" alt="ImgBotApp"/>
            <br />
            <sub><b>Imgbot</b></sub>
        </a>
    </td></tr>
</table>
<!-- readme: contributors,imgbotapp/-,ImgBotApp/-,Imgbot/- -end -->

Automated Branch Protection Detection

Hi,

Just started using this and wanted to use this along with branch protection.

I noticed a recent change to automate detection of this and to raise a PR instead of doing it automatically.

It is possible to have branch protection and set up appropriate personal access tokens that you could pass instead of the GITHUB_TOKEN to allow it to work.

I have this working on v2.3 with a branch setup with branch protection and the is_protected option set to false (to avoid PR creation) and it updates fine.

jobs:
  contrib-readme-job:
    runs-on: ubuntu-latest
    name: A job to automate contrib in readme
    steps:
      - name: Contribute List
        uses: akhilmhdh/[email protected]
        env:
            GITHUB_TOKEN: ${{ secrets.BUILD_SVC_PAT }}
        with:
          is_protected: false
          commit_message: contrib-readme-action has updated readme [skip ci]

It would be good to still have ability to set is_protected to override the automated logic for above scenario.

Thanks

Paul

set-output command is deprecated and will be disabled soon

One of my recent runs of this action produced the following message.

Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

It looks like GitHub has postponed the deprecation of this for an unknown time period, but the original date was May 31st, 2023.

We are monitoring telemetry for the usage of these commands and plan to fully disable them on 31st May 2023. Starting 1st June 2023 workflows using save-state or set-output commands via stdout will fail with an error. Our telemetry shows significant usage of these commands. Given the number of impacted customers we are postponing the removal.

Either way, the project should prepare to move away from this before it suddenly breaks all further usage of this action.

GITHUB_TOKEN?

I read the little doc... and the issues, but I've found no mention on what the GITHUB_TOKEN is supposed to be. I can guess it, but nevertheless a single little paragraph explaining how to create and use it would save a lot of time of guessing and try and error.

I would like the README to be automatically updated (i.e. no PR). How that is supposed to be configured? Again: a simple example in the doc would greatly improve the usability of this project.

Thanks

Only run when contributors change

As of now the contributor-readme-bot runs on each commit or merge. Would it be possible to only run it when the list of contributor actually changes? The annoying part of it running all the time is that making two quick commits and pushes locally fails, since contributor-readme-bot gets in between them. Not sure if I'm making sense.

Thank you for a great bot, really helps push the community part of open source!

Error in Actions

image

Error: Could not resolve to a User with the login of 'KNOWLDGE'.

It's saying that KNOWLDGE is a User, not an Organization.

Where can i type parameters

on the README.md

Optional parameters
To change the image size inside the box
imageSize:100
Default value is 100x100px

To change the number of columns in a row
columnsPerRow:6
Default value is 6

but idk where can i arrange this options

actions script or read me?

Wildcard on usernames

I'm sorry if I'm asking to much. But would be great to have ability to not include github bots like *bot or similar.
You can use micromatch module for that

Limit contributor list

this is only showing 30 contributor list in Read me.md

i had 100+ contributors in my repo

Remove contributors

Hi @akhilmhdh ,

Me again. ๐Ÿ˜†

Is there an option to remove specific contributors from the list?
The reason is that the "Actions-user" is considered a "contributor", and not a bot:
https://alandefreitas.github.io/matplotplusplus/contributing/contributors.html

At first, I was just going to leave it there. But I noticed that, because the bot is working every time anyone pushes something, it will quickly become the most active contributor by far. ๐Ÿ˜‚ That's kind of weird.

Sorry to be using issues for questions, but that might be kind of a feature request depending on what you think.

Sponsors / Weights

Hi! Thanks for the action!

Is it possible to also add sponsors to the list?
On one hand, it could do that only by also querying ${sponsors}, right?

On the other hand, that might create some small conflict with #9, since we would now have to weight sponsors/contributors to put them in order. And I think #9 is crucial because contributions are likely to follow a Pareto distribution.

I can help with any of these things if you want.

Thanks,

Unsigned commits block PRs on protected branch

Hello again @akhilmhdh .

I might have spotted a small issue, quite blocking actually. A protected branch may require commits to be signed, therefore, as of now, when your GitHub Action creates a PR it will never be valid since the commit is not signed.

I haven't taken a deep look but by looking at this, it does not seems too complicated:

Perhaps the solution would be:

  1. To drop the customisation of the committer's email and name so that the default value is used? ๐Ÿค” Not sure about this.

https://octokit.github.io/rest.js/v18#repos-create-or-update-file-contents

committer ..... The person that committed the file. Default: the authenticated user.

  1. Or, following the point (1), to just use nothing (the default value = the authenticated user) if the inputs committer_username and committer_email have not been defined by the user.

Can i control header name ?

this actions support keword 'Contributor'

but i want customize that name.

for example, Teammates, Friend ยทยทยท

can you add this feature ?

Error: Cannot read property 'split' of null

Hey @akhilmhdh,

I think I found a bug somewhere.

Everything was working perfectly until a few hours ago but now I'm getting this error:

Run akhilmhdh/[email protected]
  with:
    image_size: 100
    columns_per_row: 6
    readme_path: README.md
    collaborators: direct
    commit_message: contrib-readme-action has updated readme
    committer_username: contrib-readme-bot
    committer_email: [email protected]
  env:
    GITHUB_TOKEN: ***
Error: Cannot read property 'split' of null

It seems to have something to do with the "actions-user" "contributor". That seems to be the only thing that has changed.

Add images to README

It feels like the readme will get much better if there would be some images/examples.
As someone who just found this I wanna quckly see first if I want this thing to change my readme

Suggestion - Auto-detect if default branch is protected + new output "ID of the PR that was created"

  1. You should be able to automatically detect if the default branch if protected or not, making the input is_protected not needed anymore.

I am suggesting this because I was implementing a reusable workflow for my company, which relies on your GitHub Action, and I wanted to avoid:

  1. To manually pass an input is_protected from my repositories' workflow to my reusable workflow
  2. To pass the is_protected from my reusable workflow to your GitHub Action

To me it seemed redundant so I found a way to automate that:

jobs:
  update_contributors_list:
    steps:

      - name: Check if the default branch is protected
        id: default_branch
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          defaultBranch="$( \
            gh api /repos/${{ github.repository }} \
              --method GET \
              --jq '.default_branch'
          )"

          isProtected="$( \
            gh api /repos/${{ github.repository }}/branches/$defaultBranch \
              --jq '.protected'
          )"

          echo "::set-output name=is_protected::$isProtected"

      # ...

      - name: Update the list of contributors
        uses: akhilmhdh/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          is_protected: ${{ steps.default_branch.outputs.is_protected == 'true' }}

That should be doable directly from your GitHub Action.

  1. The second suggestion directly follows the first one. If the default branch is indeed protected and your GitHub Action had to create a PR, it would be nice to have the ID of that newly created PR as an output.

Node.js 12 actions are deprecated.

Thank you for this project. It's been great to have contributors in my readme, without having to bother with it all the time :)

I recently noticed this warning:

Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: akhilmhdh/[email protected]

Screenshot:

Screenshot 2022-12-08 at 14 00 33

I don't know if it's as simple as just ticking up the version in action.yml#L46, but if so I could submit a PR.

Thanks for you time

Does it always create a PR or only when the contribution section needs to change?

Here's the workflow that I am using

on:
  push:
    branches:
      - development

jobs:
  contrib-readme-job:
    runs-on: ubuntu-latest
    name: A job to automate contrib in readme
    steps:
      - name: Contributors
        uses: akhilmhdh/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

The first time I tried it, it created the contributor section and all worked well but on the subsequent PRs, even after they are merged to development, I get nothing.

The job runs successfully though.

image

I was wondering if it only creates a PR if there's a change in the contribution list in that case?

Output `pr_id` does not return the right value

Hey @akhilmhdh ! I was implementing your latest changes (thanks a lot for your reactivity!) and I was getting weird results when reusing your output pr_id.

It turns out, you are using the wrong key: id instead of number.

I know it is confusing, I would have done the same mistake, but that's GitHub's terminology ยฏ_(ใƒ„)_/ยฏ .

setOutput('pr_id', prDetails.data.id);

If you are okay with this fix, I/you can reopen my linked PR #38 that I made too quickly ๐Ÿ‘ .

[FEATURE] Update multiple files at once

I want to request the option to update multiple files simultaneously instead of running the same action twice (or more) and creating N pull requests instead of just one.

For example, in my project, I show the contributors in two places: the main README.md file and another .md file in the /docs directory. When I run this action, I need to run it in a single workflow but with 2 separate steps, which always generate two pull requests (check suites, builds, and validations for each one).

I would like to pass an array of files, and this action changes all the files in one round, even with multiple commits, but all in a single pull request.

This is the steps section of my current YAML file:

steps:
  - name: Contribute List in README.md
    uses: akhilmhdh/[email protected]
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    with:
      readme_path: README.md

  - name: Contribute List in README.md
    uses: akhilmhdh/[email protected]
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    with:
      readme_path: docs/contributing.md

Returns undefined, when sponsor is an organisation

Heya @akhilmhdh,
Love your action, it's awesome!

This is a very minor issue, but when using to show a list of sponsors, if one of your sponsors is an organisation (instead of an individual user), then it shows up as undefined in the results table - here's an example from my repo.

From the docs, it looks like sponsorEntity can be either User or Organization, but your query only selects User. The Organisation also include all the fields you need, and with the same names (name, login and avatarUrl).

I would have submitted a PR myself, but I'm a noob at GH actions, and haven't managed to get it running locally ๐Ÿคฆโ€โ™€๏ธ

Ordering Contributors

I did not see it possible in the docs, but it would be nice to have a config setting that allowed us to set "priority" contributors who appear first in the generated table.

Cannot read property 'split' of null

This action seems like it would be a great fit for our project. However, adding the configuration as described in the readme results in a check that fails every time with the error in the title. The project is question is completely public, with no protected branches.
I should probably add that I'm new to GitHub actions, so this might very well be the result of my own mistakes, but I am unable to figure it out!

The relevant logs from running the action are:

2020-10-02T10:00:30.3499714Z Prepare workflow directory
2020-10-02T10:00:30.3695967Z Prepare all required actions
2020-10-02T10:00:30.3710036Z Download action repository 'akhilmhdh/[email protected]'
2020-10-02T10:00:32.7371128Z ##[group]Run akhilmhdh/[email protected]
2020-10-02T10:00:32.7372280Z with:
2020-10-02T10:00:32.7372615Z   image_size: 100
2020-10-02T10:00:32.7373185Z   readme_path: README.md
2020-10-02T10:00:32.7373765Z   columns_per_row: 6
2020-10-02T10:00:32.7374159Z   collaborators: direct
2020-10-02T10:00:32.7375236Z   commit_message: contrib-readme-action has updated readme
2020-10-02T10:00:32.7375935Z   committer_username: contrib-readme-bot
2020-10-02T10:00:32.7401599Z   committer_email: [email protected]
2020-10-02T10:00:32.7402101Z env:
2020-10-02T10:00:32.7402991Z   GITHUB_TOKEN: ***
2020-10-02T10:00:32.7403329Z ##[endgroup]
2020-10-02T10:00:34.0415608Z ##[error]Cannot read property 'split' of null
2020-10-02T10:00:34.0483321Z Cleaning up orphan processes

Error: Not Found

I might not be using the action properly, but I'm getting the following output when I build the workflow:

image

The YAML file looks like so:

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  contrib-readme-job:
    runs-on: ubuntu-latest
    name: A job to automate contrib list
    steps:
      - name: Contribute List
        # You may pin to the exact commit or the version.
        # uses: akhilmhdh/contributors-readme-action@91b97a109db8e973e87e236e887db27f076e4a29
        uses: akhilmhdh/[email protected]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          # Size of square images in the stack
          image_size: 100 # optional, default is 100
          # Path of the readme file you want to update
          readme_path: CONTRIBUTORS.md # optional, default is README.md
          # Number of columns in a row
          columns_per_row: 6 # optional, default is 6
          # Type of collaborators options: all/direct/outside
          collaborators: direct # optional, default is direct
          # Commit message of the github action
          commit_message: contrib-readme-action # optional, default is contrib-readme-action has updated readme
          # Username on commit
          committer_username: contrib-readme-bot # optional, default is contrib-readme-bot
          # email id of committer
          committer_email: [email protected] # optional, default is [email protected]

I wonder what am I doing wrong :/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.