Skip to content

Instantly share code, notes, and snippets.

@Neisoweli
Last active April 4, 2018 08:41
Show Gist options
  • Save Neisoweli/8eee6b25ca23242db4a13e801cf578d5 to your computer and use it in GitHub Desktop.
Save Neisoweli/8eee6b25ca23242db4a13e801cf578d5 to your computer and use it in GitHub Desktop.
Lab10.Report

Laboratory work X Build Status

Данная лабораторная работа посвещена изучению систем управления пакетами на примере Hunter

$ open https://github.com/ruslo/hunter

Tasks

  • 1. Создать новую ветку в репозитории Labs с названием lab10 на сервисе GitHub
  • 2. Сгенирировать токен для доступа к сервису GitHub с правами repo
  • 3. Выполнить инструкцию учебного материала
  • 4. Ознакомиться со ссылками учебного материала
  • 5. Составить отчет и отправить ссылку личным сообщением в Slack

Tutorial

Устанавливаем переменные окружения

$ export GITHUB_USERNAME=<имя_пользователя>
$ export GITHUB_TOKEN=<сгенирированный_токен>

Используем ранее созданный скрипт и устанавливаем командную утилиту hub

$ cd ${GITHUB_USERNAME}/workspace
$ pushd .
$ source scripts/activate
$ go get github.com/github/hub

Создаем файл конфигураций для утилиты hub

$ mkdir ~/.config
$ cat > ~/.config/hub <<EOF
github.com:
- user: ${GITHUB_USERNAME}
  oauth_token: ${GITHUB_TOKEN}
  protocol: https
EOF
$ git config --global hub.protocol https

Скачмваем архив проекта и получаем хэш-сумму архивного файла

$ wget https://github.com/${GITHUB_USERNAME}/Labs/archive/v0.1.0.0.tar.gz
$ export PRINT_SHA1=`openssl sha1 v0.1.0.0.tar.gz | cut -d'=' -f2 | cut -c2-41`
$ echo $PRINT_SHA1 # вывод хэш суммы архива
${PRINT_SHA1} 
$ rm -rf v0.1.0.0.tar.gz

Скачиваем репозиторий Hunter и переходим к версии v0.19.137

$ git clone https://github.com/ruslo/hunter projects/hunter
$ cd projects/hunter && git checkout v0.19.137
Примечание: переход на «v0.19.137».

Вы сейчас в состоянии «отделённого HEAD». Вы можете осмотреться, сделать
экспериментальные изменения и закоммитить их, также вы можете отменить
изменения любых коммитов в этом состоянии не затрагивая любые ветки и
не переходя на них.

Если вы хотите создать новую ветку и сохранить свои коммиты, то вы
можете сделать это (сейчас или позже) вызвав команду checkout снова,
но с параметром -b. Например:

  git checkout -b <имя-новой-ветки>

