Browse Source

Add Node.js build dep, remove built js/css files (#9114)

- Added Node.js as build dependency and removes build files from git.
- Added version checks for both Go and Node.js.
- Overhauled the js/css make target to only run when needed.
- Merged the `generate` make target into `build` as per suggestion.

Fixes: https://github.com/go-gitea/gitea/issues/6782
Fixes: https://github.com/go-gitea/gitea/issues/9216
tags/v1.11.0-rc1
silverwind 4 years ago
parent
commit
d9c67a8c90

+ 4
- 2
.drone.yml View File

@@ -56,11 +56,10 @@ steps:

- name: pre-build
pull: always
image: webhippie/nodejs:latest
image: node:10 # this step is kept at the lowest version of node that we support
commands:
- make css
- make js
- bash -c '[ -z "$(git status --porcelain public/js public/css)" ] || (echo "Generated js/css files do not match" && git status --porcelain public/js public/css && exit 1)'

- name: build-without-gcc
pull: always
@@ -69,6 +68,7 @@ steps:
GO111MODULE: on
GOPROXY: off
commands:
- curl -sL https://deb.nodesource.com/setup_12.x | bash - && apt -y install nodejs
- go build -mod=vendor -o gitea_no_gcc # test if build succeeds without the sqlite tag

- name: build-linux-386
@@ -80,12 +80,14 @@ steps:
GOOS: linux
GOARCH: 386
commands:
- curl -sL https://deb.nodesource.com/setup_12.x | bash - && apt -y install nodejs
- go build -mod=vendor -o gitea_linux_386 # test if compatible with 32 bit

- name: build
pull: always
image: golang:1.13
commands:
- curl -sL https://deb.nodesource.com/setup_12.x | bash - && apt -y install nodejs
- make clean
- make generate
- make golangci-lint

+ 3
- 1
.gitignore View File

@@ -69,6 +69,8 @@ coverage.all
/modules/indexer/issues/indexers
routers/repo/authorized_keys
/yarn.lock
/public/js
/public/css

# Snapcraft
snap/.snapcraft/
@@ -78,4 +80,4 @@ prime/
*.snap
*.snap-build
*_source.tar.bz2
.DS_Store
.DS_Store

+ 1
- 1
Dockerfile View File

@@ -11,7 +11,7 @@ ARG TAGS="sqlite sqlite_unlock_notify"
ENV TAGS "bindata $TAGS"

#Build deps
RUN apk --no-cache add build-base git
RUN apk --no-cache add build-base git nodejs npm

#Setup repo
COPY . ${GOPATH}/src/code.gitea.io/gitea

+ 60
- 31
Makefile View File

@@ -18,7 +18,6 @@ else
endif
endif

BINDATA := modules/{options,public,templates}/bindata.go
GOFILES := $(shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go")
GOFMT ?= gofmt -s

@@ -42,7 +41,17 @@ endif
LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)"

PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell GO111MODULE=on $(GO) list -mod=vendor ./... | grep -v /vendor/)))
SOURCES ?= $(shell find . -name "*.go" -type f)

GO_SOURCES ?= $(shell find . -name "*.go" -type f)
JS_SOURCES ?= $(shell find web_src/js web_src/css -type f)
CSS_SOURCES ?= $(shell find web_src/less -type f)

JS_DEST := public/js/index.js
CSS_DEST := public/css/index.css
BINDATA_DEST := modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go

JS_DEST_DIR := public/js
CSS_DEST_DIR := public/css

TAGS ?=

@@ -80,10 +89,31 @@ all: build

include docker/Makefile

.PHONY: go-check
go-check:
$(eval GO_VERSION := $(shell printf "%03d%03d%03d" $(shell go version | grep -Eo '[0-9]+\.?[0-9]+?\.?[0-9]?\s' | tr '.' ' ');))
@if [ "$(GO_VERSION)" -lt "001011000" ]; then \
echo "Gitea requires Go 1.11.0 or greater to build. You can get it at https://golang.org/dl/"; \
exit 1; \
fi

.PHONY: node-check
node-check:
$(eval NODE_VERSION := $(shell printf "%03d%03d%03d" $(shell node -v | grep -Eo '[0-9]+\.?[0-9]+?\.?[0-9]?' | tr '.' ' ');))
$(eval NPM_MISSING := $(shell hash npm > /dev/null 2>&1 || echo 1))
@if [ "$(NODE_VERSION)" -lt "010000000" -o "$(NPM_MISSING)" = "1" ]; then \
echo "Gitea requires Node.js 10.0.0 or greater and npm to build. You can get it at https://nodejs.org/en/download/"; \
exit 1; \
fi

.PHONY: clean-all
clean-all: clean
rm -rf $(JS_DEST_DIR) $(CSS_DEST_DIR)

.PHONY: clean
clean:
$(GO) clean -i ./...
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) \
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) \
integrations*.test \
integrations/gitea-integration-pgsql/ integrations/gitea-integration-mysql/ integrations/gitea-integration-mysql8/ integrations/gitea-integration-sqlite/ \
integrations/gitea-integration-mssql/ integrations/indexers-mysql/ integrations/indexers-mysql8/ integrations/indexers-pgsql integrations/indexers-sqlite \
@@ -309,42 +339,42 @@ bench-pgsql: integrations.pgsql.test generate-ini-pgsql
integration-test-coverage: integrations.cover.test generate-ini-mysql
GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out

integrations.mysql.test: $(SOURCES)
integrations.mysql.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -o integrations.mysql.test

integrations.mysql8.test: $(SOURCES)
integrations.mysql8.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -o integrations.mysql8.test

integrations.pgsql.test: $(SOURCES)
integrations.pgsql.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -o integrations.pgsql.test

integrations.mssql.test: $(SOURCES)
integrations.mssql.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -o integrations.mssql.test

integrations.sqlite.test: $(SOURCES)
integrations.sqlite.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -o integrations.sqlite.test -tags 'sqlite sqlite_unlock_notify'

integrations.cover.test: $(SOURCES)
integrations.cover.test: $(GO_SOURCES)
GO111MODULE=on $(GO) test -mod=vendor -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(PACKAGES) | tr ' ' ',') -o integrations.cover.test

.PHONY: migrations.mysql.test
migrations.mysql.test: $(SOURCES)
migrations.mysql.test: $(GO_SOURCES)
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.mysql.test

.PHONY: migrations.mysql8.test
migrations.mysql8.test: $(SOURCES)
migrations.mysql8.test: $(GO_SOURCES)
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.mysql8.test

.PHONY: migrations.pgsql.test
migrations.pgsql.test: $(SOURCES)
migrations.pgsql.test: $(GO_SOURCES)
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.pgsql.test

.PHONY: migrations.mssql.test
migrations.mssql.test: $(SOURCES)
migrations.mssql.test: $(GO_SOURCES)
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.mssql.test

.PHONY: migrations.sqlite.test
migrations.sqlite.test: $(SOURCES)
migrations.sqlite.test: $(GO_SOURCES)
$(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.sqlite.test -tags 'sqlite sqlite_unlock_notify'

.PHONY: check
@@ -354,10 +384,16 @@ check: test
install: $(wildcard *.go)
$(GO) install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)'

.PHONY: go
go: go-check $(EXECUTABLE)

.PHONY: go-all
go-all: go-check generate go

.PHONY: build
build: $(EXECUTABLE)
build: js css go-all

$(EXECUTABLE): $(SOURCES)
$(EXECUTABLE): $(GO_SOURCES)
GO111MODULE=on $(GO) build -mod=vendor $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@

.PHONY: release
@@ -412,33 +448,26 @@ release-compress:
fi
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done;

npm-check:
@hash npm > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
echo "Please install Node.js 8.x or greater with npm"; \
exit 1; \
fi;
@hash npx > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
echo "Please install Node.js 8.x or greater with npm"; \
exit 1; \
fi;

.PHONY: npm
npm: npm-check
node_modules: package-lock.json
npm install --no-save

.PHONY: npm-update
npm-update: npm-check
npm-update: node-check node_modules
npx updates -cu
rm -rf node_modules package-lock.json
npm install --package-lock

.PHONY: js
js: npm
js: node-check $(JS_DEST)

$(JS_DEST): node_modules $(JS_SOURCES)
npx eslint web_src/js webpack.config.js
npx webpack

.PHONY: css
css: npm
css: node-check $(CSS_DEST)

