Skip to content

Commit

Permalink
Merge pull request #45 from v8platform/develop
Browse files Browse the repository at this point in the history
Релиз 0.6.0
  • Loading branch information
khorevaa authored Apr 15, 2023
2 parents df52078 + 7ac6e44 commit f2ffa5f
Show file tree
Hide file tree
Showing 9 changed files with 253 additions and 73 deletions.
51 changes: 48 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,31 @@ oneget get --path ./tmp/dist/ [email protected]
# скачать файлы онлайн установщика 1C:EDT для Windows
oneget get edt:win.online
```

**Для проекта executor (Executor)**

* `x` - фильтр варианта для конкретной ОС
* `u` - фильтр для кросс-платформенного варианта

> Важно! При указании варианта `x` добавьте фильтр по ОС, иначе будут скачаны оба варианта, для Windows и Linux (см. примеры)
> Важно! При указании фильтра `u` игнорируется фильтр по ОС
**Пример использования:**
```shell
export ONEC_USERNAME=user
export ONEC_PASSWORD=password

# cкачать дистрибутив Исполнителя для Windows версии 2.1.1.1
oneget get executor:[email protected]

# cкачать дистрибутивы Исполнителя для Windows и Linux версии 2.1.1.1
oneget get executor:[email protected]

# cкачать кросс-платформенный дистрибутив Исполнителя версии 2.1.1.1
oneget get executor:[email protected]
```

##### Описание формата версии релиза

> В версии релиза может быть указан номер версии или специальные фильтры версии.
Expand Down Expand Up @@ -184,15 +209,35 @@ oneget get --path ./tmp/dist/ [email protected]
oneget get platform:[email protected]
```

##### Дополнительные фильтры

> В команде get может быть указан один или несколько дополнительных фильтров с помощью флага `--filter ключ=значение`.
> Ключ - это проект (`platform`, `edt` и тд)
> Значение дополнительного фильтра задается регулярным выражением.
> Дополнительные фильтры применяются поверх основных фильтров и только к url скачиваемого файла.
**Пример использования:**
```shell
export ONEC_USERNAME=user
export ONEC_PASSWORD=password

# скачать полный дистрибутив платформы 8.3.21.1302 x64 для Windows.
# Примечание: начиная с версии 8.3.21.1302 фирма 1С публикует несколько вариантов полных дистрибутивов:
# - классический
# - классический + Тонкие клиенты для других ОС для автоматического обновления через веб-сервер
# данный фильтр позволяет скачать именно классический вариант дистрибутива
oneget get --filter platform=windows64full_8 platform:[email protected]
```

## Запуск файлового сервера

с версиии oneget v0.4.0 реализованна поддержка файловго сервера.
с версиии oneget v0.4.0 реализованна поддержка файлового сервера.
Запуск сервера осуществляется флагом `--enableHttp` или установкой для переменной среды `$ONEGET_ENABLE_HTTP_SERVER`.
Порт по умолчанию - `8080` или переопределяется параметром `--serverPort` или переменной среды `$ONEGET_HTTP_SERVER_PORT`

Пример запуска:

```
```bash
oneget --user $ONEC_USERNAME --pwd $ONEC_PASSWORD --enableHttp --serverPort 9000 get platform:[email protected]
```

Expand All @@ -202,7 +247,7 @@ oneget --user $ONEC_USERNAME --pwd $ONEC_PASSWORD --enableHttp --serverPort 900

## Запуск в докере

### Каласический запуск приложения для загрузки дистрибутивов с https://users.1c.ru
### Классический запуск приложения для загрузки дистрибутивов с https://users.1c.ru

```shell
docker run -v $(pwd):/tmp/dist v8platform/oneget \
Expand Down
34 changes: 19 additions & 15 deletions cmd/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ package cmd