HEAD сейчас на xxxxxxxx... Add latest GTest release. (#xxxx)
$ git remote show
origin
$ hub fork # создаем ответвление (копию) 
$ git remote show
${GITHUB_USERNAME}
origin
$ git remote show ${GITHUB_USERNAME}
* внешний репозиторий 
  URL для извлечения: https://github.com/${GITHUB_USERNAME}/hunter.git
    URL для отправки: https://github.com/${GITHUB_USERNAME}/hunter.git
  HEAD ветка: master
  Внешние ветки:
    master           отслеживается
    testing-packages отслеживается
  Локальная ссылка, настроенная для «git push»:
    master будет отправлена в master (уже актуальна)

Создаем конфигурационный файл hunter.cmake

$ mkdir cmake/projects/print
$ cat > cmake/projects/print/hunter.cmake <<EOF
include(hunter_add_version)
include(hunter_cacheable)
include(hunter_cmake_args)
include(hunter_download)
include(hunter_pick_scheme)

hunter_add_version(
    PACKAGE_NAME
    print
    VERSION
    "0.1.0.0"
    URL
    "https://github.com/${GITHUB_USERNAME}/Labs/archive/v0.1.0.0.tar.gz"
    SHA1
    ${PRINT_SHA1}
)

hunter_pick_scheme(DEFAULT url_sha1_cmake)

hunter_cmake_args(
    print
    CMAKE_ARGS
    BUILD_EXAMPLES=NO
    BUILD_TESTS=NO
)
hunter_cacheable(print)
hunter_download(PACKAGE_NAME print)
EOF

Добавляем в конфигурационный файл версию print

$ cat >> cmake/configs/default.cmake <<EOF
hunter_config(print VERSION 0.1.0.0)
EOF

Отправляем все изменения в скопированный репозиторий и устанавливаем метку версии v0.19.137.1

$ git add .
$ git commit -m"added print package"
$ git push ${GIHUB_USERNAME} master
$ git tag v0.19.137.1
$ git push ${GIHUB_USERNAME} master --tags
$ cd ..

Скачиваем учебный репозиторий и создаем в нем новую ветку lab10

$ export HUNTER_ROOT=`pwd`/hunter
$ mkdir lab10 && cd lab10
$ git clone https://github.com/Neisoweli/Labs
$ git checkout -b lab10

Создаем файл исходного кода demo.cpp, использующий ранее созданную библиотеку print

$ mkdir sources
$ cat > sources/demo.cpp <<EOF
#include <print.hpp>

int main(int argc, char** argv) {
	std::string text;
	while(std::cin >> text) {
		std::ofstream out("log.txt", std::ios_base::app);
		print(text, out);
		out << std::endl;
	}
}
EOF

Скачиваем архив из репозитория gate и переносим из него файл HunterGate.cmake для работы утилиты Hunter

$ wget https://github.com/hunter-packages/gate/archive/v0.20.30.tar.gz 
$ tar -xzvf v0.20.30.tar.gz gate-0.20.30/cmake/HunterGate.cmake
$ mkdir cmake
$ mv gate-0.8.1/cmake/HunterGate.cmake cmake
$ rm -rf gate*/
$ rm *.tar.gz

Скачиваем архив из скопированного репозитория Hunter и берем его хэш-сумму

$ wget https://github.com/${GITHUB_USERNAME}/hunter/archive/v0.19.137.1.tar.gz
$ export HUNTER_SHA1=`openssl sha1 v0.19.137.1.tar.gz | cut -d'=' -f2 | cut -c2-41`
$ echo $HUNTER_SHA1 # вывод хэш суммы архива Hunter
${HUNTER_SHA1}
$ rm -rf v0.19.137.1.tar.gz

Создаем конфигурационный файл CMakeLists.txt для сборки проекта

$ cat > CMakeLists.txt <<EOF
cmake_minimum_required(VERSION 3.0) 

set(CMAKE_CXX_STANDARD 11)

include(cmake/HunterGate.cmake)
# устанавливаем расположение hunter и хэш-сумму архива
HunterGate(
    URL "https://github.com/${GITHUB_USERNAME}/hunter/archive/v0.19.137.1.tar.gz"
    SHA1 "${HUNTER_SHA1}"
)

project(demo)
# устанавливаем наименование добавляемой библиотеки 
hunter_add_package(print) 
find_package(print)

add_executable(demo \${CMAKE_CURRENT_SOURCE_DIR}/sources/demo.cpp)
target_link_libraries(demo print)

install(TARGETS demo RUNTIME DESTINATION bin)
EOF

Создаем файл .gitignore, который устанавливает для утилиты git неотслеживаемые файлы

$ cat > .gitignore <<EOF
*build*/
*install*/
*.swp
EOF

Добавляем в README.md статус сборки demo проекта

$ cat > README.md <<EOF
[![Build Status](https://travis-ci.org/${GITHUB_USERNAME}/Labs.svg?branch=lab10)](https://travis-ci.org/${GITHUB_USERNAME}/Labs)
the demo application redirects data from stdin to a file **log.txt** using a package **print**.
EOF

Создаем конфигурационный файл для сервиса TravisCI

$ cat > .travis.yml <<EOF
language: cpp

script:   
- cmake -H. -B_build
- cmake --build _build
EOF

Проверяем корректность созданного конфигурационного файла

$ travis lint
Hooray, .travis.yml looks valid :)

Отправляем все изменения в репозиторий

$ git add .
$ git commit -m"first commit"
$ git push --set-upstream origin lab10

Инициализируем сборку в сервисе TravisCI

$ travis login --auto
$ travis enable

Производим сборку проекта и проверяем его работоспособность

$ cmake -H. -B_build -DCMAKE_INSTALL_PREFIX=_install
$ cmake --build _build --target install
$ mkdir artifacts && cd artifacts
$ echo "text1 text2 text3" | ../_install/bin/demo
$ cat log.txt
text1
text2
text3

Links

Copyright (c) 2017 Братья Вершинины
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment