-
Notifications
You must be signed in to change notification settings - Fork 2
Go project wire frame building
To create repository in Github:
# Create an organization Github Repository
$ easygen github-create-repo.tmpl wireframe_proj.yaml
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/orgs/repos -d '{"name":"wireframe", "description": "wire-frame construction to get the project quickly into shape", "auto_init": true, "license_template": "mit", "gitignore_template": "Go"}'
# Create a normal user Github Repository
sed 's/^ Vendor: go-easygen/ User: suntong/' wireframe_proj.yaml > /tmp/wireframe_proj.yaml
$ easygen github-create-repo.tmpl /tmp/wireframe_proj.yaml
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user/repos -d '{"name":"wireframe", "description": "wire-frame construction to get the project quickly into shape", "auto_init": true, "license_template": "mit", "gitignore_template": "Go"}'
Then copy the generated curl
command and do it on the command line (in the terminal).
The GitHub Token is for accessing GitHub API to create repository or deploy the artefacts to GitHub etc. You can create one here.
To create repository in Gitlab:
# set everything
ghrn=wireframe
ghrd='wire-frame construction to get the project quickly into shape'
ghun=go-easygen
GITLAB_TOKEN=xxxx
# get namespace_id
namespace_id=`curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "https://gitlab.com/api/v3/namespaces" | jq --arg name $ghun '.[] | select(.name==$name) | .id'`
# then do it
curl -H "Content-Type:application/json" https://gitlab.com/api/v3/projects?private_token=$GITLAB_TOKEN -d "{ \"name\": \"$ghrn\", \"description\": \"$ghrd\", \"namespace_id\": $namespace_id"',"only_allow_merge_if_build_succeeds":true,"only_allow_merge_if_all_discussions_are_resolved":true}'
Do the above on the command line (in the terminal).
Defining Go Data types from a data dictionary is an important step in wire-frame building too. There are many ready build tools available. Choose one that suits you. Or, you can use the simple JSON to struct from jsonfiddle
:
Expand to check out -- Example of Data type definition
# suppose our data dictionary looks like this:
$ cat wireframe_full.yaml
Wireframe:
Proj: wireframe
Desc: wire-frame construction to get the project quickly into shape
Lang: Go
User: <empty>
Vendor: go-easygen
Author: Tong Sun <[email protected]>
License: MIT
# then generate Go code from above data dictionary using jsonfiddle j2s
$ jsonfiddle j2s -f yaml -i wireframe_full.yaml --name WireframeT | sed '/Wireframe\b/d; s/ `yaml:.*$//' | gofmt | tee WireframeT.go
package main
type WireframeT struct {
Author string
Desc string
Lang string
License string
Proj string
User string
Vendor string
}
The jsonfiddle
is the JSON Fiddling tool that makes it easy to look at the JSON data from different aspects, which is available here.
Refer to
Command line flag handling code auto-generation
GITHUB_TOKEN=...
GITHUB_TAG=1.0.0
GITHUB_RELEASE_TEXT="Release v$GITHUB_TAG"
git push
$ easygen ../../go-easygen/wireframe/github-create-release.tmpl wireframe_proj.yaml
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/go-easygen/wireframe/releases -d '{"tag_name":"'$GITHUB_TAG'", "name": "wireframe-'$GITHUB_TAG'", "body": "'"$GITHUB_RELEASE_TEXT"'"}'
Then copy and do the curl
command for wireframe
on the command line. E.g.:
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/go-easygen/wireframe/releases -d '{"tag_name":"'$GITHUB_TAG'", "name": "wireframe-'$GITHUB_TAG'", "body": "'"$GITHUB_RELEASE_TEXT"'"}'
which can yield:
Expand to check out execution result
{
"url": "https://api.github.com/repos/go-easygen/wireframe/releases/14826407",
"assets_url": "https://api.github.com/repos/go-easygen/wireframe/releases/14826407/assets",
"upload_url": "https://uploads.github.com/repos/go-easygen/wireframe/releases/14826407/assets{?name,label}",
"html_url": "https://github.com/go-easygen/wireframe/releases/tag/1.0.0",
"id": 14826407,
"node_id": "MDc6UmVsZWFzZTE0ODI2NDA3",
"tag_name": "1.0.0",
"target_commitish": "master",
"name": "wireframe-1.0.0",
"draft": false,
"author": {
"login": "suntong",
"id": 422244,
"node_id": "MDQ6VXNlcjQyMjI0NA==",
"avatar_url": "https://avatars1.githubusercontent.com/u/422244?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/suntong",
"html_url": "https://github.com/suntong",
"followers_url": "https://api.github.com/users/suntong/followers",
"following_url": "https://api.github.com/users/suntong/following{/other_user}",
"gists_url": "https://api.github.com/users/suntong/gists{/gist_id}",
"starred_url": "https://api.github.com/users/suntong/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/suntong/subscriptions",
"organizations_url": "https://api.github.com/users/suntong/orgs",
"repos_url": "https://api.github.com/users/suntong/repos",
"events_url": "https://api.github.com/users/suntong/events{/privacy}",
"received_events_url": "https://api.github.com/users/suntong/received_events",
"type": "User",
"site_admin": false
},
"prerelease": false,
"created_at": "2019-01-07T03:51:46Z",
"published_at": "2019-01-07T04:15:30Z",
"assets": [
],
"tarball_url": "https://api.github.com/repos/go-easygen/wireframe/tarball/1.0.0",
"zipball_url": "https://api.github.com/repos/go-easygen/wireframe/zipball/1.0.0",
"body": "Release v1.0.0"
}
For ffcvt
:
$ easygen ../../go-easygen/wireframe/github-create-release.tmpl ffcvt_proj.yaml
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/suntong/ffcvt/releases -d '{"tag_name":"'$GITHUB_TAG'", "name": "ffcvt-'$GITHUB_TAG'", "body": "'"$GITHUB_RELEASE_TEXT"'"}'
GITHUB_TAG=1.3.2
GITHUB_RELEASE_TEXT="Add subtitle streams copy support"
curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/suntong/ffcvt/releases -d '{"tag_name":"'$GITHUB_TAG'", "name": "ffcvt-'$GITHUB_TAG'", "body": "'"$GITHUB_RELEASE_TEXT"'"}'
will get:
Expand to check out execution result
{
"url": "https://api.github.com/repos/suntong/ffcvt/releases/14826435",
"assets_url": "https://api.github.com/repos/suntong/ffcvt/releases/14826435/assets",
"upload_url": "https://uploads.github.com/repos/suntong/ffcvt/releases/14826435/assets{?name,label}",
"html_url": "https://github.com/suntong/ffcvt/releases/tag/1.3.2",
"id": 14826435,
"node_id": "MDc6UmVsZWFzZTE0ODI2NDM1",
"tag_name": "1.3.2",
"target_commitish": "master",
"name": "ffcvt-1.3.2",
"draft": false,
"author": {
"login": "suntong",
"id": 422244,
"node_id": "MDQ6VXNlcjQyMjI0NA==",
"avatar_url": "https://avatars1.githubusercontent.com/u/422244?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/suntong",
"html_url": "https://github.com/suntong",
"followers_url": "https://api.github.com/users/suntong/followers",
"following_url": "https://api.github.com/users/suntong/following{/other_user}",
"gists_url": "https://api.github.com/users/suntong/gists{/gist_id}",
"starred_url": "https://api.github.com/users/suntong/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/suntong/subscriptions",
"organizations_url": "https://api.github.com/users/suntong/orgs",
"repos_url": "https://api.github.com/users/suntong/repos",
"events_url": "https://api.github.com/users/suntong/events{/privacy}",
"received_events_url": "https://api.github.com/users/suntong/received_events",
"type": "User",
"site_admin": false
},
"prerelease": false,
"created_at": "2019-01-07T02:56:43Z",
"published_at": "2019-01-07T04:20:21Z",
"assets": [
],
"tarball_url": "https://api.github.com/repos/suntong/ffcvt/tarball/1.3.2",
"zipball_url": "https://api.github.com/repos/suntong/ffcvt/zipball/1.3.2",
"body": "Add subtitle streams copy support"
}
gpkg=$(basename $(pwd))
export BINTRAY_USER=suntong BINTRAY_REPO_BIN=bin
easygen bintray-bin ${gpkg}_proj | tee bintray-bin.json
export BINTRAY_REPO_DEB=deb PKG1ST=`expr $gpkg : '^\(.\)'`
easygen bintray-pkg ${gpkg}_proj | tee bintray-pkg.json
export PKG_MAINT="My Name <[email protected]>"
easygen travis ${gpkg}_proj | tee .travis.yml
Then,
- inspect the generated
bintray-bin.json
,bintray-pkg.json
, and.travis.yml
. - try to do a
git push
and manually fix any remaining issues.
The easygen
is the universal code/text generator, which is available here.
The above steps assume that the user and the BINTRAY_REPO_BIN
and BINTRAY_REPO_DEB
repos are already exist on bintray.com. Check out the Hosting Debian Packages on Bintray for details, and Bintray Debian Repository Creation and Upload file using API for the condensed and practical version. All you need to do before doing the above steps are,
- Create an Bintray account (free).
- Obtain
BINTRAY_API_KEY
from its web site. - Create two repos for binary executables (
BINTRAY_REPO_BIN
) and debian packages (BINTRAY_REPO_DEB
).
That's it. The above steps should take care of the rest.