Merge remote-tracking branch 'origin/pages'
This commit is contained in:
commit
705fecc1d9
3 changed files with 498 additions and 8 deletions
432
Presentation.org
Normal file
432
Presentation.org
Normal file
|
@ -0,0 +1,432 @@
|
|||
#+Title: Git Project Manager / Commission Open Source
|
||||
#+Author: Yann Esposito
|
||||
#+Date: <2018-10-25 Thu>
|
||||
|
||||
** =git= is a *Distributed* Concurrent Versions System
|
||||
** GitHub is a *Centralized* =git= host
|
||||
* Can we do without Github™?
|
||||
*** Betteridge's law
|
||||
|
||||
Betteridge's law of headlines is an adage that states:
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
Any headline that ends in a question mark
|
||||
can be answered by the word no.
|
||||
#+END_QUOTE
|
||||
|
||||
. . .
|
||||
|
||||
Here the answer is *YES*!
|
||||
|
||||
- Linux (only mail)
|
||||
- GHC used a self hosted instance of phabricator + trac
|
||||
- many others I don't know
|
||||
|
||||
*** All right, we can, but /should we/?
|
||||
|
||||
#+BEGIN_SRC
|
||||
__ _______ ____ _
|
||||
\ \ / / ____/ ___|| |
|
||||
\ V /| _| \___ \| |
|
||||
| | | |___ ___) |_|
|
||||
|_| |_____|____/(_)
|
||||
#+END_SRC
|
||||
|
||||
** GitHub™
|
||||
*** GitHub™: Social Network
|
||||
|
||||
- user management & trust
|
||||
- discoverability
|
||||
|
||||
*** GitHub™: its free!
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
If you're not paying for it,
|
||||
you're the product being sold.
|
||||
#+END_QUOTE
|
||||
|
||||
$$: Pay for private repositories
|
||||
|
||||
*** GitHub™: Features!!!
|
||||
|
||||
From their website (in that order):
|
||||
|
||||
- /Code Review/: comment diffs, approve, refuse, etc...
|
||||
- /Project Management/: issues, milestones, dashboard, etc...
|
||||
- /Integrations/: travis, slack, etc...
|
||||
- /Team Management/: access rights, community guidelines, etc...
|
||||
- /Social Coding/: follow, explore, share, etc...
|
||||
- /Documentation/: github pages, wiki, ...à
|
||||
- /Code Hosting/: all your code in one place, tree view, blame view, etc...
|
||||
|
||||
*** GitHub™: Metas
|
||||
|
||||
Most GitHub™ features put data in their own internal closed representation:
|
||||
|
||||
- Issues
|
||||
- Comments
|
||||
- Pages
|
||||
- Pull Request & review
|
||||
- Wiki
|
||||
|
||||
Note there are tools to export them.
|
||||
Ex: migrate to Gitlab
|
||||
|
||||
*** GitHub™ is great today but can suck tomorrow
|
||||
|
||||
- /bloatware/
|
||||
remember digg, readitlater?
|
||||
- /downgradeware/
|
||||
Swagger-UI v3 (v2 is neat), reddit new redesign (looks better, but slow)
|
||||
- /payware/
|
||||
You rely on our feature, but now, we want you to move or to pay. Fair ;)
|
||||
- /crapware/
|
||||
Nothing works as expected unless you pay: Twitter streaming API?
|
||||
- /dieware/
|
||||
Remember Friendfeed? Google Reader™?
|
||||
- etc...
|
||||
|
||||
*** GitHub™ force all your team member to use GitHub™
|
||||
|
||||
Were you already forced to:
|
||||
|
||||
- use PowerPoint? Excel? Word?
|
||||
- code in PHP? in Java?
|
||||
- work on windows? Harder need to ssh to UNIX machines?
|
||||
- use Eclipse instead of vim/emacs?
|
||||
- use a super complex GUI instead of a few command line tools?
|
||||
- etc...
|
||||
|
||||
|
||||
*REAL STORY @WORK*: github dashboard is slow & terrible for the manager.
|
||||
|
||||
*** Why you shouldn't rely too much on GitHub™?
|
||||
|
||||
- Github™ is great to get you started:
|
||||
- nothing to install
|
||||
- only high level interface
|
||||
- everything explained with nice docs
|
||||
- github is really a great product
|
||||
- *The hidden price to pay*:
|
||||
- use closed source services
|
||||
- give freely many private infos
|
||||
- you must TRUST github for privacy, private account
|
||||
|
||||
*** Why not self hosted Gitlab then?
|
||||
|
||||
Gitlab is a better alternative but:
|
||||
|
||||
- You still keep the metas of your project in the Gitlab server in some DB.
|
||||
- You still force all the member of your team to use your Gitlab version, with
|
||||
your Gitlab plugins, with your Gitlab settings, etc...
|
||||
- Gitlab push a big warn so you are pushed to upgrade (new features & anti-features)
|
||||
|
||||
*** =git clone=
|
||||
|
||||
- [X] code
|
||||
|
||||
- [ ] *issues*
|
||||
- [ ] *reviews*
|
||||
- [ ] *comments*
|
||||
- [ ] *wiki/doc*
|
||||
- [ ] *hooks*
|
||||
- [ ] *web pages*
|
||||
|
||||
* Git Project Manager
|
||||
*** Problems
|
||||
|
||||
- can't clone everything
|
||||
- big dependence on private tooling (that could change or being interrupted)
|
||||
- force same tooling choices accross your team members
|
||||
|
||||
*** Solution
|
||||
|
||||
- put metas in git branches
|
||||
*CLONE ALL THE THINGS!!!!*
|
||||
. . .
|
||||
- use text files for everything
|
||||
*DO NOT FORCE ANY TOOL*
|
||||
. . .
|
||||
- only rely on conventions, better on standardized conventions
|
||||
*HELP TO WRITE SPECIFIC OPEN SOURCE TOOLS*
|
||||
|
||||
*** Git Project Manager =gpm=
|
||||
|
||||
- command line tool
|
||||
- integrate your project management metas in your git repo
|
||||
- automate a few common tasks
|
||||
- follow a few conventions
|
||||
|
||||
|
||||
/Tool freedom/
|
||||
|
||||
- people on the team don't need to install or use =gpm=
|
||||
- they just need to follow a minimal set of conventions
|
||||
- want to use other conventions? Write yourself a =gpm= in a few hours.
|
||||
- but really there are /very few/ conventions =gpm= follows
|
||||
|
||||
*** =gpm= conventions
|
||||
|
||||
- =git= as DCSV
|
||||
- text files
|
||||
- Project Management metas goes in the branch =gpm=
|
||||
|
||||
*** Encouraged but not enforced =gpm= conventions
|
||||
|
||||
- encourage to use =org-mode= format but you can change
|
||||
- issues goes in =issues.org= file
|
||||
- reviews goes in =reviews/= with name =<branch>-<reviewer>.org=
|
||||
- docs goes in =wiki.org=
|
||||
- serve goes in your XDG data dir (standard)
|
||||
|
||||
*** git is awesome!
|
||||
|
||||
battery included:
|
||||
|
||||
- =git= hooks
|
||||
- =git instaweb=
|
||||
- =git daemon=
|
||||
|
||||
*** org-mode is awesome
|
||||
|
||||
- TODO list oriented document convention
|
||||
- Extremely versatile:
|
||||
- issues, bug tracking, comments
|
||||
- handling with minimal friction code reviews =org-annotate-file=
|
||||
- workflows:
|
||||
- basic trello (TODO, IN-PROGRESS, DONE)
|
||||
- scrum (EPIC / USER-STORY / etc...)
|
||||
- kanban:
|
||||
- EPIC with different statuses (prep, specified,etc..), comments
|
||||
- user stories with evaluation, different status, comments
|
||||
- QA status
|
||||
- Ops status
|
||||
|
||||
* DEMO
|
||||
|
||||
*** Create a git project
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
mkdir -p /tmp/gpm-playground/testprj
|
||||
cd /tmp/gpm-playground/testprj
|
||||
echo "Hello GPM" > README
|
||||
git init .
|
||||
git add README
|
||||
git commit -m "Initial commit"
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
Initialized empty Git repository in /private/tmp/gpm-playground/testprj/.git/
|
||||
[master (root-commit) 617f661] Initial commit
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 README
|
||||
|
||||
*** =gpm init= (1)
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
gpm init
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC
|
||||
GPM -- Git Project Manager
|
||||
==========================
|
||||
Create a new branch gpm (be sure the branch gpm doesn't already exists)
|
||||
git checkout --orphan gpm
|
||||
Switched to a new branch 'gpm'
|
||||
cleanup the branch
|
||||
git rm --cached -r .
|
||||
git clean -fd
|
||||
#+END_SRC
|
||||
|
||||
*** =gpm init= (2)
|
||||
|
||||
#+BEGIN_SRC
|
||||
* issue.org
|
||||
git add issues.org
|
||||
git add templates
|
||||
* wiki.org
|
||||
git add wiki.org
|
||||
* reviews.org
|
||||
create some example review for inspiration
|
||||
reviews/write-contributing-yogsototh.org
|
||||
git add reviews
|
||||
create some review templates
|
||||
templates/new-review.org
|
||||
git add templates
|
||||
#+END_SRC
|
||||
|
||||
*** =gpm init= (3)
|
||||
|
||||
#+BEGIN_SRC
|
||||
* hooks/
|
||||
Copyings default hooks into the hooks directory
|
||||
git add hooks
|
||||
* server init
|
||||
create dir: /Users/yaesposi/.local/share/gpm/public
|
||||
git init .
|
||||
git rev-parse --show-toplevel
|
||||
git rev-parse --show-toplevel
|
||||
git clone --mirror /tmp/gpm-playground/testprj
|
||||
~/.local/share/gpm/public/testprj.git
|
||||
Cloning into bare repository '.../testprj.git'...
|
||||
done.
|
||||
git update-server-info
|
||||
git commit -m 'gpm initialized'
|
||||
git checkout master
|
||||
Switched to branch 'master'
|
||||
#+END_SRC
|
||||
*** The =gpm= branch
|
||||
|
||||
#+BEGIN_SRC
|
||||
> git checktout gpm
|
||||
> tree
|
||||
.
|
||||
├── hooks
|
||||
│ ├── applypatch-msg.sample
|
||||
│ ├── commit-msg.sample
|
||||
│ └── ...
|
||||
├── issues.org
|
||||
├── reviews
|
||||
│ └── write-contributing-yogsototh.org
|
||||
├── templates
|
||||
│ ├── new-issue.org
|
||||
│ └── new-review.org
|
||||
└── wiki.org
|
||||
|
||||
3 directories, 16 files
|
||||
#+END_SRC
|
||||
|
||||
*** Hooks
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
> gpm hooks
|
||||
Usage: gpm hooks sync
|
||||
Handle hooks for this git repository
|
||||
|
||||
Available options:
|
||||
-h,--help Show this help text
|
||||
|
||||
Available commands:
|
||||
sync Synchronize hooks from gpm branch
|
||||
#+END_SRC
|
||||
|
||||
*** =issues.org= Basic
|
||||
|
||||
#+BEGIN_SRC org
|
||||
#+TODO: TODO(t) STARTED(s) WAITING(w) | DONE(d) CANCELLED(c)
|
||||
|
||||
* Basic Usages
|
||||
** TODO Do thing 3
|
||||
** STARTED Do thing 2
|
||||
** DONE Do thing 1
|
||||
#+END_SRC
|
||||
|
||||
*** =issues.org= Complex workflow, review
|
||||
|
||||
#+BEGIN_SRC org
|
||||
#+PROPERTY: ASSIGNEE
|
||||
#+PROPERTY: REVIEWER
|
||||
#+TODO: REVIEW(i) | MERGED(m)
|
||||
#+TODO: ACCEPTED(a) CHANGE_REQUESTED(c) QUESTION(q) FEEDBACK(f) | REFUSED(r)
|
||||
|
||||
** REVIEW Basic review process
|
||||
:PROPERTIES:
|
||||
:BRANCH: explain-review-process
|
||||
:ASSIGNEE: yogsototh
|
||||
:END:
|
||||
|
||||
*** ACCEPTED Review finished
|
||||
:PROPERTIES:
|
||||
:REVIEWER: shubby
|
||||
:END:
|
||||
#+END_SRC
|
||||
|
||||
*** =issues.org= Full Professional Usage
|
||||
|
||||
#+BEGIN_SRC org
|
||||
#+TAGS: epic(e) user_story(u) task(t) qa(q) ops(o)
|
||||
|
||||
* Some Title :epic:
|
||||
** Some User Story :story:
|
||||
*** Dev Task :task:dev:
|
||||
*** Document Task :task:doc:
|
||||
*** QA Task :task:qa:
|
||||
*** Ops Task :task:ops:
|
||||
#+END_SRC
|
||||
*** =gpm new-issue=
|
||||
|
||||
#+BEGIN_SRC bash
|
||||
> gpm new-issue -i
|
||||
#+END_SRC
|
||||
|
||||
*** =gpm serve=
|
||||
|
||||
- web interface: =git instaweb= (port 1234)
|
||||
- git server: =git daemon= (port 9418)
|
||||
|
||||
#+BEGIN_SRC
|
||||
Usage: gpm serve (start | stop | update | path)
|
||||
Serve the git to the web
|
||||
|
||||
Available options:
|
||||
-h,--help Show this help text
|
||||
|
||||
Available commands:
|
||||
start Start to serve all gpm tracked repositories
|
||||
stop Stop to serve all gpm tracked repositories
|
||||
update Update the served git repository
|
||||
path Show the path of the bare repository
|
||||
#+END_SRC
|
||||
|
||||
*** =gpm review=
|
||||
|
||||
* Conclusion
|
||||
*** Proof of concept
|
||||
|
||||
- =gpm= is a proof of concept but so simple its already usable
|
||||
- git clone should provide most of your projects data
|
||||
- don't enforce tooling on your team, use text files
|
||||
- I encourage your to use org-mode its awesome! /REALLY!/
|
||||
- vimer => spacemacs or doom-emacs
|
||||
- IDE => switch to spacemacs eat the bullet!
|
||||
- you still can edit org-mode with notepad
|
||||
|
||||
*** Going further: Decentralized Web
|
||||
|
||||
- the Internet was thought to be decentralized
|
||||
- centralization of services made lot of things easy, it was fair at first
|
||||
- but made us dependant and the balance is no more fair
|
||||
- it is time to re-decentralize the Internet and take back control
|
||||
- we shouldn't be dependant of private services
|
||||
- we should pay private service, but they should adapt to us, not the other way
|
||||
around
|
||||
|
||||
*** Decentralized Authentication: IndieAuth
|
||||
|
||||
- one of your online identities = one domaine name
|
||||
- serve a page with all your online identity providers and username
|
||||
- google
|
||||
- twitter
|
||||
- etc...
|
||||
- but also your GPG keys (see keybase)
|
||||
|
||||
Mainly you OWN & CONTROLE your identity and the informations about it.
|
||||
|
||||
*** Decentralized Comments: Webmention
|
||||
|
||||
- you host your comment
|
||||
- a 3rd party website can decide to show it in its comment section
|
||||
|
||||
*** Dentralized Web
|
||||
|
||||
- Your content is yours (prevent site death, change it, delete it...)
|
||||
- Better connection:
|
||||
- messages can go to all your services
|
||||
- use open standards
|
||||
- You are in control
|
||||
- post anything, any format, no monitoring, share links.
|
||||
|
||||
Follow:
|
||||
|
||||
- https://indiewebify.me
|
||||
- https://indieweb.org
|
|
@ -259,7 +259,7 @@ I was surprised to discover that with org-mode and plain text file you can
|
|||
go a very long way toward project management organisation:
|
||||
|
||||
- issues, bug tracking, comments
|
||||
- handling with minimal firction code reviews
|
||||
- handling with minimal friction code reviews
|
||||
- ability to integrate with any organization workflow you would like:
|
||||
- basic trello
|
||||
- scrum
|
||||
|
|
|
@ -21,7 +21,7 @@ subtitle() {
|
|||
prjname="testproj"
|
||||
playgrounddir="/tmp/gpm-playground"
|
||||
testproj="$playgrounddir/$prjname"
|
||||
testproj2="$playgrounddir/testproj2"
|
||||
clonedproj="$playgrounddir/cloned-$prjname"
|
||||
|
||||
# display all commands
|
||||
set -x
|
||||
|
@ -31,7 +31,7 @@ title "INIT"
|
|||
|
||||
subtitle "Cleaning Up"
|
||||
[[ -d $testproj ]] && rm -rf $testproj
|
||||
[[ -d $testproj2 ]] && rm -rf $testproj2
|
||||
[[ -d $clonedproj ]] && rm -rf $clonedproj
|
||||
[[ -d ~/.local/share/gpm ]] && rm -rf ~/.local/share/gpm
|
||||
gpm serve stop
|
||||
|
||||
|
@ -50,7 +50,7 @@ gpm init
|
|||
title "ISSUES"
|
||||
|
||||
subtitle "gpm new-issue"
|
||||
gpm new-issue -t "issue-1" -p "A"
|
||||
gpm new-issue -t "better README" -p "A" -b better-readme -t doc
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
title "HOOKS"
|
||||
|
@ -72,15 +72,73 @@ subtitle "gpm serve start"
|
|||
gpm serve update
|
||||
gpm serve start
|
||||
popd
|
||||
mkdir $testproj2
|
||||
pushd $testproj2
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
title "CLONE"
|
||||
|
||||
mkdir -p ${clonedproj:h}
|
||||
pushd ${clonedproj:h}
|
||||
subtitle "git clone"
|
||||
git clone git://localhost:9418/${prjname}.git $testproj2
|
||||
git clone git://localhost:9418/${prjname}.git $clonedproj
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
pushd $clonedproj # Cloned project
|
||||
subtitle "gpm init (into the cloned repo)"
|
||||
gpm init
|
||||
|
||||
subtitle "Pull request"
|
||||
git checkout -b better-readme
|
||||
echo "Some Edit" >> README
|
||||
git add README
|
||||
git commit -m "made a better README"
|
||||
|
||||
popd
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
subtitle "Review"
|
||||
|
||||
pushd $testproj
|
||||
git remote add dev $clonedproj
|
||||
|
||||
git fetch dev
|
||||
git checkout better-readme
|
||||
|
||||
# look into README
|
||||
# better with org-anotate-file `SPC o a`
|
||||
# gpm review start
|
||||
# gpm review end
|
||||
gpm review request-change -t "add more infos please"
|
||||
|
||||
popd
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
pushd $clonedproj
|
||||
gpm review retrieve
|
||||
echo "More infos" >> README
|
||||
git add README
|
||||
git commit -m "added more infos"
|
||||
popd
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
pushd $testproj
|
||||
git checkout better-readme
|
||||
git pull
|
||||
git review accept -t "LGTM"
|
||||
git co master
|
||||
git merge better-readme
|
||||
gpm serve update
|
||||
popd
|
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
pushd $clonedproj
|
||||
git co master
|
||||
git pull
|
||||
popd
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
title "STOP SERVE"
|
||||
|
||||
subtitle "gpm serve stop"
|
||||
gpm serve stop
|
||||
popd
|
||||
|
@ -88,4 +146,4 @@ popd
|
|||
set +x
|
||||
echo "------------------------------------"
|
||||
echo "$testproj"
|
||||
echo "$testproj2"
|
||||
echo "$clonedproj"
|
||||
|
|
Loading…
Reference in a new issue