$(CSS_DEST): node_modules $(CSS_SOURCES)
npx stylelint web_src/less
npx lessc --clean-css="--s0 -b" web_src/less/index.less public/css/index.css
$(foreach file, $(filter-out web_src/less/themes/_base.less, $(wildcard web_src/less/themes/*)),npx lessc --clean-css="--s0 -b" web_src/less/themes/$(notdir $(file)) > public/css/theme-$(notdir $(call strip-suffix,$(file))).css;)

+ 10
- 8
docs/content/doc/advanced/hacking-on-gitea.en-us.md View File

@@ -23,6 +23,10 @@ environment variable and to add the go bin directory or directories
`${GOPATH//://bin:}/bin` to the `$PATH`. See the Go wiki entry for
[GOPATH](https://github.com/golang/go/wiki/GOPATH).

Next, [install Node.js with npm](https://nodejs.org/en/download/) which is
required to build the JavaScript and CSS files. The minimum supported Node.js
version is 10 and the latest LTS version is recommended.

You will also need make.
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>(See here how to get Make)</a>

@@ -98,7 +102,7 @@ from source</a>.
The simplest recommended way to build from source is:

```bash
TAGS="bindata sqlite sqlite_unlock_notify" make generate build
TAGS="bindata sqlite sqlite_unlock_notify" make build
```

However, there are a number of additional make tasks you should be aware of.
@@ -136,19 +140,17 @@ You should run revive, vet and spell-check on the code with:
make revive vet misspell-check
```

### Updating CSS

To generate the CSS, you need [Node.js](https://nodejs.org/) 8.0 or greater with npm. We use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our CSS. Do **not** edit the files in `public/css` directly, as they are generated from `lessc` from the files in `public/less`.
### Working on CSS

Edit files in `public/less`, and then run the linter and build the CSS files via:
Edit files in `web_src/less` and run the linter and build the CSS files via:

```bash
make css
```

### Updating JS
### Working on JS

To generate the JS files, you need [Node.js](https://nodejs.org/) 8.0 or greater with npm. Edit files in `public/js`, run the linter and build the JS files via:
Edit files in `web_src/js`, run the linter and build the JS files via:

```bash
make js
@@ -235,7 +237,7 @@ Unit tests will not and cannot completely test Gitea alone. Therefore, we
have written integration tests; however, these are database dependent.

```bash
TAGS="bindata sqlite sqlite_unlock_notify" make generate build test-sqlite
TAGS="bindata sqlite sqlite_unlock_notify" make build test-sqlite
```

will run the integration tests in an sqlite environment. Other database tests

+ 13
- 7
docs/content/doc/installation/from-source.en-us.md View File

@@ -21,6 +21,10 @@ environment variable and to add the go bin directory or directories
`${GOPATH//://bin:}/bin` to the `$PATH`. See the Go wiki entry for
[GOPATH](https://github.com/golang/go/wiki/GOPATH).

Next, [install Node.js with npm](https://nodejs.org/en/download/) which is
required to build the JavaScript and CSS files. The minimum supported Node.js
version is 10 and the latest LTS version is recommended.

**Note**: When executing make tasks that require external tools, like
`make misspell-check`, Gitea will automatically download and build these as
necessary. To be able to use these, you must have the `"$GOPATH/bin"` directory
@@ -75,9 +79,12 @@ git checkout v{{< version >}} # or git checkout pr-xyz

## Build

Since all required libraries are already bundled in the Gitea source, it's
possible to build Gitea with no additional downloads apart from Make
<a href='{{< relref "doc/advanced/make.en-us.md" >}}'>(See here how to get Make)</a>.
To build from source, the following programs must be present on the system:

- `go` 1.11.0 or higher, see [here](https://golang.org/dl/)
- `node` 10.0.0 or higher with `npm`, see [here](https://nodejs.org/en/download/)
- `make`, see <a href='{{< relref "doc/advanced/make.en-us.md" >}}'>here</a>

Various [make tasks](https://github.com/go-gitea/gitea/blob/master/Makefile)
are provided to keep the build process as simple as possible.

@@ -93,11 +100,10 @@ Depending on requirements, the following build tags can be included.

Bundling assets into the binary using the `bindata` build tag can make
development and testing easier, but is not ideal for a production deployment.
To include assets, they must be built separately using the `generate` make
task e.g.:
To include assets, add the `bindata` tag:

```bash
TAGS="bindata" make generate build
TAGS="bindata" make build
```

In the default release build of our continuous integration system, the build
@@ -105,7 +111,7 @@ tags are: `TAGS="bindata sqlite sqlite_unlock_notify"`. The simplest
recommended way to build from source is therefore:

```bash
TAGS="bindata sqlite sqlite_unlock_notify" make generate build
TAGS="bindata sqlite sqlite_unlock_notify" make build
```

## Test

+ 1
- 1
package.json View File

@@ -2,7 +2,7 @@
"license": "MIT",
"private": true,
"engines": {
"node": ">=8"
"node": ">=10"
},
"devDependencies": {
"@babel/core": "7.7.2",

+ 0
- 1085
public/css/index.css
File diff suppressed because it is too large
View File


+ 0
- 285
public/css/theme-arc-green.css View File

@@ -1,285 +0,0 @@
.hljs{display:block;overflow-x:auto;padding:.5em;color:#bababa}
.hljs-emphasis,.hljs-strong{color:#a8a8a2}
.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#6896ba}
.hljs-code,.hljs-selector-class{color:#a6e22e}
.hljs-emphasis{font-style:italic}
.hljs-attribute,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-variable{color:#cb7832}
.hljs-params{color:#b9b9b9}
.hljs-string{color:#6a8759}
.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-subst,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-type{color:#e0c46c}
.hljs-comment,.hljs-deletion,.hljs-meta{color:#7f7f7f}
.repository .ui.segment.sub-menu .list .item a{color:#dbdbdb}
.ui.horizontal.segments>.segment{background-color:#383c4a}
body{background:#383c4a;color:#9e9e9e}
*{scrollbar-width:thin;scrollbar-color:#87ab63 rgba(255,255,255,.1)}
::-webkit-scrollbar{-webkit-appearance:none!important;width:10px!important;height:10px!important}
::-webkit-scrollbar-track{border-radius:0!important;background:rgba(255,255,255,.1)!important}
::-webkit-scrollbar-thumb{cursor:pointer!important;border-radius:5px!important;-webkit-transition:color .2s ease!important;transition:color .2s ease!important;background:#87ab63!important}
::-webkit-scrollbar-thumb:window-inactive{background:#87ab63!important}
::-webkit-scrollbar-thumb:hover{background:#87ab63!important}
a{color:#87ab63}
a:hover{color:#a0cc75}
.ui.card>.extra a:not(.ui):hover,.ui.cards>.card>.extra a:not(.ui):hover{color:#a0cc75}
.ui.breadcrumb a:hover{color:#a0cc75}
.ui.breadcrumb a{color:#87ab63}
.repository .metas .ui.list a .text{color:#87ab63}
.repository .metas .ui.list a .text:hover{color:#a0cc75}
.repository .label.list .item a{color:#87ab63}
.repository .label.list .item a:hover{color:#a0cc75}
.repository .milestone.list>.item>a{color:#87ab63}
.repository .milestone.list>.item>a:hover{color:#a0cc75}
.repository.release #release-list{border-top:1px solid #4c505c}
.repository .milestone.list>.item .operate>a{color:#87ab63}
.repository .milestone.list>.item .operate>a:hover{color:#a0cc75}
.ui.green.progress .bar{background-color:#684}
.ui.progress.success .bar{background-color:#7b9e57!important}
.following.bar.light{background:#2e323e;border-bottom:1px solid #313131}
.ui.secondary.menu .active.item{color:#dbdbdb}
.ui.secondary.menu .item{color:#9e9e9e}
.following.bar .top.menu a.item:hover{color:#fff}
.repository.view.issue .comment-list .comment .content>.bottom.segment a{border:solid 1px #353945;background-color:#353945}
.ui.attached.header{background:#404552;border:1px solid #404552;color:#dbdbdb}
.ui.attached.table{border:1px solid #304251;background:#304251}
.feeds .list ul li:not(:last-child){border-bottom:1px solid #333640}
.feeds .list ul li.private{background:#353945;border:1px solid #333640}
.ui.secondary.menu .active.item:hover,.ui.secondary.menu .dropdown.item:hover,.ui.secondary.menu .link.item:hover,.ui.secondary.menu a.item:hover{color:#fff}
.ui.menu .ui.dropdown .menu>.item{background:#2c303a!important;color:#9e9e9e!important}
.ui.secondary.menu .dropdown.item>.menu,.ui.text.menu .dropdown.item>.menu{border:1px solid #434444}
footer{background:#2e323e;border-top:1px solid #313131}
.ui.menu .dropdown.item .menu{background:#2c303a}
.ui.menu .ui.dropdown .menu>.item:hover,.ui.menu .ui.dropdown .menu>.selected.item{color:#fff!important}
.ui.dropdown .menu>.header{color:#dbdbdb}
.ui.red.label,.ui.red.labels .label{background-color:#7d3434!important;border-color:#8a2121!important}
.ui.menu{background:#404552;border:1px solid #353945}
.ui.menu .active.item:hover,.ui.vertical.menu .active.item:hover{color:#dbdbdb;background:#4b5162}
.ui.link.menu .item:hover,.ui.menu .dropdown.item:hover,.ui.menu .link.item:hover,.ui.menu a.item:hover{color:#dbdbdb;background:#454b5a}
.ui.menu .active.item{background:#4b5162;color:#dbdbdb}
.ui.input input{background:#404552;border:2px solid #353945;color:#dbdbdb}
.ui.input input:focus,.ui.input.focus input{background:#404552;border:2px solid #353945;color:#dbdbdb}
.ui.accordion .title:not(.ui){color:#dbdbdb}
.ui.label{color:#dbdbdb;background-color:#404552}
.issue.list>.item .title{color:#87ab63}
.issue.list>.item .title:hover{color:#a0cc75}
.issue.list>.item{border-bottom:1px dashed #475767}
.ui.basic.green.label,.ui.green.label,.ui.green.labels .label{background-color:#2d693b!important;border-color:#2d693b!important}
.ui.basic.green.labels a.label:hover,a.ui.basic.green.label:hover{background-color:#16ab39!important;border-color:#16ab39!important;color:#fff!important}
.issue.list>.item .comment{color:#129c92}
.ui.basic.button,.ui.basic.buttons .button{color:#797979!important}
.ui.basic.red.active.button,.ui.basic.red.buttons .active.button{box-shadow:0 0 0 1px #c75252 inset!important;color:#c75252!important}
.ui.basic.button:focus,.ui.basic.button:hover,.ui.basic.buttons .button:focus,.ui.basic.buttons .button:hover{background:0 0!important;color:#dbdbdb!important}
.ui.menu .item{background:#404552;color:#9e9e9e}
.ui.menu .item.disabled,.ui.menu .item.disabled:hover{color:#626773}
.ui.pagination.menu .active.item{color:#dbdbdb;background-color:#87ab63}
.repository .header-wrapper{background-color:#2a2e3a}
.ui.tabular.menu .active.item{background:#383c4a;color:#dbdbdb;border-left:1px solid transparent;border-right:1px solid transparent;border-top:0}
.ui.tabular.menu .item{color:#9e9e9e}
.ui.tabular.menu .item:hover{color:#dbdbdb}
.ui.breadcrumb .divider,.ui.header{color:#9e9e9e}
.ui.blue.label,.ui.blue.labels .label{background-color:#26577b!important;border-color:#26577b!important}
.ui.menu .item>.label{background:#565454}
.ui.blue.button,.ui.blue.buttons .button{background-color:#87ab63}
.ui.blue.button:hover,.ui.blue.buttons .button:hover{background-color:#a0cc75}
.ui.form input:not([type]),.ui.form input[type=text],.ui.form input[type=email],.ui.form input[type=search],.ui.form input[type=password],.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=tel],.ui.form input[type=time],.ui.form input[type=url],.ui.form input[type=number]{color:#9e9e9e;background:#404552;border:2px solid #353945}
.ui.form input:not([type]):focus,.ui.form input[type=text]:focus,.ui.form input[type=email]:focus,.ui.form input[type=search]:focus,.ui.form input[type=password]:focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus,.ui.form input[type=number]:focus{background:#404552;border:2px solid #4b505f;color:#dbdbdb}
.ui.action.input:not([class*="left action"]) input:focus{border-right-color:#4b505f!important}
.ui.green.button,.ui.green.buttons .button{background-color:#87ab63}
.ui.green.button:hover,.ui.green.buttons .button:hover{background-color:#a0cc75}
.ui.button{background:#383c4a;border:1px solid #4c505c;color:#dbdbdb}
.ui.labeled.button:not([class*="left labeled"])>.label,.ui[class*="left labeled"].button>.button{background:#404552;border:1px solid #4c505c;color:#87ab63}
.ui.button:hover{background-color:#404552;color:#dbdbdb}
.ui.table thead th{background:#404552;color:#dbdbdb}
.repository.file.list #repo-files-table tr:hover{background-color:#393d4a}
.ui.table{color:#a5a5a5!important;border-color:#4c505c;background:#353945}
.ui.table tbody tr{border-color:#333640;background:#2a2e3a}
.ui .text.grey{color:#808084!important}
.ui.attached.table.segment{background:#353945;color:#dbdbdb!important}
.markdown:not(code) h2{border-bottom:1px solid #304251}
.repository.wiki.new .ui.container form .ui.tabular.menu{border-bottom:1px solid rgba(187,187,187,.6)}
.repository.wiki.new .ui.container form .ui.tabular.menu .active.item{border-top:1px solid rgba(187,187,187,.6);border-left:1px solid rgba(187,187,187,.6);border-right:1px solid rgba(187,187,187,.6)}
.repository.wiki.new .ui.container form .ui.tabular.menu .active.item:hover{background:#4b5162}
.hljs,.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#9daccc}
.markdown:not(code) .highlight pre,.markdown:not(code) pre{background-color:#2a2e3a;border:1px solid #404552}
.markdown:not(code) table tr:nth-child(2n){background-color:#2a2e39}
.markdown:not(code) table tr:nth-child(2n-1){background-color:#383b44}
.markdown:not(code) table thead tr:nth-child(2n-1){background-color:#464c5d!important}
.markdown:not(code) table td,.markdown:not(code) table th{border-color:#4c505c!important}
.repository.file.editor.edit,.repository.wiki.new .CodeMirror{border-right:1px solid rgba(187,187,187,.6);border-left:1px solid rgba(187,187,187,.6);border-bottom:1px solid rgba(187,187,187,.6)}
.repository.file.editor.edit .editor-preview,.repository.file.editor.edit .editor-preview-side,.repository.file.editor.edit+.editor-preview-side,.repository.wiki.new .CodeMirror .editor-preview,.repository.wiki.new .CodeMirror .editor-preview-side,.repository.wiki.new .CodeMirror+.editor-preview-side{background:#353945}
.repository.file.editor.edit .editor-preview .markdown:not(code).ui.segment,.repository.file.editor.edit .editor-preview-side .markdown:not(code).ui.segment,.repository.file.editor.edit+.editor-preview-side .markdown:not(code).ui.segment,.repository.wiki.new .CodeMirror .editor-preview .markdown:not(code).ui.segment,.repository.wiki.new .CodeMirror .editor-preview-side .markdown:not(code).ui.segment,.repository.wiki.new .CodeMirror+.editor-preview-side .markdown:not(code).ui.segment{border-width:0}
.ui.dropdown .menu{background:#2c303a}
.ui.dropdown .menu>.message:not(.ui){color:#636363}
.ui.input{color:#dbdbdb}
.overflow.menu .items .item{color:#9d9d9d}
.overflow.menu .items .item:hover{color:#dbdbdb}
.ui.segment{background:#353945;color:#9e9e9e!important;border:1px solid #404552}
.ui.active.button:active,.ui.button:active,.ui.button:focus{background-color:#2e3e4e;color:#dbdbdb}
.ui.dropdown .menu .selected.item,.ui.dropdown.selected{color:#dbdbdb}
.ui.dropdown .menu>.item:hover{color:#dbdbdb}
.ui.dropdown .menu>.item{color:#9e9e9e}
.ui.attached.segment{border:1px solid #404552}
.repository.view.issue .comment-list .comment .content>.bottom.segment{background:#353945}
.repository.view.issue .comment-list .comment .content .header{color:#dbdbdb;background-color:#404552;border-bottom:1px solid #353944}
.repository.view.issue .comment-list .comment .content .merge-section{background-color:#404552;border-top:1px solid #353944}
.repository.view.issue .comment-list .event>.octicon.issue-symbol{background:#3b4954}
.repository.view.issue .comment-list .event>.octicon:not(.issue-symbol){text-shadow:-2px 0 #383c4a,0 2px #383c4a,2px 0 #383c4a,0 -2px #383c4a}
.ui .text.grey a{color:#dbdbdb!important}
.ui.comments .comment .actions a{color:#dbdbdb}
.repository.view.issue .comment-list .comment .content .header:after{border-right-color:#404552}
.repository.new.issue .comment.form .content:after{border-right-color:#353945}
.repository.view.issue .comment-list .comment .content .header:before{border-right-color:#404552}
.repository.new.issue .comment.form .content:before{border-right-color:#353945}
.repository.view.issue .comment-list .timeline-line:before,.repository.view.issue .comment-list:not(.prevent-before-timeline):before{background-color:#3b4954}
.repository .comment.form .content .form:after{border-right-color:#313c47}
.repository .comment.form .content .form:before{border-right-color:#313c47}
.ui .text.grey a:hover{color:#dbdbdb!important}
.ui.basic.green.active.button,.ui.basic.green.buttons .active.button{color:#13ae38!important}
.ui.form textarea,.ui.form textarea:focus{color:#dbdbdb;background:#404552;border:2px solid #353945}
.ui.form textarea:focus{border:1px solid #456580}
.ui .info.segment.top{background-color:#404552!important}
.repository .diff-file-box .code-diff-unified tbody tr.del-code td{background-color:#3c2626!important;border-color:#634343!important}
.repository .diff-file-box .code-diff-unified tbody tr.add-code td{background-color:#283e2d!important;border-color:#314a37!important}
.repository .diff-file-box .code-diff tbody tr .added-code{background-color:#3a523a}
.hljs-section,.hljs-selector-id,.hljs-title{color:#986c88}
.hljs-doctag,.hljs-string{color:#8ab398}
.repository .diff-file-box .code-diff tbody tr .removed-code{background-color:#5f3737}
.tag-code,.tag-code td{background:#242637!important;border-color:transparent!important}
.ui.vertical.menu .active.item{background:#4b5162}
.ui.vertical.menu .item{background:#353945}
.ui.vertical.menu .header.item{background:#404552}
.ui.vertical.menu{background:#353945;border:1px solid #333640}
.ui.repository.list .item:not(:first-child){border-top:1px solid #4c505c}
.ui .text.blue{color:#87ab63!important}
.ui.selection.active.dropdown,.ui.selection.active.dropdown .menu{border-color:#4e5361;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}
.ui.selection.active.dropdown:hover,.ui.selection.active.dropdown:hover .menu{border-color:#4e5361;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}
.ui.selection.dropdown{background:#404552;border:1px solid #404552;color:#9e9e9e}
.ui.menu .ui.dropdown .menu>.active.item{color:#dbdbdb!important}
.ui.tabular.menu{border-bottom:1px solid #313c47}
.ui.card,.ui.cards>.card{background:#353945;box-shadow:0 1px 3px 0 #4c505c,0 0 0 1px #4c505c}
.ui.card>.content>.header,.ui.cards>.card>.content>.header{color:#dbdbdb}
.ui.card>.extra a:not(.ui),.ui.cards>.card>.extra a:not(.ui){color:#87ab63}
.ui .text.black{color:#9e9e9e}
.ui .text.black:hover{color:#dbdbdb}
.ui.secondary.segment{background:#353945}
.ui.secondary.pointing.menu .active.item{color:#dbdbdb;border:0;background:#383c4a}
.ui.user.list .item:not(:first-child){border-top:1px solid #4c505c}
.ui.secondary.pointing.menu .active.item:hover{border-color:#af8b4c;color:#dbdbdb;background:#4b5162}
.ui.secondary.pointing.menu .dropdown.item:hover,.ui.secondary.pointing.menu .link.item:hover,.ui.secondary.pointing.menu a.item:hover{color:#dbdbdb}
.ui.checkbox label,.ui.checkbox+label,.ui.form .field>label{color:#9e9e9e}
.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.fields>label{color:#9e9e9e}
.user.settings .email.list .item:not(:first-child){border-top:1px solid #3f4451}
.explore .navbar{background-color:#2a2e3a!important}
.ui.menu.new-menu{background-color:#2a2e3a!important}
@media only screen and (max-width:1200px){.ui.menu.new-menu:after{background-image:linear-gradient(to right,rgba(42,46,42,0),#2a2e2a 100%)}
}
input{background:#2e323e}
.settings .key.list .item:not(:first-child){border-top:1px solid #404552}
.ui.attached.info.message,.ui.info.message{box-shadow:0 0 0 1px #4b5e71 inset,0 0 0 0 transparent}
.ui.bottom.attached.message{background-color:#2c662d;color:#87ab63}
.ui.bottom.attached.message .pull-right{color:#87ab63}
.ui.info.message{background-color:#2c3b4a;color:#9ebcc5}
.ui .warning.header{background-color:#5d3a22!important;border-color:#794f31}
.ui.red.message{background-color:rgba(80,23,17,.6);color:#f9cbcb;box-shadow:0 0 0 1px rgba(121,71,66,.5) inset,0 0 0 0 transparent}
.ui.red.button,.ui.red.buttons .button{background-color:#7d3434}
.ui.red.button:hover,.ui.red.buttons .button:hover{background-color:#984646}
.ui.checkbox label:hover,.ui.checkbox+label:hover{color:#dbdbdb!important}
.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{color:#7f98ad}
.ui.checkbox input:checked~.box:before,.ui.checkbox input:checked~label:before{background:#304251;opacity:1;color:#7f98ad;border-color:#304251}
.ui.checkbox .box:hover::before,.ui.checkbox label:hover::before{background:#304251}
.ui.checkbox .box:before,.ui.checkbox label:before{background:#304251;border:1px solid #304251}
.ui.checkbox label:before{border-color:#476075}
.ui.checkbox .box:active::before,.ui.checkbox label:active::before{background:#304251;border-color:rgba(34,36,38,.35)}
.ui.checkbox input:focus~.box:before,.ui.checkbox input:focus~label:before{border-color:#304251;background:#304251}
.ui.checkbox input:checked:focus~.box:before,.ui.checkbox input:checked:focus~label:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:before{border-color:#304251;background:#304251}
.ui.checkbox input:checked:focus~.box:after,.ui.checkbox input:checked:focus~label:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:after{color:#7f98ad}
.ui.checkbox input:focus~.box:after,.ui.checkbox input:focus~label,.ui.checkbox input:focus~label:after{color:#9a9a9a}
.ui.selection.dropdown:hover{border:1px solid #456580}
.ui.selection.dropdown .menu>.item{border-top:1px solid #313c47}
.ui.selection.visible.dropdown>.text:not(.default){color:#9e9e9e}
.ui.negative.message{background-color:rgba(80,23,17,.6);color:#f9cbcb;box-shadow:0 0 0 1px rgba(121,71,66,.5) inset,0 0 0 0 transparent}
.hljs-attribute,.hljs-name,.hljs-tag{color:#ef5e77}
.user.profile .ui.card .extra.content ul li:not(:last-child){border-bottom:1px solid #4c505c}
.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:#bd84bf}
.ui.form .dropzone{border:2px dashed #4c505c}
.ui.basic.red.button,.ui.basic.red.buttons .button{box-shadow:0 0 0 1px #a04141 inset!important;color:#a04141!important}
.ui.list .list>.item .header,.ui.list>.item .header{color:#dedede}
.ui.list .list>.item .description,.ui.list>.item .description{color:#9e9e9e}
.ui.user.list .item .description a{color:#668cb1}
.repository.file.list #repo-files-table tbody .octicon.octicon-file-directory,.repository.file.list #repo-files-table tbody .octicon.octicon-file-submodule{color:#7c9b5e}
.ui.blue.button:focus,.ui.blue.buttons .button:focus{background-color:#a27558}
.ui.basic.blue.button:hover,.ui.basic.blue.buttons .button:hover{box-shadow:0 0 0 1px #87ab63 inset!important;color:#87ab63!important}
.ui.basic.blue.button:focus,.ui.basic.blue.buttons .button:focus{box-shadow:0 0 0 1px #87ab63 inset!important;color:#87ab63!important}
.repository.labels .ui.basic.black.label{background-color:#bbb!important}
.lines-commit{background:#2e323e!important}
.bottom-line{border-color:#4e525e!important}
.lines-num{background:#2e323e!important;color:#9e9e9e!important;border-color:#2d2d2d!important}
.lines-code .hljs,.lines-code ol,.lines-code pre,.lines-num .hljs,.lines-num ol,.lines-num pre{background-color:#2a2e3a!important}
.code-view .active{background:#554a00}
a.ui.label:hover,a.ui.labels .label:hover{background-color:#505667!important;color:#dbdbdb!important}
.repository #commits-table td.sha .sha.label,.repository #repo-files-table .sha.label{border-color:#888}
.repository #commits-table td.sha .sha.label.isSigned .detail.icon,.repository #repo-files-table .sha.label.isSigned .detail.icon{background:0 0;border-left-color:#888}
.repository .label.list .item{border-bottom:1px dashed #4c505c}
.ui.basic.blue.button,.ui.basic.blue.buttons .button{box-shadow:0 0 0 1px #87ab63 inset!important;color:#87ab63!important}
.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(3),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(4),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(5),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(6){background-color:#2a2e3a}
.repository .diff-file-box .code-diff-split tbody tr td.add-code,.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(4),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(5),.repository .diff-file-box .code-diff-split tbody tr.add-code td:nth-child(6){background-color:#283e2d!important;border-color:#314a37!important}
.repository .diff-file-box .code-diff-split tbody tr td.del-code,.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(1),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(2),.repository .diff-file-box .code-diff-split tbody tr.del-code td:nth-child(3){background-color:#3c2626!important;border-color:#634343!important}
.ui.blue.button:active,.ui.blue.buttons .button:active{background-color:#a27558}
#git-graph-container li a{color:#c79575}
#git-graph-container li .author{color:#c79575}
.ui.header .sub.header{color:#9e9e9e}
.ui.dividing.header{border-bottom:1px solid #4c505c}
.ui.modal>.header{background:#404552;color:#dbdbdb}
.ui.modal>.actions{background:#404552;border-top:1px solid #404552}
.ui.modal>.content{background:#383c4a}
.editor-toolbar{background-color:#404552}
.editor-toolbar a{color:#87ab63!important}
.repository .diff-detail-box{background-color:#383c4a}
.repository .diff-detail-box .detail-files{background-color:inherit}
.comment-code-cloud .ui.attached.tabular.menu{background:none transparent;border:0}
.comment-code-cloud .footer .markdown-info{color:inherit}
.file-comment{color:#888}
.ui.comments .comment .author{color:#dbdbdb}
.ui.comments .comment .metadata{color:#808084}
.ui.comments .comment .text{color:#9e9e9e}
.xdsoft_datetimepicker{background:#2a2e39;border:1px solid #4c505c;color:#9e9e9e}
.xdsoft_datetimepicker .xdsoft_mounthpicker{height:36px;background:#464c5d;margin:-2px -8px 2px;padding:2px 8px 0}
.xdsoft_datetimepicker .xdsoft_mounthpicker button{background-image:none;text-indent:0;text-align:center;color:#9e9e9e}
.xdsoft_datetimepicker .xdsoft_mounthpicker button.xdsoft_prev::before{content:"\f0d9";font:normal normal normal 14px/1 FontAwesome,serif;font-size:1.7em}
.xdsoft_datetimepicker .xdsoft_mounthpicker button.xdsoft_next::before{content:"\f0da";font:normal normal normal 14px/1 FontAwesome,serif;font-size:1.7em}
.xdsoft_datetimepicker .xdsoft_mounthpicker button.xdsoft_today_button::before{content:"\f015";font:normal normal normal 14px/1 FontAwesome,serif;font-size:1.4em}
.xdsoft_datetimepicker .xdsoft_mounthpicker>div.xdsoft_label{background:#464c5d}
.xdsoft_datetimepicker .xdsoft_mounthpicker>div.xdsoft_label i{line-height:14px;background-image:none;text-indent:0;text-align:center}
.xdsoft_datetimepicker .xdsoft_mounthpicker>div.xdsoft_label i ::before{content:"\f0dd";font:normal normal normal 14px/1 FontAwesome,serif;font-size:.7em}
.xdsoft_datetimepicker .xdsoft_mounthpicker>div.xdsoft_label .xdsoft_select{background:#353945}
.xdsoft_datetimepicker .xdsoft_datepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_datepicker .xdsoft_calendar th{border-color:#4c505c;background-color:#2a2e39}
.xdsoft_datetimepicker .xdsoft_datepicker .xdsoft_calendar td.xdsoft_disabled,.xdsoft_datetimepicker .xdsoft_datepicker .xdsoft_calendar td.xdsoft_other_month{opacity:.8;background:#a0cc75;color:#000}
.heatmap-color-0{background-color:#2d303b}
.heatmap-color-1{background-color:#444f47}
.heatmap-color-2{background-color:#5b6e52}
.heatmap-color-3{background-color:#728e5e}
.heatmap-color-4{background-color:#89ad69}
.heatmap-color-5{background-color:#a0cc75}
.CodeMirror{color:#9daccc;background-color:#2b2b2b;border-top:0}
.CodeMirror div.CodeMirror-cursor{border-left:1px solid #9e9e9e}
.CodeMirror .CodeMirror-gutters{background-color:#2b2b2b}
.CodeMirror .CodeMirror-selected,.CodeMirror ::-moz-selection,.CodeMirror ::selection{background:#42402f!important}
.CodeMirror.cm-s-default .cm-property,.CodeMirror.cm-s-paper .cm-property{color:#a0cc75}
.CodeMirror.cm-s-default .cm-header,.CodeMirror.cm-s-paper .cm-header{color:#9daccc}
.CodeMirror.cm-s-default .cm-quote,.CodeMirror.cm-s-paper .cm-quote{color:#090}
.CodeMirror.cm-s-default .cm-keyword,.CodeMirror.cm-s-paper .cm-keyword{color:#cc8a61}
.CodeMirror.cm-s-default .cm-atom,.CodeMirror.cm-s-paper .cm-atom{color:#ef5e77}
.CodeMirror.cm-s-default .cm-number,.CodeMirror.cm-s-paper .cm-number{color:#ff5656}
.CodeMirror.cm-s-default .cm-def,.CodeMirror.cm-s-paper .cm-def{color:#e4e4e4}
.CodeMirror.cm-s-default .cm-variable-2,.CodeMirror.cm-s-paper .cm-variable-2{color:#00bdbf}
.CodeMirror.cm-s-default .cm-variable-3,.CodeMirror.cm-s-paper .cm-variable-3{color:#085}
.CodeMirror.cm-s-default .cm-comment,.CodeMirror.cm-s-paper .cm-comment{color:#8e9ab3}
.CodeMirror.cm-s-default .cm-string,.CodeMirror.cm-s-paper .cm-string{color:#a77272}
.CodeMirror.cm-s-default .cm-string-2,.CodeMirror.cm-s-paper .cm-string-2{color:#f50}
.CodeMirror.cm-s-default .cm-meta,.CodeMirror.cm-s-default .cm-qualifier,.CodeMirror.cm-s-paper .cm-meta,.CodeMirror.cm-s-paper .cm-qualifier{color:#ffb176}
.CodeMirror.cm-s-default .cm-builtin,.CodeMirror.cm-s-paper .cm-builtin{color:#b7c951}
.CodeMirror.cm-s-default .cm-bracket,.CodeMirror.cm-s-paper .cm-bracket{color:#997}
.CodeMirror.cm-s-default .cm-tag,.CodeMirror.cm-s-paper .cm-tag{color:#f1d273}
.CodeMirror.cm-s-default .cm-attribute,.CodeMirror.cm-s-paper .cm-attribute{color:#bfcc70}
.CodeMirror.cm-s-default .cm-hr,.CodeMirror.cm-s-paper .cm-hr{color:#999}
.CodeMirror.cm-s-default .cm-url,.CodeMirror.cm-s-paper .cm-url{color:#c5cfd0}
.CodeMirror.cm-s-default .cm-link,.CodeMirror.cm-s-paper .cm-link{color:#d8c792}
.CodeMirror.cm-s-default .cm-error,.CodeMirror.cm-s-paper .cm-error{color:#dbdbeb}

+ 0
- 2
public/js/gitgraph.js
File diff suppressed because it is too large
View File


+ 0
- 1
public/js/gitgraph.js.map
File diff suppressed because it is too large
View File


+ 0
- 2
public/js/index.js
File diff suppressed because it is too large
View File


+ 0
- 1
public/js/index.js.map
File diff suppressed because it is too large
View File


Loading…
Cancel
Save