Github: Difference between revisions

From wikinotes
 
No edit summary
Line 1: Line 1:
Github is a website that provides free public hosting of opensource projects.
Github is a website that provides free public hosting of opensource projects.<br>
It also provides other features like documentation hosting, issue tracking,
It also provides other features like documentation hosting, issue tracking etc.
amongst other things. Some of it's workflows merit their own documentation.


= Documentation =
= Documentation =
Line 12: Line 11:
</blockquote><!-- Documentation -->
</blockquote><!-- Documentation -->


= API =
= Notes =
<blockquote>
<blockquote>
See [[github api]].
{| class="wikitable"
</blockquote><!-- API -->
|-
| [[github ui]]
|-
| [[github api]]
|-
| [[github markdown]]
|-
|}
</blockquote><!-- Notes -->


= PR/Issue Filters =
= PR/Issue Filters =
Line 22: Line 29:
<source lang="bash">
<source lang="bash">
# shopify
# shopify
is:open is:pr -is:draft -reviewed-by:@me review-requested:@me  
is:open is:pr -is:draft -reviewed-by:@me review-requested:@me
</source>
</source>


Line 31: Line 38:
-reviewed-by:willjp            # removes approved by me
-reviewed-by:willjp            # removes approved by me
created:2020-03-01..2020-05-01  # created within range
created:2020-03-01..2020-05-01  # created within range
created:<2020-03-01            # created before date  
created:<2020-03-01            # created before date
</source>
</source>
</blockquote><!-- PR/issue filters -->
</blockquote><!-- PR/issue filters -->
Line 71: Line 78:
== deploy keys ==
== deploy keys ==
<blockquote>
<blockquote>
you can generate keys to provide read-only, or read-write access to a repo.  
you can generate keys to provide read-only, or read-write access to a repo.


<source lang="bash">
<source lang="bash">
Line 99: Line 106:


{{ NOTE |
{{ NOTE |
Your alias must be a word, not a full address. Some examples:  
Your alias must be a word, not a full address. Some examples:


* git will not recognize <code>myrepo:/you/myrepo</code> as an alias
* git will not recognize <code>myrepo:/you/myrepo</code> as an alias

Revision as of 15:27, 19 September 2021

Github is a website that provides free public hosting of opensource projects.
It also provides other features like documentation hosting, issue tracking etc.

Documentation

RESTAPI-v3 docs https://developer.github.com/v3/

Notes

github ui
github api
github markdown

PR/Issue Filters

# shopify
is:open is:pr -is:draft -reviewed-by:@me review-requested:@me
+is:pr                          # only include pull requests
-is:draft                       # remove drafts
-is:approved                    # removes approved (not if 1/2 approvals)
-reviewed-by:willjp             # removes approved by me
created:2020-03-01..2020-05-01  # created within range
created:<2020-03-01             # created before date

Common Tasks

Forking/Pull Request


Github push/pull with SSH key

You'll need to change the github URL you are using.

git clone https://github.com/<Username>/<Project>   # !!bad!!

git clone git@github.com:<Username>/<Project>       # good
git clone github.com:<username>/<project>           # also good (must specify user in ~/.ssh/config)

You can quickly test authentication

ssh git@github.com -i ~/.ssh/github

importing existing git repo

See hosting a git http server to share with github.

You can then use that to import your project.

deploy keys

you can generate keys to provide read-only, or read-write access to a repo.

ssh-keygen -t ed25519   # a strong key
https://github.com/<you>/<repo>/settings/keys/new   # url to add new deploykey

next we'll create entries within our ssh config for the repo.

Create an `alias` for github.com, that will identify which deploykey you'll be using here.

Host <alias-for-your-repo>  github.com
    HostName github.com
    IdentityFile  /home/you/.ssh/deploykey
    User git


Finally, clone the git repository using your alias instead of github.com.

git clone <alias-for-your-repo>:<you>/<repo>

NOTE:

Your alias must be a word, not a full address. Some examples:

  • git will not recognize myrepo:/you/myrepo as an alias
  • your alias cannot resolve to your repo ex: git clone {alias} is not sufficient. You will need to use git clone {alias}:you/repo.

download single file

curl -O wget https://raw.githubusercontent.com/user/project/branch/filename

Github Actions

expression syntax https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions

PR magic

fixes/closes

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue


Firewall

Getting github.com ip-address

github uses an unconventional setup for it's ip-addresses. Simply using a hostname resolves to just one of their possible servers. If you are creating firewall rules, you'll need to create them for each address range. Here is some code I've used to do this successfully in the past.

python script to get github address ranges

import sys
import json
import os

if sys.version_info[0] < 3:
    from urllib2 import urlopen
else:
    from urllib.request import urlopen


def get_github_urls():
    """
    Returns:
        list: ``[ '1.2.3.4/24', ... ]``
    """
    url = 'https://api.github.com/meta'
    reply = urlopen(url)

    if sys.version_info[0] < 3:
        status = reply.code
    else:
        status = reply.status
    if status != 200:
        raise RuntimeError('Unexpected reply: {}'.format(repr(reply)))

    # decode
    rawdata = reply.read().decode('utf-8')
    data = json.loads(rawdata)

    return data['git']

See

stackoverflow question https://superuser.com/questions/704230/what-ports-to-open-up-for-github-to-install-and-work
official docs on githug ip-addrs https://help.github.com/en/articles/about-githubs-ip-addresses


Tips/Tricks

Find PR from commit

git log --merges --ancestry-path --oneline 9c34e5f6af..master \
    | grep 'pull request' \
    | tail -n1 \
    | awk '{print $5}' \
    | cut -c2- \
    | xargs gh pr view -w
# alternatively:
git describe --all --contains <commit>  # returns branch name

3rd Party Tools

gh official commandline client for github
github-searcher-cli search github from the commandline
gh-search-cli search github from the commandline