Está página nem sempre estará atualizada, então recomendamos sempre verificar quando foi a ultima atualização, usando como referência a versão em Inglês.
Oi! Estamos muito entusiasmados por você estar interessado em contribuir com a CasaOS. Antes de enviar sua contribuição, reserve um momento e leia as diretrizes a seguir.
Você deve estar familiarizado com Golang e scripts de shell para desenvolvimento de back-end ou Vue.js para desenvolvimento de front-end.
Você deve estar familiarizado com o Git e todo o processo de pull request (PR) no GitHub.
O branch principal é apenas um imagem da versão estável mais recente. Todo o desenvolvimento deve ser feito em filiais dedicadas. Não envie PRs para a filial principal.
Faça check-out de um ramo de tópico do ramo relevante, por ex. dev e mesclar novamente com esse branch.
Não há problema em ter vários commits pequenos enquanto você trabalha no PR - o GitHub irá comprimi-los automaticamente antes da fusão.
Se adicionar um novo recurso:
Se estiver corrigindo o bug:
(fix #xxxx[,#xxxx])
(#xxxx
é o ID do problema) no título do seu PR para obter um log de lançamento melhor, por exemplo. atualizar codificação/decodificação de entidades (correção #3899)
.API Gateway (ainda não está pronta)
API UserService (apenas APIs limitadas disponíveis)
A configuração abaixo não é a única maneira de começar o desenvolvimento do CasaOS. Sinta-se à vontade para aplicar qualquer experiência e prática com as quais você se sinta mais confortável.
go
e vá para $HOME/.local/go
(ou qualquer diretório que você desejar)~/.profile
contém a seguinte linha na parte inferior (ou coloque no diretório que você selecionou na etapa anterior) PATH="$HOME/.local/go/bin:$HOME/go/bin:$PATH"
Os dois caminhos diferem como abaixo
$HOME/.local/go
- caminho root do Go, contém core, documentos e bibliotecas do Go
$HOME/go
- caminho da ferramenta Go, contém ferramentas e dependências
Certifique-se de que go version
retorne
goreleaser
- (uma vez) go install github.com/goreleaser/goreleaser@latest
sudo apt-get --no-install-recommends install upx \
gcc libc6-dev-amd64-cross \
gcc-aarch64-linux-gnu libc6-dev-arm64-cross \
gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
Instale Visual Studio Code
Instale extensões
Certifique-se de que a seguinte configuração esteja no VSCode settings.json
{
"go.goroot": "~/.local/go",
"go.gopath": "~/go"
}
Os dois caminhos diferem como abaixo
go.goroot
- Caminho raiz do Go, contém core, documentos e bibliotecas do Gogo.gopath
- Caminho da ferramenta Goo, contém ferramentas e dependênciasConfigurações adicionais recomendadas (mas não obrigatórias)
{
"git.autofetch": "all",
"go.delveConfig": {
"showGlobalVariables": true,
},
"go.diagnostic.vulncheck": "Imports",
"go.inlayHints.assignVariableTypes": true,
"go.inlayHints.compositeLiteralFields": true,
"go.inlayHints.compositeLiteralTypes": true,
"go.inlayHints.constantValues": true,
"go.inlayHints.functionTypeParameters": true,
"go.inlayHints.parameterNames": true,
"go.inlayHints.rangeVariableTypes": true,
"go.lintFlags": [
"-D",
"staticcheck",
"-E",
"gocyclo,gosec,makezero,prealloc,revive,usestdlibvars"
],
"go.lintTool": "golangci-lint",
"go.lintOnSave": "workspace",
"go.toolsManagement.autoUpdate": true,
"gopls": {
"formatting.gofumpt": true,
"ui.diagnostic.analyses": {
"fieldalignment": true,
"nilness": true,
"shadow": true,
"unusedparams": true,
"unusedvariable": true,
"unusedwrite": true,
"useany": true,
},
"ui.semanticTokens": true,
"ui.diagnostic.staticcheck": true,
},
}
Essas configurações podem ajudar muito na produtividade da codificação Golang.
gofmt
padrão.git
sudo apt-get --no-install-recommends install git
git clone git@github.com:IceWhaleTech/CasaOS-Common.git
git clone git@github.com:IceWhaleTech/CasaOS-CLI.git
git clone git@github.com:IceWhaleTech/CasaOS-Gateway.git
git clone git@github.com:IceWhaleTech/CasaOS-MessageBus.git
git clone git@github.com:IceWhaleTech/CasaOS-UserService.git
git clone git@github.com:IceWhaleTech/CasaOS-LocalStorage.git
git clone git@github.com:IceWhaleTech/CasaOS-AppManagement.git
git clone git@github.com:IceWhaleTech/CasaOS.git
Você pode adicionar manualmente cada repositório, um por um, na IU do VSCode ou criar um arquivo
.code-workspace
no caminho comum, como abaixo.
$ cat CasaOS.code-workspace
{
"folders": [
{
"path": "CasaOS-Common"
},
{
"path": "CasaOS-CLI"
},
{
"path": "CasaOS-Gateway"
},
{
"path": "CasaOS-MessageBus"
},
{
"path": "CasaOS-UserService"
},
{
"path": "CasaOS-LocalStorage"
},
{
"path": "CasaOS-AppManagement"
},
{
"path": "CasaOS"
},
{
"path": "get"
}
],
"settings": {}
}
main.go
e instale ferramentas relacionadas ao Go
quando solicitadoFazendo CasaOS-LocalStorage como exemplo aqui.
Execute sob o caminho ./CasaOS-LocalStorage
goreleaser build --clean --snapshot -f .goreleaser.debug.yaml --id casaos-local-storage-amd64
Verifique se foi construído com sucesso
$ dist/casaos-local-storage-amd64_linux_amd64_v1/build/sysroot/usr/bin/casaos-local-storage -v
v0.3.7
goreleaser release --clean --snapshot
curl -fsSL get.casaos.io | sudo bash
Visite http://localhost para verificar
Pare o serviço correspondente cujo código você gostaria de trabalhar - porque você o executará manualmente como parte da depuração.
Inicie o adaptador do depurador
Você pode depurar o código diretamente como em qualquer outra codificação regular do Golang.
No entanto, como o CasaOS requer permissão de root para certos recursos, como controlar daemons do systemd, formatar discos rígidos, etc., usamos essa abordagem para colocar um wrapper em
sudo
para que possamos executar nosso código com permissão de root posteriormente.
sudo $HOME/go/bin/dlv dap --listen=:2345 --only-same-user=false
goreleaser build --clean --snapshot -f .goreleaser.debug.yaml --id casaos-local-storage-amd64
launch.json
para cada módulo - (uma vez)Fazendo um CasaOS-LocalStorage como exemplo aqui.
Ele inicia o binário construído da etapa anterior no adaptador do depurador, o wrapper, que configuramos anteriormente devido à necessidade potencial de permissão de root.
{
"version": "0.2.0",
"configurations": [
{
"name": "LocalStorage (localhost)",
"type": "go",
"debugAdapter": "dlv-dap",
"request": "launch",
"port": 2345,
"host": "127.0.0.1",
"mode": "exec",
"program": "${workspaceFolder}/dist/casaos-local-storage-amd64_linux_amd64_v1/build/sysroot/usr/bin/casaos-local-storage"
}
]
}
Comece a depurar no VSCode
Pressione Ctrl-Shift-D, selecione LocalStorage (localhost) e pressione F5
Para verificar se a depuração está funcionando bem, defina o ponto de interrupção em qualquer lugar, acione a lógica correspondente e veja se ela foi atingida.
Atualize v0.3.6 para a versão mais recente na interface de configurações (non-clean update)
Atualização da versão anterior para a versão mais recente na interface de configurações (non-clean update)
Desinstalação completa
Desinstalar mantendo os arquivos
Exibição do aplicativo (todos, por categoria)
Detalhes da aplicação
Instalação de todos os aplicativos recomendados
Exibir e abrir aplicativos instalados (se não estiver em execução, inicie primeiro)
Importe docker-compose.yml externo para instalação
Instale dois aplicativos simultaneamente (ocupando a mesma porta) (pihole/ADGuard)
Suporte multilíngue
Adicionar, excluir e exibir lojas de terceiros
Confirme se os aplicativos da loja de terceiros são exibidos e instaláveis
Desinstalar
Validade da configuração (incluindo restauração da configuração)
Adicione dicas pessoais
Suporte multilíngue
Reiniciar
Iniciar
Acesso do aplicativo a /DATA
Desligar
Exportar Compose YAML e importar
Adicionar links externos
O mapeamento de armazenamento permanece intacto após a atualização
As variáveis permanecem intactas após a atualização
Outras configurações permanecem intactas após a atualização
Prompts responsivos durante o processo de atualização (em vermelho)
Avisos relevantes mesmo quando nenhuma atualização é necessária (em verde)
No CasaOS que foi atualizado de uma versão mais antiga, os aplicativos antigos aparecem na lista de aplicativos com ícones e podem ser iniciados, interrompidos e desinstalados
Execute aplicativos de contêiner padrão por meio do docker run, que deve aparecer na lista de aplicativos com ícones padrão e pode ser iniciado, interrompido e desinstalado
Montagem automática (exibida no widget)
Navegue pelos arquivos após a montagem
Desmontar
Formato do armazenamento
Remover armazenamento
Criar espaço de armazenamento
A área da UI exibe o disco rígido recém-adicionado
Conecte e desconecte o disco SATA
Habilite MergeFS na UI
Verifique a presença do arquivo em Arquivos após adicionar espaço
Verifique a presença do arquivo em Arquivos após reduzir o espaço
O aplicativo precisa ser reiniciado após adicionar a mesclagem
Alertar os usuários sobre a possibilidade de perda de dados ao reduzir a mesclagem
Lembrete de disco de abandonado
Upload/Download
Crie um arquivo TXT, salve o conteúdo de entrada e modifique o nome do arquivo
Criar e modificar nomes de pastas
Reprodução normal de vídeo/fotos (visualização, definir como papel de parede)/música
Seleção múltipla de arquivos: copiar, colar, cortar, baixar, excluir
Servidor Samba - Monte qualquer disco e caminho
Servidor Samba - Grave e leia arquivos do Windows e macOS
Cliente Samba - Conecte-se ao servidor Samba no Windows, macOS e Linux
DropBox - Vincular, baixar, fazer upload de arquivos
GoogleDrive - Vincular, baixar, fazer upload de arquivos
Transferência de arquivos um para um - Verifique a funcionalidade normal do remetente e do destinatário
Transferência de arquivos um para muitos - Verifique a funcionalidade normal do remetente e dos destinatários
Verifique a exibição adequada ao navegar fora da página FlashSend
Verifique se a memória é liberada ao sair da página web
Baixe links BT/Magnético para o disco mesclado e reproduza através de arquivos locais e/ou Samba para externos
Baixe links BT/Magnético para externos