How To
Gitlab
Pull request(BitBucket) vs Merge request(Gitlab)
Pull request = Merge request
Projects(BitBucket) vs Groups(Gitlab)
Projects = Groups
Single Responsibility
class Order {
public calculateTotalSum() {...}
public getItems() {...}
}
Better
class OrderRepository {
public save() {...}
public update() {...}
public delete() {...}
}
class OrderView {
public printOrder() {...}
public showOrder() {...}
}
Single Responsibility
Enable two-factor authentication
-
In GitLab:
- Access your User settings.
- Edit profile
- Select Account.
- Select Enable Two-factor Authentication.
-
On your device:
- Install a compatible application. For example:
- In the application, add a new entry in one of two ways:
- Scan the code displayed by GitLab with your device’s camera to add the entry automatically.
- Enter the details provided to add the entry manually.
-
In GitLab:
- Enter the six-digit pin number from the entry on your device into Pin code.
- Enter your current password.
- Select Submit.
Open/closed
abstract class Screening {
abstract getTitle(): string;
public getDescription(): string {
return "Get your Credit Score & Report. Do not worry";
}
}
Better
class TransUnion extends Screening {
public getTitle(): string {
return "TransUnion: Credit Scores, Credit Reports";
}
}
class RentPrep extends Screening {
public getTitle(): string {
return "RentPrep: Tenant Screening Services & Rental Background";
}
}
Open/closed
Add SSH key
-
In Terminal: if you already have key start from step 5
- ssh-keygen -t rsa.
- Enter ssh-key name(if default name id_rsa exist).
- Passphrase leave empty.
- Done.
- Copy content of PUBLIC key (.pub)
-
In Gitlab:
- Access your User settings.
- Edit profile.
- Select SSH Keys.
- Paste copied PUBLIC key.
- Click on Add key.
-
In Termital:
- Check ssh connection to Gitlab run command: ssh -T git@gitlab.com
Liskov Substitution
interface User {
getSessionID(): ID;
}
interface UserWithAccess {
hasAccess(action: Actions): boolean;
}
interface UserWithProfile {
updateProfile(data: Profile): CommandStatus;
}
class BaseUser implements User {
constructor() {
// ...
}
getSessionID(): ID {
return this.sessID;
}
}
Interfaces
Base class
Liskov Substitution
class RegularUser extends BaseUser implements UserWithAccess, UserWithProfile {
constructor() {
super();
}
hasAccess(action: Actions): boolean {
// ...
return access;
}
updateProfile(data: Profile): CommandStatus {
// ...
return status;
}
}
class Guest extends BaseUser implements UserWithAccess {
constructor() {
super();
}
hasAccess(action: Actions): boolean {
// ...
return access;
}
}
Liskov Substitution
CI and branch rules
- Якщо зробити мердж реквест з будь-якої гілки в стейж тоді стартують тільки тести.
- Якщо МР змерджити з будь-якої гілки в будь-яку іншу гілку нічого не відбувається(крім мерджа в стейж).
- Тести запускаються тільки при МР на гілку стейж/мастер.
- Коли мерджим ствою гілку в стейж оновлюєтся стейж.
- Якщо від гілки стейж робим гілку testlink/назва (до 8 символів) - пайплайн зупиняється але з'являється можливість підняти тестовий лінк (з'являються кнопки).
- Якщо з будь якої гілки робити МР в гілку testlink/назва(до 8 символів) нічого не відбувається, а коли змерджити тоді тестовий лінк оновлюється.
- Мануальні пайплайни не працюють на жодній гілці.
Interface Segregation
interface CloudHostingProvider {
createServer(region: string);
listServers(region: string);
}
Better
class Dropbox implements CloudStorageProvider {
public storeFile(name: string) {...};
public getFile(name: string) {...};
}
class Amazon implements CloudStorageProvider, CloudHostingProvider,
CDNProvider {
public storeFile(name: string) {...};
public getFile(name: string) {...};
public createServer(region: string) {...};
public listServers(region: string) {...};
public getCDNAddress() {...};
}
interface CloudCDNProvider {
getCDNAddress();
}
interface CloudStorageProvider {
storeFile(name: string);
getFile(name: string);
}
Interface Segregation
Create test link
1. Від гілки стейж робим гілку testlink/назва(до 8 символів), слово testlink є обов'язковим, в іншому випадку лінк не створиться.
2. На сторінці проекту зліва в меню заходим CI/CD -> Pipelines, знаходим назву свого пайлайну по назві гілки, клікаєм на dropdown і вибираєм Create test link:
3. Щоб оновити тестовий лінк потрібно потрібно змерджити МР в гілку feature
Dependency Inversion
class Report {
private db: MongoDB; // private db: MySQL;
constructor(private MongoDB: MongoDB) { // private MySQL: MySQL
this.db = MongoDB; // this.db = MySQL;
}
public deleteItem(id: number) {
this.db.remove(id); // this.db.delete(id);
};
}
class MongoDB {
public update(id: number) {...};
public remove(id: number) {...};
}
Low level class
High level class
Dependency Inversion
class Report {
private db: DataBaseInterface;
constructor(private MongoDB: DataBaseInterface) {
this.db = MongoDB;
}
public deleteItem(id: number) {
this.db.delete(id);
};
}
class MongoDB implements DataBaseInterface {
public update(id: number) {...};
public delete(id: number) {...};
}
class MySQL implements DataBaseInterface {
public update(id: number) {...};
public delete(id: number) {...};
}
interface DataBaseInterface {
update(id: number): void;
delete(id: number): void;
}
Low level class
High level class
Abstraction
Dependency Inversion
Destroy test link
1. На сторінці проекту зліва в меню заходим в Deployments, далі Environments
2. Шукаєм назву своєї! гілки, далі кнопка Stop і Stop environment(confirmation)
Gitlab
By TenantCloud
Gitlab
Gitlab How To
- 219