Wenova: Rise of Conquerors
Plano de Gerência de Configuração de Software
[editar | editar código-fonte]Introdução
[editar | editar código-fonte]Visão Geral
[editar | editar código-fonte]Este documento tem como objetivo definir o plano de gerência de configuração do jogo Wenova: Rise of Conquerors. Serão apresentados o contexto a ser aplicado, os objetivos da gerência de configuração, os papéis e responsabilidades da equipe, as ferramentas utilizadas e o cronograma.
Contexto
[editar | editar código-fonte]Wenova: Rise of Conquerors é um jogo que está sendo desenvolvido conjuntamente nas disciplinas de Introdução ao Desenvolvimento de Jogos, Música para Jogos e Design para Jogos da Universidade de Brasília. É um jogo de luta multiplayer de 4 jogadores que batalham em duplas entre si. O jogo é desenvolvido utilizando a linguagem de programação C++ e a biblioteca multimídia SDL.
Objetivos
[editar | editar código-fonte]Os principais objetivos da gerência de configuração do projeto são:
- Configuração automática de ambiente: Definir ambiente de desenvolvimento para o projeto.
- Integração Contínua: Configurar a integração contínua no repositório oficial do projeto.
- Políticas de uso do repositório: Definir a política de commits, issues e branches da aplicação.
- Manual de Configuração: Criar um manual de configuração de ambiente para contribuidores.
- Empacotamento Debian e RPM: Empacotar o jogo para instalação em sistema baseados em Debian, Red Hat e SUSE.
Papéis e Responsabilidades
[editar | editar código-fonte]Papel | Responsabilidade | Responsáveis |
---|---|---|
Desenvolvedor | Desenvolver funcionalidades do jogo | Igor Ribeiro, Vitor Barbosa, João Paulo Busche e João Vitor Araujo |
Gerente de configuração de software | Planejar e gerenciar atividades de configuração do jogo | Mateus Manuel e João Vitor Araujo |
Auditor de configuração de software | Realizar auditorias e validar atividades | Matheus Faria |
Ferramentas
[editar | editar código-fonte]Ferramenta | Descrição |
---|---|
Git | Sistema de controle de versão dos arquivos do jogo. |
GitHub | Repositório remoto escolhido para hospedagem dos arquivos e que auxiliará no processo da política de branches. |
Travis CI | Serviço web de integração contínua para projetos do GitHub. Nele será colocado o Makefile compilará o projeto. |
GNU Make | Utilitário que contém instruções para a construção automática do código-fonte e de dependências. |
Vagrant | Ferramenta que permite a criação de ambiente virtual. No projeto será utilizado o VirtualBox como solução de virtualização utilizada pelo vagrant. |
VirtualBox | Software de virtualização que viabiliza a instalação de sistemas operacionas distintos. |
Chef | Ferramenta para criação e configuração automática de ambiente. No projeto será escrita uma receita para a construção do ambiente de desenvolvimento. |
Cronograma
[editar | editar código-fonte]Atividade | Data de Início | Data de Entrega |
---|---|---|
Plano de Gerência de Configuração de Software | 17/04/2017 | 24/04/2017 |
Configuração automática do ambiente | 24/04/2017 | 01/05/2017 |
Políticas de uso do repositório | 01/05/2017 | 08/05/2017 |
Manual de configuração | 08/05/2017 | 15/05/2017 |
Integração Contínua | 15/05/2017 | 22/05/2017 |
Empacotamento Debian e RPM | 17/05/2017 | 17/06/2017 |
Execução da Gerência de Configuração de Software
[editar | editar código-fonte]Configuração Automática de Ambiente
[editar | editar código-fonte]Na fase de planejamento foi especificado que se utilizaria o Chef para a automatização de configuração do ambiente. Entretanto, com o estudo sobre as possibilidades do vagrant, foi constatado que para a configuração inicial necessária, o mesmo supre de forma satisfatória. Assim sendo, foi criando um arquivo Vagrantfile, no qual foi principalmente explorada a sessão de provision para a instalação dos recursos essencias para ao desenvolvimento do jogo.
Abaixo é possível verificar como ficou o arquivo do vagrant. De qualquer maneira será estudado mais para frente a possibilidade da utilização do Chef, já que novas bibliotecas poderão ser requisitadas, pois o projeto se encontra em desenvolvimento.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.ssh.forward_agent = true
config.vm.synced_folder "../Wenova", "/home/vagrant/Wenova"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install g++ -y
sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev -y
sudo apt-get install git vim -y
sudo apt-get install language-pack-pt -y
git config --global core.editor "vim"
SHELL
Políticas de Uso do Repositório
[editar | editar código-fonte]Política de Commits
[editar | editar código-fonte]Os commits e suas mensagens seguirão os seguintes padrões:
- Um commit deve ser feito para cada componente funcional da funcionalidade descrita no nome da branch.
- O título do commit deve começar com um verbo no imperativo indicando o escopo dele.
- O título deve começar com letra maiúscula.
- O título deve ter 50 caracteres ou menos.
Política de Issues
[editar | editar código-fonte]As issues criadas no repositório serão mapeadas de acordo com as funcionalidades definidas pela equipe de desenvolvimento. Cada issue representa uma funcionalidade, também poderão ser criadas issues relacionadas a bugs e refatorações a serem feitas no projeto. As issues devem ter um label indicando de qual tipo ela é - feature, bug ou refactoring - e devem utilizar o assign para definir os responsáveis por ela. O fechamento de cada issue é feito pelos gerentes de configuração ao integrarem a funcionalidade ou correção na branch de desenvolvimento.
Política de Branches
[editar | editar código-fonte]O projeto contará com 3 níveis de branches: master - devel - issues. A branch master receberá um pull request para cada entrega na disciplina de Introdução ao Desenvolvimento de Jogos (entregas de 30%, 70% e 100% do jogo). A branch devel receberá pull requests de funcionalidades implementadas ou bugs corrigidos. As branches de issue serão criadas a partir da versão mais atualizada da devel e uma branch será criada para a resolução de cada issue. Uma vez resolvida a issue, a integração dela na devel será feita através de um rebase seguido de um pull request para esta.
Política de Aprovação do Código
[editar | editar código-fonte]A aprovação e integração do código será feita a cada pull request da equipe de desenvolvimento para a branch devel. Os pull requests serão analisados pela equipe de gerência de configuração de software e será feita se tais condições forem satisfeitas:
- Não houver conflito com a devel atual.
- A ferramenta de integração contínua indicar compilação sem warning.
- A funcionalidade estiver completa ou o bug resolvido.
- Nenhum novo bug aparente foi introduzido.
Manual de Configuração
[editar | editar código-fonte]Instalação de Dependências
[editar | editar código-fonte]Para instalar as dependências do jogo, é possível utilizar esses métodos:
- Instalação via Vagrant
- Instalação manual
Instalação via Vagrant
[editar | editar código-fonte]Passo 1: Instale o Vagrant
Acesse o link abaixo para fazer o download do pacote compatível com seu sistema operacional. Há pacotes disponíveis para Windows, sistemas Debian-like, CentOS e MAC OS X:
https://www.vagrantup.com/downloads.html
Passo 2: Clone o repositório
Apóis instalar o Vagrant, você pode clonar o projeto com o comando git clone:
$ git clone https://github.com/LManaslu/Wenova.git
Passo 3: Subindo a Máquina Virtual (VM)
Acesse a pasta do repositório clonado:
$ cd Wenova
Na pasta, há um Vagrantfile com todas as configurações para executar a máquina virtual no seu projeto.
Para iniciá-la, execute o comando up:
$ vagrant up
A primeira vez demorará vários minutos.
Passo 4: Accesse a Máquina Virtual
$ vagrant ssh
Na máquiva virtual, o caminho da pasta do clone do projeto estará sincronizado com /home/vagrant/Wenova
Quando for preciso sair da VM, você pode usar o comando logout:
$ logout
Na próxima vez, para rodar a VM, você precisará realizar os passos 3 e 4 novamente.
Instalação Manual
[editar | editar código-fonte]Se você preferir, pode instalar as dependências do jogo manualmente, utilizando comandos bash.
Passo 1: Clone o repositório
$ git clone https://github.com/LManaslu/Wenova.git
Passo 2: Instale o compilador de C++
$ sudo apt-get install g++
Passo 3: Instale as bibliotecas SDL
$ sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl2-mixer-dev
Compilar o código
[editar | editar código-fonte]Para compilar o código do jogo, dentro da pasta do jogo, você pode usar o Makefile disponível no repositório, há vários comandos make disponíveis:
- Compilar
- Limpar pasta obj/
- Limpar pasta obj/ e deletar executável do jogo
Compilar
[editar | editar código-fonte]Para compilar todos os arquivos .cpp da pasta src/ e todos os cabeçalhos .h da pasta include/, use o comando make:
$ make
Opcionalmente, para uma compilação mais rápida, você pode usar a flag -j:
$ make -j
Limpar pasta obj/
[editar | editar código-fonte]Para remover todos os arquivos .d e .o da pasta obj/ , utilize o comando clean:
$ make clean
Limpar pasta obj/ e deletar executável do jogo
[editar | editar código-fonte]Para remover todos os arquivos .d e .o da pasta obj/ e excluir o binário executável da pasta bin/, utilize o comando dist-clean:
$ make dist-clean
Execução do Jogo
[editar | editar código-fonte]Para rodar o jogo compilado, utilize o comando run:
$ make run
Integração Contínua
[editar | editar código-fonte]Para a realização da integração contínua foi escolhida a ferramenta travis. Abaixo segue a configuração utilizada. As builds podem ser vistas em https://travis-ci.org/LManaslu/Wenova.
sudo: required
dist: trusty
language: cpp
install:
- sudo apt-get update
- sudo apt-get install libsdl2-2.0-0 libsdl2-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl2-mixer-2.0-0 libsdl2-mixer-dev -y
compiler:
- g++
script:
- make
Empacotamento Debian
[editar | editar código-fonte]O empacotamento foi feito por meio do dpkg-deb, com os arquivos de configuração gerados manualmente. A pasta de empacotamento continha a pasta DEBIAN, que possui os arquivos de configuração dentro dela. Foram criadas, dentro da pasta de empacotamento, as pastas opt e usr. Na pasta opt, foi criada uma pasta chamada wenova, para que os recursos visuais, de áudio e de level design do jogo sejam instalados na pasta /opt/wenova do sistema em que ele será instalado. Na pasta usr foi criada uma pasta bin que contém o arquivo binário do jogo, para que ele possa ser executado pelo comando wenova
a partir do terminal. A estrutura de pastas pode ser vista abaixo:
.
├── DEBIAN
│ ├── changelog
│ ├── control
│ └── copyright
├── opt
│ └── wenova
│ ├── edit_state
│ │ ├── floor
│ │ └── test_fighter
│ ├── flesh
│ ├── font
│ ├── hud
│ ├── joysticks
│ ├── menu
│ └── stage_1
└── usr
└── bin
└── wenova
14 directories, 62 files
Após a organização das pastas de empacotamento 32 bits e 64 bits, foram criados 3 arquivos na pasta DEBIAN, o control, copyright e changelog.
O arquivo control define os metadados do pacote, como informações de nome, versão, dependências, arquitetura e outros.
Package: wenova
Version: 0.4.1
Architecture: amd64
Maintainer: João Vitor Araujo <joao18araujo@gmail.com>
Installed-Size: 5800
Depends: libc6, libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, libsdl2-mixer-2.0-0
Homepage: https://github.com/LManaslu/Wenova
Priority: optional
Section: misc
Size: 5800
Original-Maintainer: João Vitor Araujo <joao18araujo@gmail.com>
Description: Multiplayer fighting game 2x2
Game developed by UnB students to the Introduction to Game Development course
Acima é apresentado o arquivo control do pacote 64 bits, o control do pacote é idêntico, exceto pela linha de arquitetura, que é escrita dessa forma:
Architecture: i386
O arquivo changelog indica as mudanças dessa nova versão do pacote, não é um arquivo obrigatório para que o empacotamento aconteça, mas é necessário se o pacote for submetido para a comunidade Debian.
wenova (0.4-1) unstable; urgency=medium
* Initial release
* Fighter jumping, crouching, idle, falling and running
* Joystick implemented
* Changeable resolution
* First stage with animations
* Menu completed
-- João Vitor Araujo <joao18araujo@gmail.com> Sun, 11 Jun 2017 11:51:08 -0300
O arquivo copyright define a licença do pacote na versão atual.
MIT License
Copyright (c) 2017 LManaslu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMIT License
Copyright (c) 2017 LManaslu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.MITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Com a pasta e os arquivos de configuração criados, foram gerados dois binários, um para cada arquitetura, em máquinas virtuais de configuração mínimas de 32 e 64 bits. Após isso, foi construído o pacote pela ferramenta dpkg-deb
, o comando usado foi:
dpkg-deb --build deb_package_64 .
dpkg-deb --build deb_package_32 .
Esse comando construiu ambos os pacotes, com nomes de acordo com formato pré-estabelecido <nomedopacote>_<versao>_<arquitetura>.deb, gerando, então, os pacotes wenova_0.4.1_amd64.deb e wenova_0.4.1_i386.deb.
Como definido no arquivo control, os pacotes dependem das seguintes bibliotecas:
- libc6
- libsdl2-2.0-0
- libsdl2-image-2.0-0
- libsdl2-ttf-2.0-0
- libsdl2-mixer-2.0-0
A instalação do pacote através do terminal pode ser feita pelo comando sudo dpkg -i wenova_0.4.1_<arquitetura>.deb
, os arquivos contidos na pasta do pacote de 64 bits estão disponíveis em https://github.com/LManaslu/Wenova/tree/debian/deb_package_64 e os arquivos da pasta de 32 bits estão disponíveis em https://github.com/LManaslu/Wenova/tree/debian/deb_package_32. Os arquivos .deb podem ser encontrados em https://github.com/LManaslu/Wenova/tree/debian/debian_packages.
Empacotamento RPM
[editar | editar código-fonte]Para o empacotamento foi utilizado a distribuição Fedora e por isso instalou-se os seguintes pacotes para auxiliar na construção do pacote:
$ yum install @development-tools
$ yum install fedora-packager
Então, foi construída a árvore de diretório requirida. Copiou-se o código para a pasta BUILD e foi adicionada a pasta SOURCES o .tar.gz gerado. Por fim, segue abaixo o spec criado.
Name: wenova
Summary: Wenova: Rise of Conquerors
Version: 0.1
Release: 1
License: MIT
Group: Amusements/Games
Source: wenova-0.1.tar.gz
URL: https://github.com/LManaslu/Wenova
Vendor: LManaslu
Packager: Mateus Manuel <mateusmanuel21@gmail.com>
BuildRoot: %{_tmppath}/%{name}-buildroot
Requires: gcc, make, SDL2_image, SDL2_mixer, SDL2_ttf
%description
Wenova: Rise of Conquerors is a game that development is doing by the courses Introduction to Game Development, Music for Games and Design for Games from University of Brasília. It´s a multiplayer fight game of 4 players that fight in pairs. The development is doing with C++ programming language and SDL multimedia lib.
%prep
make clean
%build
make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/etc/wenova
make reset
cp -a bin/wenova $RPM_BUILD_ROOT/usr/bin/
cp -a res/ $RPM_BUILD_ROOT/etc/wenova
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/usr/bin/wenova
/etc/wenova
A partir da pasta SPECS, foi possível gerar o .rpm com o comando a seguir.
$ rpmbuild -ba wenova-0.1.spec
Referências
[editar | editar código-fonte]- About SDL. (n.d.). Acessado em 23/04/2017, de https://www.libsdl.org/index.php
- Git Documentation. (n.d.). Acessado em 23/04/2017, de https://git-scm.com/doc
- Build software better, together. (n.d.). Acessado em 23/04/2017, de https://github.com/about
- Travis. (n.d.). Acessado em 23/04/2017, de https://docs.travis-ci.com/
- Gnu.org. (n.d.). Acessado em 23/04/2017, de https://www.gnu.org/software/make/
- Chef – Automate Your Infrastructure. (n.d.). Acessado em 24/04/2017, de https://www.chef.io/chef/
- VirtualBox.org. (n.d.). Acessado em 24/04/2017, de https://www.virtualbox.org/
- Vagrant. Hashicorp. Acessado em 24/04/2017, de https://www.vagrantup.com/