import (
"fmt"
"github.com/khorevaa/logos"
server "github.com/v8platform/oneget/http-server"
"github.com/v8platform/oneget/unpacker"
"go.uber.org/multierr"
"io/ioutil"
"os"
"path"
Expand All @@ -14,6 +10,11 @@ import (
"strings"
"time"

"github.com/khorevaa/logos"
server "github.com/v8platform/oneget/http-server"
"github.com/v8platform/oneget/unpacker"
"go.uber.org/multierr"

"github.com/urfave/cli/v2"
dloader "github.com/v8platform/oneget/downloader"
)
Expand Down Expand Up @@ -52,16 +53,18 @@ func (c *getCmd) run(ctx *cli.Context) error {
}

releases := getMapFromStrings(c.releases, "@", "latest")
filtersStr := getFilters(c.Filter.Value(), "=", "")
additionalFilterStr := getAdditionalFilters(c.Filter.Value(), "=", "")

var downloads []dloader.GetConfig
var downloadConfigs []dloader.DownloadConfig

for project, version := range releases {

projectIdAlias := getProjectId(project)

projectId := dloader.GetProjectIDByAlias(projectIdAlias)
projectFilters := compileFilters(filtersStr[projectId]...)
additionalFilters := compileFilters(additionalFilterStr[projectIdAlias]...)

var projectFilters []dloader.FileFilter

if fileFilter, err := getProjectFilter(project); err != nil {
log.Errorf("error get project <%s> file filter: %s", projectIdAlias, err.Error())
Expand All @@ -75,11 +78,12 @@ func (c *getCmd) run(ctx *cli.Context) error {
return err
}

downloads = append(downloads, dloader.GetConfig{
BasePath: getAbsolutePath(c.BaseDir),
Project: projectId,
Version: versionFilter,
Filters: projectFilters,
downloadConfigs = append(downloadConfigs, dloader.DownloadConfig{
BasePath: getAbsolutePath(c.BaseDir),
Project: projectId,
Version: versionFilter,
Filters: projectFilters,
AdditionalFilters: additionalFilters,
})
}

Expand All @@ -89,14 +93,14 @@ func (c *getCmd) run(ctx *cli.Context) error {
c.Password,
)

files, errGet := dl.Get(downloads...)
files, errGet := dl.Get(downloadConfigs...)
if errGet != nil {
err = multierr.Append(err, errGet)
}
if err != nil {
return err
}
log.Infof("Downloaded <%d> releases, files <%d>", len(downloads), len(files))
log.Infof("Downloaded <%d> releases, files <%d>", len(downloadConfigs), len(files))

if c.Extract {
err := c.extractFiles(files)
Expand Down Expand Up @@ -336,7 +340,7 @@ func getMapFromStrings(arr []string, sep string, defValue string) map[string]str
return result
}

func getFilters(arr []string, sep string, defValue string) map[string][]string {
func getAdditionalFilters(arr []string, sep string, defValue string) map[string][]string {

result := make(map[string][]string)

Expand Down
7 changes: 4 additions & 3 deletions downloader/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/khorevaa/logos"
"io"
"net/http"
"net/http/cookiejar"
"strings"
"sync"

"github.com/khorevaa/logos"
)

var releasesURL = "https://releases.1c.eu"
var loginURL = "https://login.1c.eu"
var releasesURL = "https://releases.1c.ru"
var loginURL = "https://login.1c.ru"

var log = logos.New("github.com/v8platform/oneget/downloader").Sugar()

Expand Down
93 changes: 75 additions & 18 deletions downloader/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,37 @@ package downloader

import (
"fmt"
"github.com/xelaj/go-dry"
"regexp"
"sort"
"strings"
"time"

"github.com/xelaj/go-dry"
)

const (
Platform83Project = "Platform83"
EDTProject = "DevelopmentTools10"
PostgreSQLProject = "AddCompPostgre"
ExecutorProject = "Executor"
)
const (
x64re = "(?smU)(?:64-bit|64 бит).*"
rpmre = "(?smU)(?:RPM|ОС Linux|для Linux$|tar.bz2).*"
debre = "(?smU)(?:DEB|ОС Linux|для Linux$|tar.bz2).*"
linuxre = "(?smU)(?:LINUX|ОС Linux|для Linux$|tar.bz2).*"
windowsre = "(?smU)(?:Windows|ОС Windows|zip).*"
osxre = "(?smU)(?:OS X|macOS|MacOS|ОС macOS).*"
clientre = "(?smU)Клиент"
serverre = "(?smU)(?:Cервер|Сервер)"
thinre = "(?smU)Тонкий клиент"
fullre = "(?smU)Технологическая платформа"
x64re = "(?smU)(?:64-bit|64 бит).*"
rpmre = "(?smU)(?:RPM|ОС Linux|для Linux$|tar.bz2).*"
debre = "(?smU)(?:DEB|ОС Linux|для Linux$|tar.bz2).*"
linuxre = "(?smU)(?:LINUX|ОС Linux|для Linux$|Linux|tar.bz2).*"
windowsre = "(?smU)(?:Windows|ОС Windows|zip).*"
osxre = "(?smU)(?:OS X|macOS|MacOS|ОС macOS).*"
clientre = "(?smU)Клиент"
serverre = "(?smU)(?:Cервер|Сервер)"
thinre = "(?smU)Тонкий клиент"
fullre = "(?smU)Технологическая платформа"
executorre = "(?smU)Дистрибутив 1С:Исполнитель"
)

/*
Специальные фильтры для платформы и ряда других приложение
Специальные фильтры для платформы и ряда других приложений
platform:thin.mac@latest
platform:full.win.x64@latest
Expand Down Expand Up @@ -63,6 +66,8 @@ var (
"online": "edt.online",
"jdk": "edt.jdk",
"full": fullre,
"u": `(\(U\).*)`,
"x": `(\(X\).*)`,
}

x64Regexp = regexp.MustCompile(x64re)
Expand Down Expand Up @@ -94,6 +99,10 @@ type PostgreSqlMatchFilter struct {
x64bitRegexp *regexp.Regexp
}

type ExecutorMatchFilter struct {
filters []*regexp.Regexp
}

func (p PostgreSqlMatchFilter) MatchString(source string) bool {
if p.x64bitRegexp.MatchString(source) != p.x64bitMatch {
return false
Expand Down Expand Up @@ -145,6 +154,8 @@ func NewFileFilter(project string, filter string) (FileFilter, error) {
return newPostgreSQLFilter(filter)
case EDTProject:
return newEdtFilter(filter)
case ExecutorProject:
return newExecutorFilter(filter)
default:
return nil, fmt.Errorf("unknown filter builder for project <%s>", project)
}
Expand Down Expand Up @@ -178,11 +189,6 @@ func newPostgreSQLFilter(filter string) (*PostgreSqlMatchFilter, error) {
m.x64bitMatch = true
}

// Для Windows если стоит только фильтр по нему и другого нет, то установим для платформы скачиваем полного дистрибутива
if ok := dry.StringInSlice("win", filters) || dry.StringInSlice("windows", filters); ok && len(filters) == 1 {
filters = append(filters, "full")
}

err := m.build(filters)

return m, err
Expand All @@ -203,7 +209,7 @@ func newPlatformMatchFilter(filter string) (*PlatformMatchFilter, error) {
m.x64bitMatch = true
}

// Для Windows если стоит только фильтр по нему и другого нет, то установим для платформы скачиваем полного дистрибутива
// Для Windows если стоит только фильтр по нему и другого нет, то скачаем полный дистрибутив
if ok := dry.StringInSlice("win", filters) || dry.StringInSlice("windows", filters); ok && len(filters) == 1 {
filters = append(filters, "full")
}
Expand Down Expand Up @@ -295,6 +301,25 @@ func newEdtFilter(filter string) (*EdtMatchFilter, error) {
return m, err
}

func newExecutorFilter(filter string) (*ExecutorMatchFilter, error) {
m := &ExecutorMatchFilter{}

filters := strings.Split(filter, ".")

if ok := dry.StringInSlice("u", filters); ok {
filters = removeFromFilter(filters, "win")
filters = removeFromFilter(filters, "windows")
filters = removeFromFilter(filters, "linux")
}

err := m.build(filters)
if err != nil {
return nil, err
}

return m, err
}

func (m *EdtMatchFilter) build(filters []string) error {

for _, filter := range filters {
Expand All @@ -312,6 +337,25 @@ func (m *EdtMatchFilter) build(filters []string) error {
return nil
}

func (m *ExecutorMatchFilter) build(filters []string) error {

m.filters = append(m.filters, regexp.MustCompile(executorre))

for _, filter := range filters {

val, ok := shortFilters[filter]

if !ok {
return fmt.Errorf("unknown <%s> filter", filter)
}

m.filters = append(m.filters, regexp.MustCompile(val))

}

return nil
}

func (m *EdtMatchFilter) isDistrFile(source string) bool {
for _, filter := range m.distrRe {

Expand Down Expand Up @@ -363,6 +407,19 @@ func (m *EdtMatchFilter) MatchString(source string) bool {
return true
}

func (m *ExecutorMatchFilter) MatchString(source string) bool {

for _, filter := range m.filters {

if ok := filter.MatchString(source); !ok {
return false
}

}

return true
}

func NewVersionFilter(_ string, filter string) (VersionFilter, error) {

switch {
Expand Down
28 changes: 28 additions & 0 deletions downloader/filter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,34 @@ Cервер 1С:Предприятия (64-bit) для DEB-based Linux-сист
Cервер 1С:Предприятия (64-bit) для RPM-based Linux-систем
`,
false,
}, {
"u",
ExecutorProject,
`Дистрибутив 1С:Исполнитель (U)`,
true,
}, {
"win.u",
ExecutorProject,
`Дистрибутив 1С:Исполнитель (U)`,
true,
}, {
"u",
ExecutorProject,
`Дистрибутив 1С:Исполнитель (X) Linux
Дистрибутив 1С:Исполнитель (X) Windows
Плагин Visual Studio Code для 1С:Исполнитель
`,
false,
}, {
"win.x",
ExecutorProject,
`Дистрибутив 1С:Исполнитель (X) Windows`,
true,
}, {
"win.x",
ExecutorProject,
`Дистрибутив 1С:Исполнитель (X) Linux`,
false,
},
}
for _, tt := range tests {
Expand Down
Loading

0 comments on commit f2ffa5f

Please sign in to comment.